Как создать пул соединений в многотенантном приложении?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 (сервисы) х 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#»