RDS / MySQL Пул соединений (автономный / прокси) для AWS Lambda - PullRequest
0 голосов
/ 21 января 2020

Я запускаю службу на AWS Lambda, использую среду выполнения Ruby 2.5 и RDS MySQL (небольшой экземпляр, пока). Существует известный предел около 66 соединений с базой данных или около того, и max_connections рассчитывается по RDS и устанавливается. Масштабирование только очень незначительно решает эту проблему, но стоит значительно.

Теперь, общая рекомендация состоит в том, чтобы инициализировать базу данных вне основной функции Lambda и сохранить эту глобальную переменную своего рода для последующего повторного использования. Это позволяет избежать перезапуска соединений при каждом вызове Lambda. Это работает, но на самом деле это также усложняет ситуацию. Хотя он повторно использует соединение при последующем вызове, дополнительный параллелизм этой лямбда-функции означает, что дополнительные соединения накапливаются. Теперь умножьте это на 50-100 функций, и мы обречены.

Другое решение, по-видимому, заключается в уменьшении максимального числа одновременных обращений / вызовов до 1 или около того для каждой лямбды. Что тоже нехорошо.

Короче говоря: я привык иметь пулы соединений (gem mysql2), и они идеальны. Но здесь я не могу их использовать. Теперь я исследовал, есть ли простой «автономный» сервис, который я могу раскрутить на сервере, который работает как MySQL Proxy / Pool - с интегрированным пулом соединений.

Таким образом, все функции Lambda подключаются к пул по мере необходимости, который позволяет намного больше входящих соединений, возможно, даже (десятки) тысяч, и этот пул, очевидно, должен сейчас иметь дело со сценарием узкого места - что, в нашем случае - абсолютно нормально, если это означает, что лямбда должна ждать немного для освобождения соединения.

Я думал MySQL Прокси (теперь MySQL Реле или что-то в этом роде) может это сделать, но нет. Тогда есть Proxy SQL, но он PHP -фокусированный и, кажется, тоже кое-что еще.

Разве нет ничего, что притворяется сервером MySQL во входящем соединении, а затем внутри? , имеет пул соединений, по которому он распределяет / перенаправляет эти команды в RDS?

Аврора НЕ подходит для этого (унаследованный проект, новый проект уже использует Аврору).

Любая помощь очень оценил, ужасно жаль, что нет кода, но это больше о том, какой инструмент использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...