Максимальный размер пула подключений и группа автоматического масштабирования
В Sequelize.js вы должны настроить максимальный размер пула соединений (по умолчанию 5). Я не знаю, как справиться с этой конфигурацией, так как я работаю на платформе автомасштабирования в AWS.
Кластер Aurora DB на r3.2xlarge позволяет использовать до 2000 подключений на каждую реплику чтения (вы можете получить это, запустив SELECT @@MAX_CONNECTIONS;)
Проблема в том, что я не знаю, какая должна быть правильная конфигурация для каждого сервера, размещенного на наших EC2. Какой должен быть максимальный размер пула соединений, поскольку я не знаю, сколько серверов будет запущено группой автоматического масштабирования? Обычно значение DB MAX_CONNECTIONS следует делить на количество пулов соединений (по одному на сервер), но я не знаю, сколько серверов будет создано в конце.
Число наших одновременных пользователей на момент выпуска составляет от 50000 до 75000 одновременно.
Получал ли кто-то предыдущий опыт работы с такой ситуацией?
1 ответ
Прошло 6 недель с тех пор, как вы спросили, но с тех пор, как я недавно начал заниматься этим, я решил поделиться своим опытом.
Ответ различен в зависимости от того, как приложение работает и выполняет. Плюс характеристики приложения под нагрузкой для типа экземпляра.
1) Вы хотите, чтобы размер вашего пула был>, чем ожидаемые одновременные запросы, выполняемые на вашем хосте.
2) Вам никогда не нужна ситуация, когда количество клиентов * размер пула приближается к вашему максимальному пределу соединения.
Однако помните, что одновременных запросов обычно меньше, чем одновременных веб-запросов, так как большая часть кода использует соединение для выполнения запроса, а затем освобождает его.
Таким образом, вам нужно смоделировать ваше приложение, чтобы понять фактические запросы (и количество), которые могут произойти для ваших 75K пользователей. Это, вероятно, намного МЕНЬШЕ, чем 75 КБ / сек дБ запросов в секунду.
Затем вы можете создать скрипт - мы использовали jmeter - и запустить тест для имитации производительности. Один из элементов, который мы сделали во время нашего теста, заключался в увеличении пула и увеличении производительности. Мы фактически использовали большое число (100) после выполнения базовой линии и обнаружили, что число имеет значение. Затем мы опустили его, пока он не начал что-то менять. В нашем случае это было 15, и поэтому я установил его на 20.
Это было против t2.micro как нашего сервера приложений. Если я изменю серверы на что-то большее, это значение, скорее всего, возрастет.
Обратите внимание, что вы платите стоимость при запуске приложения, когда устанавливаете большее число... и вы также несете некоторые накладные расходы на сервере, чтобы поддерживать эти незанятые соединения, так что создание большего, чем вам нужно, нехорошо.
Надеюсь это поможет.