Я пишу о мультитенантном микросервисном приложении на 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
Как создать пул соединений в многотенантном приложении? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему пул соединений R2DBC выделяет MAX соединений, когда они не нужны приложению
Anonymous » » в форуме JAVA - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему пул соединений R2DBC выделяет MAX соединений, когда они не нужны приложению
Anonymous » » в форуме JAVA - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Почему пул соединений R2DBC выделяет MAX соединений, когда они не нужны приложению
Anonymous » » в форуме JAVA - 0 Ответы
- 26 Просмотры
-
Последнее сообщение Anonymous
-