最近知ったこと(Amazon RDS Proxy編)
TL;DR
AWS LambdaからDBサーバ(RDS)に繋ぐのがアンチパターンとは言い切れなくなった。
事前説明
DB(RDBMS)には最大同時接続数なる設定値が存在します。
Lambdaはリクエスト毎にコンテナを起動して関数処理を行います。
(リクエスト数 = コンテナ数)
これまでの問題点
LambdaからDBサーバ(RDS)に繋ぐのはアンチパターンである(以下、理由です)
DBサーバはメモリやリソースを、DB接続(コンテナ)毎に消費します。
サーバーレスアプリケーションは短時間に何万ものリクエストが発生します。
Lambdaのコンテナ間ではコネクションプールを共有できないので、
DBサーバが耐えきれず消沈してしまうわけです。
(リクエスト数 = コンテナ数 = コネクション数)
Amazon RDS Proxyについて
AWS re:Invent 2019 で発表されました。現在はプレビュー版です。(2020年4月14日時点)
公式ページ
- アプリケーションとRDSのコネクションをプロキシでプール及び共有してくれます
- DBサーバのリソース消費削減とアプリケーションのスケーラビリティが向上しました。
※ Lambdaに限った話ではないです
- DBサーバのリソース消費削減とアプリケーションのスケーラビリティが向上しました。
- サポートしているDBエンジンのプロトコルと互換性を持っています。
- アプリケーションは接続先をRDSではなくRDS Proxyに向けてやるだけでOKです。
Amazon RDS Proxy で何が変わった
Lambdaのコンテナ間ではコネクションプールを共有できないので、
DBサーバが耐えきれず消沈してしまうわけです。
コンテナ間ではプール共有できないですが、プロキシ内で共有することができます。
その結果、これまで問題になっていたDBサーバへのリソース消費が改善されました。
(リクエスト数 = コンテナ数 = コネクション数)
ではなくなりました!
最後に
RDS Proxyは、オンライン開催になったJAWS DAYS 2020のセッションから知りました。
来年は新型肺炎も終息して、現地で発表を聞けると信じてます!
(LambdaからRDSを呼び出すアーキテクチャのサービス紹介が何件か出てくると予想)