gitkadoの気まぐれ日記

島根在住エンジニアが何かに興味を持ったらブログを更新します

最近知ったこと(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エンジンのプロトコルと互換性を持っています。
    • アプリケーションは接続先をRDSではなくRDS Proxyに向けてやるだけでOKです。

Amazon RDS Proxy で何が変わった

Lambdaのコンテナ間ではコネクションプールを共有できないので、
DBサーバが耐えきれず消沈してしまうわけです。

コンテナ間ではプール共有できないですが、プロキシ内で共有することができます。
その結果、これまで問題になっていたDBサーバへのリソース消費が改善されました。

(リクエスト数 = コンテナ数 = コネクション数)

ではなくなりました!

最後に

RDS Proxyは、オンライン開催になったJAWS DAYS 2020のセッションから知りました。
来年は新型肺炎も終息して、現地で発表を聞けると信じてます!
(LambdaからRDSを呼び出すアーキテクチャのサービス紹介が何件か出てくると予想)