Максимальный размер пула подключений и группа автомасштабирования

В Sequelize.js вы должны настроить максимальный размер пула соединений (по умолчанию 5). Я не знаю, что делать с этой конфигурацией, так как работаю над платформой автомасштабирования в AWS.

Кластер БД Aurora на r3.2xlarge допускает максимальное количество подключений 2000 на реплику чтения (вы можете получить это, выполнив SELECT @@MAX_CONNECTIONS;).

Проблема в том, что я не знаю, какой должна быть правильная конфигурация для каждого сервера, размещенного на наших EC2. Каким должен быть правильный максимальный размер пула соединений, поскольку я не знаю, сколько серверов будет запущено группой автомасштабирования? Обычно значение DB MAX_CONNECTIONS должно быть разделено на количество пулов соединений (по одному на сервер), но я не знаю, сколько серверов будет создано в конце.

Количество одновременных пользователей оценивается между 50 000 и 75 000 одновременных пользователей на дату выпуска.

Был ли у кого-то предыдущий опыт в такой ситуации?


person NinjaFisherman    schedule 28.03.2017    source источник


Ответы (1)


Прошло 6 недель с тех пор, как вы спросили, но, поскольку я недавно занялся этим, я решил поделиться своим опытом.

Ответ зависит от того, как приложение работает и работает. Плюс характеристики приложения под нагрузкой для типа инстанса.

1) Вы хотите, чтобы размер вашего пула был больше, чем ожидаемые одновременные запросы, выполняемые на вашем хосте.
2) Вы никогда не хотите, чтобы у вас была ситуация, когда количество клиентов * размер пула приближается к вашему максимальному лимиту подключений.

Помните, однако, что количество одновременных запросов, как правило, меньше, чем одновременных веб-запросов, поскольку большая часть кода использует соединение для выполнения запроса, а затем освобождает его.

Таким образом, вам нужно будет смоделировать свое приложение, чтобы понять фактические запросы (и их количество), которые будут выполняться для ваших 75 000 пользователей. Это, вероятно, намного МЕНЬШЕ, чем 75 КБ/сек. запросов к базе данных в секунду.

Затем вы можете создать сценарий — мы использовали jmeter — и запустить тест для имитации производительности. Одним из пунктов, который мы сделали во время нашего теста, было увеличение пула выше и увидеть разницу в производительности. На самом деле мы использовали большое число (100) после создания базового уровня и обнаружили, что число имело значение. Затем мы опускали его до тех пор, пока он не начал иметь значение. В нашем случае это было 15, поэтому я установил его на 20.

Это было против t2.micro как нашего сервера приложений. Если я изменю серверы на что-то большее, это значение, вероятно, возрастет.

Обратите внимание, что вы платите за запуск приложения, когда устанавливаете более высокое число... и вы также берете на себя некоторые накладные расходы на своем сервере, чтобы поддерживать эти простаивающие соединения, поэтому делать больше, чем вам нужно, нехорошо.

Надеюсь это поможет.

person sfblackl    schedule 17.05.2017
comment
Спасибо за ваш ответ и вклад. Я делал симуляции, подобные вашей, с Locust за последние недели (различные сценарии использования). В ходе этих стресс-тестов я провел 150 000 одновременных клиентов в течение 10–12 минут, чтобы охватить наш наихудший сценарий. Делаем вывод, что, в конце концов, подключений к БД более чем достаточно для всех, и нам удалось узнать правильный максимальный размер пула для каждого инстанса, как это сделали вы. Я думаю, что это хороший способ решить эту проблему. - person NinjaFisherman; 18.05.2017
comment
@NinjaFisherman Мне любопытно, какой размер бассейна вы выбрали? - person phil; 10.08.2018