

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon RDS Proxy の使用によるアプリケーションのスケーラビリティ、パフォーマンス、可用性の向上
<a name="introduction"></a>



Anand Komandooru、Noorul Hasan、Venkat Nalajala、Varun Kumar (Amazon Web Services (AWS)) による共同執筆

2022 年 10 月

このガイドでは、データベース接続プーリングの必要性、セルフホスト型ソリューションの実装に伴う課題、Amazon Web Services (AWS) 上のアプリケーションアーキテクチャで [Amazon Relational Database Service (Amazon RDS) Proxy](https://aws.amazon.com/rds/proxy/) を Amazon RDS for PostgreSQL で使用する利点について説明します。

## 課題
<a name="challenge"></a>

PostgreSQL は、[process-per-userクライアント/サーバーモデルを使用して実装されます](https://www.postgresql.org/docs/8.3/connect-estab.html)。新しい接続を受信すると、メインプロセスはこの新しい接続を処理する子プロセスを開始します。メインプロセスは次の接続を待ち、子プロセスはこの新しいクライアント接続に関連するすべてのアクティビティを処理します。データベースが新しい接続を受信するたびに、新しい子プロセスが開始されます。

最新のサーバーレスアーキテクチャで構築されたものも含め、多くのアプリケーションでは、データベースサーバーへのオープン接続を多数持つことができます。データベース接続を頻繁に開いたり閉じたりすると、データベースメモリやコンピューティングリソースを使い果たしてしまう可能性があります。

接続を頻繁に開いたり閉じたりするトランザクションアプリケーションでは、接続レイテンシーが高くなり、1 秒あたりのトランザクション数が少なくなります。その結果、アプリケーションのレイテンシーが高くなります。

フェイルオーバーは、プライマリデータベースインスタンスへのアクセスが不可能になり、別のインスタンスが新しいプライマリとして引き継ぐ場合に発生します。これにより、クライアント接続が中断されます。フェールオーバーには、ローリングアップグレードなどの管理上のアクションによって誘発される計画的なものと、障害によって発生する計画外のものがあります。いずれの場合も、オペレーターはダウンタイムを減らしてクライアントの中断を最小限に抑える必要があります。

## 一般的な慣行
<a name="common-practice"></a>

アプリケーションのスケーラビリティとパフォーマンスの課題に対処するために、接続プールが使用されます。接続プーリングは、既存の接続を再利用することで接続レイテンシーを大幅に短縮し、サーバー上のデータベーススループット (1 秒あたりのトランザクション数) を向上させます。接続プールからアプリケーション接続をすぐに提供できない場合、接続プールはアプリケーション接続をクエリしたり、スロットリングしたりします。

この接続プーリングを実装した後にも、さらなる課題が発生します。オペレーターは、接続プーリングサービスを運用するためのインフラストラクチャとソフトウェアを自分で管理する必要があります。フェイルオーバーイベントを処理するために、アプリケーションデベロッパーは各アプリケーションの接続の複雑さを管理する必要があります。アプリケーションは接続障害を検出し、新しいプライマリを検出して、できるだけ早くそのプライマリに再接続する必要があります。

## 推奨事項
<a name="recommendation"></a>

セルフホスト型の接続プーリングソリューションに伴う課題を軽減しながらその利点を活用するには、ワークロードで使用している [Amazon RDS Proxy](https://aws.amazon.com/rds/proxy/) を評価することをお勧めします。

RDS Proxy は、フルマネージドの高可用性データベースプロキシです。RDS Proxy は[接続プーリング](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-connection-pooling)を使用して、アプリケーションのスケーラビリティを向上させ、データベースの耐障害性と安全性を高めます。