Как создать пул соединений в многотенантном приложении?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как создать пул соединений в многотенантном приложении?

Сообщение Anonymous »

Я пишу о мультитенантном микросервисном приложении на C#.Net. У нас есть 5 служб, которые обрабатывают данные, чувствительные к арендаторам (еще несколько для глобальных данных), и мы хотим в ближайшее время запустить в работу 8000 арендаторов, что означает ~ 2500 одновременных пользователей и ~ 1000 одновременных арендаторов (2,5 пользователя на каждого арендатора). Мы используем модель базы данных для каждого арендатора, поскольку у нас есть очень важные данные, которые нельзя сохранять между арендаторами. Мы размещаем в Azure с помощью AKS (k8s/docker) и гибкой службы базы данных Azure для Postgres. Мы используем ngpsql с EF Core 8.0.
В настоящий момент мы изо всех сил пытаемся моделировать заданное количество пользователей. Мы начали с пула соединений без пула dbcontext. Поскольку у каждого арендатора есть своя БД, мы создаем 5 (сервисы) x 1000 (конц. арендаторы) = 5000 подключений на сервере, что сразу же привело к ошибке макс. связи. Мы подняли ее до определенной суммы (по умолчанию 100, но мы пробовали даже несколько таусендов), но все равно казалось, что она обречена. (даже если мы доведем это значение до 5 КБ, максимальное значение Azure будет равно 5 КБ, а это означает, что с ростом количества пользователей в следующем году мы снова потерпим неудачу).
Затем мы отключили пул соединений. (pooling=false в conString), и мы видим положительные результаты. Но сейчас в тестах производительности нас что-то убивает. При 100-200 пользователях время ответа хорошее (10-50 мс), но при растущем количестве пользователей база данных кажется обреченной, и мы говорим о 2-5 секундах для группы очень простых запросов. Для тестирования мы взяли максимальную мощность сервера Azure (максимальное количество операций ввода-вывода в секунду, максимальное значение процессора, максимальное значение памяти), но не увидели каких-либо существенных изменений. Такое ощущение, что без объединения пула соединений издержки на рукопожатие и создание соединения слишком сложны.
Мы попробовали решение здесь с помощью DataSourceRegistry (https://github.com/npgsql) /npgsql/issues/4523), но количество соединений в пуле снова вернулось к 5 КБ, и это снова невозможно обработать.
Есть идеи, что делать? Есть мысли, которые могут нам помочь?

Подробнее здесь: https://stackoverflow.com/questions/787 ... pplication
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»