Я пишу о мультитенантном микросервисном приложении на 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#
Место общения программистов C#
-
Anonymous
1727029388
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 КБ, и это снова невозможно обработать.
Что мне попробовать дальше?
Подробнее здесь: [url]https://stackoverflow.com/questions/78757715/how-to-do-connection-pooling-in-a-multi-tenant-application[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия