【データベースプロキシ】

データベースプロキシ とは?

公開:
💡 DBへのアクセスを仕切る「ゲートキーパー」

アプリケーションとDBの間に立ち、コネクション管理・クエリルーティング・フェイルオーバーなどを担うミドルウェア。ProxySQL・pgBouncer・RDS Proxyなどが代表例。

📌 このページのポイント
データベースプロキシの構造 アプリ 1 アプリ 2 アプリ 3 各アプリが 多数の接続 DBプロキシ (ProxySQL等) コネクションプール クエリルーティング フェイルオーバー 書き込み 読み取り プライマリDB (書き込み) レプリカDB (読み取り) 多数の接続 → 集約 → 少数の接続
データベースプロキシが多数の接続を束ね、DB負荷を削減するイメージ
ひよこ ひよこ
データベースプロキシって、なんでアプリとDBの間に挟む必要があるの?
ペンギン先生 ペンギン先生
アプリがスケールして100台になったとして、各アプリが10本のDB接続を持つと1000本になるよね。多くのDBはそんなに大量の接続を処理できないから、プロキシが間に入って接続を束ねてくれるんだよ。
ひよこ ひよこ
じゃあコネクションプールと何が違うの?
ペンギン先生 ペンギン先生
コネクションプールはアプリの中に組み込まれる機能だけど、データベースプロキシはアプリの外にある独立したサーバーだよ。だからアプリが何台増えても、DB側から見える接続数を一定に保てるんだ。
ひよこ ひよこ
他にどんな機能があるの?
ペンギン先生 ペンギン先生
クエリルーティングも得意だよ。SELECTはレプリカDB、INSERT/UPDATE/DELETEはプライマリDBに自動で振り分けられる。アプリはプロキシのアドレスに繋ぐだけで、裏側のDB構成を意識しなくてよくなるんだ。
ひよこ ひよこ
DBが壊れたときはどうなるの?
ペンギン先生 ペンギン先生
フェイルオーバーを透過的に処理できるんだよ。プライマリが落ちたらプロキシが自動でレプリカをプライマリに昇格させて、アプリへの接続をそちらに切り替える。アプリ側はDBが切り替わったことを意識しなくて済むんだ。
ひよこ ひよこ
AWS使ってると「RDS Proxy」って出てくるけどそれもこれと同じなんだね!
ペンギン先生 ペンギン先生
そうだよ。RDS ProxyはAWSが提供するマネージドなデータベースプロキシで、Lambda関数のように接続が頻繁に増減する環境で特に効果を発揮するんだ。LambdaはリクエストごとにDB接続を開こうとするから、プロキシがないとDB接続数が爆発しちゃうからね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「データベースプロキシ」って出てきたら「アプリとDBの間に立つ仲介役」と思えればだいたいOK!
📖 おまけ:英語の意味
「Database Proxy」 = データベースプロキシ
💬 アプリが大量のDB接続を開くとDBが過負荷になるため、その手前でコネクションを束ねる「受付係」として機能するんだよ
← 用語集にもどる