Как решить проблему объединения баз данных в функции AWS Lambda
Люди всегда в восторге от того, насколько хорош бессерверный подход, но избегают ключевой проблемы, заключающейся в том, как обрабатывать множество экземпляров лямбда.
Обычно обработка многих запросов одновременно не является проблемой, но ваша лямбда обычно интегрируется со многими службами (например, базой данных, SNS, службой электронной почты и т. д.).
Служба SNS, электронной почты может без проблем обрабатывать многие запросы.
С другой стороны, ваша база данных не может.
Обычно в обычном приложении у нас есть пул соединений с базой данных. Это позволяет вашему приложению получать более 100 запросов и обрабатывать запросы с менее чем 100 подключениями к базе данных.
В то время как в лямбде, когда вы получаете более 100 запросов, запрос настолько быстр, что запускает много лямбда для обработки запросов.
В худшем случае он отправляет 100 запросов на подключение к базе данных и максимально отклоняет все запросы.
Я провел бесчисленное количество часов, просматривая stackoverflow, но решения не существовало.
В итоге я сделал следующее:
- перед кодом обработчика я создал контейнер IOC с подключением к серверу pgbounce.
2) Я настраиваю pgbounce для подключения к моей базе данных.
3) Я увеличил максимальное количество подключений как к pgbounce, так и к базе данных.
Теперь, когда более 100 лямбда-выражений подключается к pgbounce, он обрабатывает для меня пул базы данных, и все запросы обрабатываются.
Теперь у вас есть узкое место в pgbounce, но это проще решить, чем заставить лямбду использовать тот же экземпляр.
Если вы хотите поговорить об этом подробнее, вы можете забронировать время со мной на