ApsaraDB RDS for MySQL のデータベースプロキシは、データベースとアプリケーションの間に位置するネットワークプロキシサービスです。このプロキシは、アプリケーションがデータベースに送信するすべてのリクエストを処理し、RDS MySQL インスタンスの接続管理を簡素化します。
プライマリインスタンスの負荷が高い場合や、スイッチオーバーなどの O&M (運用保守) 操作中に中断からの保護が必要な場合は、ApsaraDB RDS for MySQL のデータベースプロキシ機能を使用します。読み書き分離はサービストラフィックの負荷分散を提供し、プライマリインスタンスの CPU 負荷を軽減します。永続的な接続 (中断保護) は、アプリケーションとプロキシ間の接続を維持し、SSL (Secure Sockets Layer) 暗号化はデータ転送を保護します。これらの機能により、インスタンスの可用性とセキュリティが向上します。
シナリオ
ApsaraDB RDS for MySQL のデータベースプロキシは、次のシナリオに適用されます。
読み書き分離が必要なワークロード
スイッチオーバーなどの O&M 操作中や障害発生時に中断からの保護が必要なシナリオ
プライマリインスタンスの負荷が高いシナリオ (トランザクション内のリクエスト数が多い、または接続数が多すぎる)
主に短時間の接続を使用するワークロード
アクセスレイテンシーを削減するために最寄りアクセスが必要なシナリオ
純粋な読み取り専用のワークロードと、分離が必要なワークロード
たとえば、1 つのプライマリインスタンスと 4 つの読み取り専用インスタンスで構成される RDS インスタンスを購入し、アプリケーション A (純粋な読み取り専用) とアプリケーション B (読み取りおよび書き込み) の両方をインスタンスに接続したいとします。この場合、読み取り専用インスタンス 1 と読み取り専用インスタンス 2 をプロキシエンドポイント A (読み取り専用モード) にグループ化してアプリケーション A に使用し、プライマリインスタンス、読み取り専用インスタンス 3、読み取り専用インスタンス 4 をプロキシエンドポイント B (読み書きモード) にグループ化してアプリケーション B に使用できます。これにより、2 つのワークロードはデータベースの利用において物理的に分離され、互いに影響を与えません。
用語
プロキシエンドポイント (旧称:プロキシターミナル)
プロキシエンドポイントは、データベースプロキシの中核です。カスタムのエンドポイントアクセスポリシーをサポートしており、エンドポイントのプレフィックスとポート番号を変更できます。データベースプロキシエンドポイントを介して RDS インスタンスに接続することで、データベースプロキシの高度な機能を利用できます。
データベースプロキシを有効にすると、プロキシエンドポイントごとに 1 つの内部エンドポイントと 1 つのパブリックエンドポイントを申請でき、各プロキシエンドポイントのアクセスポリシーをカスタマイズして、一般的なシナリオの要件を満たし、ビジネスの柔軟性を向上させることができます。詳細については、「データベースプロキシエンドポイントのアクセスポリシーの設定」および「データベース接続」をご参照ください。
読み書き分離
読み書き分離とは、プロキシエンドポイントを介して読み取りリクエストと書き込みリクエストを自動的に転送することです。
書き込みよりも読み取りが多いアプリケーションは、プライマリインスタンスに大きな読み取り負荷をかけ、ビジネスに影響を与える可能性があります。読み書き分離は、書き込みリクエストをプライマリインスタンスに、読み取りリクエストを読み取り専用インスタンスに自動的に転送します。これにより、リクエストの自動分散が実現し、プライマリインスタンスの負荷が軽減されます。
永続的な接続
RDS MySQL プロキシの永続的な接続機能は、インスタンスのスイッチオーバーなどの操作中に、アプリケーションとプロキシ間の接続を維持します。プロキシエンドポイントを介してデータベースにアクセスするアプリケーションでは、切断エラーは発生しません。
トランザクション分割
データベースプロキシは、デフォルトでトランザクション分割を有効にします。この機能は、トランザクション内の書き込み操作の前に発生する読み取りリクエストを読み取り専用インスタンスに転送し、プライマリインスタンスの負荷を軽減します。
接続プール
接続プール機能は、接続数が多すぎることや、(PHP のような) 短時間の接続を使用して頻繁に新しい接続を確立するワークロードによって引き起こされる過剰なインスタンス負荷を効果的に解決します。
ゾーン
ゾーンは、プロキシノードとプロキシエンドポイントが存在する場所です。データベースプロキシを有効にすると、プロキシノードのゾーン間移行が可能になります。
最寄りアクセス
データベースプロキシがマルチ AZ デプロイを使用している場合、最寄りアクセス機能を有効にできます。この機能により、指定したアプリケーションを同じゾーン内のプロキシノードに接続できるため、アプリケーション、プロキシノード、および読み取り専用ノードがすべて同じゾーンに配置され、レイテンシーが最小限に抑えられます。
SSL 暗号化
データベースプロキシエンドポイントにSSL 暗号化を適用して、データが安全に転送されるようにします。
プロキシのデプロイアーキテクチャ
ApsaraDB RDS for MySQL のデータベースプロキシは、シングル AZ デプロイとデュアルゾーンデプロイをサポートしています。
シングル AZ デプロイ:すべてのプロキシノードが同じゾーンに配置されます。
デュアルゾーンデプロイ:プロキシノードが 2 つの異なるゾーンに配置され、追加費用なしでクロスゾーンディザスタリカバリーを提供します。
デプロイモード
データベースプロキシは 3 つのデプロイモードを提供します。これらのモードは、ゾーンの数、プロキシノードの総数、プロキシノード仕様の一貫性、およびサポートするプロキシタイプが異なります。
デプロイモード 3 はすべてのプロキシノードを単一ゾーンに配置するため、ゾーン障害が発生するとデータベースプロキシはサービスを提供できません。デプロイモード 1 と 2 はプロキシノードを 2 つのゾーンに分散させ、クロスゾーンディザスタリカバリーを提供します。
デプロイモード 1
ゾーン:2 ゾーン
プロキシノードの総数:4
プロキシノード仕様の制限:同じゾーン内のプロキシノードは同じ仕様を使用する必要があります。
サポートするプロキシタイプ:専用
災害復旧メカニズム:
プロキシノードレベルの障害:障害が発生したノードはトラフィックの処理を停止し、トラフィックは同じゾーン内の他の正常なプロキシノードに転送されます。
ゾーン障害:サービストラフィックは正常なゾーンのプロキシノードに転送されます (クロスゾーンディザスタリカバリー)。障害が発生したゾーンのプロキシノードが復旧すると、新しいサービストラフィックは復旧したプロキシノードに転送され、既存の永続的な接続のルーティングは接続が自動的に期限切れになるまで変更されません。

デプロイモード 1 でのみ利用可能な最寄りアクセス機能を有効にしている場合、データベースプロキシ全体の可用性がアクセスレイテンシーよりも優先されるため、ゾーン障害が発生するとこの機能が利用できなくなることがあります。
デプロイモード 2
ゾーン:2 ゾーン
プロキシノードの総数:2
プロキシノード仕様の制限:2 つのノードは同じ仕様を使用する必要があります。
サポートするプロキシタイプ:専用および汎用
災害復旧メカニズム:
データベースプロキシは 2 つのゾーンにまたがって 2 つのノードでデプロイされるため、プロキシノードレベルの障害はゾーン障害と同等です。
障害が発生すると、サービストラフィックは他の正常なゾーンのプロキシノードに転送されます。

デプロイモード 3
ゾーン:単一ゾーン
プロキシノードの総数:2
プロキシノード仕様の制限:同じゾーン内のプロキシノードは同じ仕様を使用する必要があります。
サポートするプロキシタイプ:専用および汎用
災害復旧メカニズム:
プロキシノードレベルの障害:障害が発生したノードはトラフィックの処理を停止し、すべてのサービストラフィックは、同じゾーン内の他の正常なプロキシノードが処理します。
ゾーン障害:データベースプロキシはサービスを提供できません。ゾーンのデータセンターでの障害復旧を待つか、手動でプロキシをクロスゾーンデプロイモードに変更します。

データベースプロキシを有効にした後、プロキシのデプロイアーキテクチャを変更できます。詳細については、「データベースプロキシ設定の変更」をご参照ください。
デフォルトのデプロイモードとプロキシゾーン
クロスゾーンアクセスによるネットワークレイテンシーを削減するために、データベースプロキシのゾーン、プロキシエンドポイントのゾーン、および RDS インスタンスのゾーンを同じにしてください。
インスタンスのゾーンデプロイ計画とプロキシタイプを選択すると、デフォルトのプロキシデプロイモードとデフォルトのプロキシゾーンは次のようになります。
| インスタンスのゾーンデプロイ計画 | プロキシタイプ | デフォルトのプロキシデプロイモード | デフォルトのプロキシゾーン |
| シングル AZ デプロイ | 専用 | デプロイモード 3 | デフォルトでは、RDS インスタンスのプライマリノードのゾーンと同じです。 |
| シングル AZ デプロイ | 汎用 | デプロイモード 3 | デフォルトでは、RDS インスタンスのプライマリノードのゾーンと同じです。 |
| デュアルゾーンデプロイ | 専用 | デプロイモード 1 | ゾーン 1:デフォルトでは、インスタンスのプライマリノードのゾーンと同じです。ゾーン 2:デフォルトでは、インスタンスのセカンダリノードのゾーンと同じです。 |
| デュアルゾーンデプロイ | 汎用 | デプロイモード 2 | ゾーン 1:デフォルトでは、インスタンスのプライマリノードのゾーンと同じです。ゾーン 2:デフォルトでは、インスタンスのセカンダリノードのゾーンと同じです。 |
プロキシタイプ
ApsaraDB RDS for MySQL のデータベースプロキシは、汎用と専用の 2 つのプロキシタイプを提供します。
汎用:物理 CPU リソースを共有します。このタイプは無料で、より経済的です。
専用:物理 CPU リソースを専有します。このタイプは従量課金制を使用し、より優れたパフォーマンスの安定性を提供します。
次の表に、2 つのプロキシタイプの違いと、各タイプがサポートする機能を示します。
| 項目 | 汎用 | 専用 |
| 課金方法 | 無料 | 従量課金。詳細については、「課金」をご参照ください。 |
| リソースタイプ | 共有物理 CPU リソース | 専有物理 CPU リソースにより、パフォーマンスの安定性が向上します。 |
| 単一プロキシノードの仕様範囲 | 1~8 コア | 1~16 コア |
| サポート対象の RDS MySQL インスタンス | RDS MySQL 高可用性シリーズおよび Cluster Edition のインスタンス | |
| デプロイアーキテクチャ | デプロイモード 2 および 3 | デプロイモード 1、2、および 3 |
| 最寄りアクセス | サポート対象外 | サポート対象 |
| 読み書き分離 | サポート対象 | |
| トランザクション分割 | サポート対象 | |
| プロキシエンドポイント | 単一の RDS MySQL インスタンスは 1~7 個のプロキシエンドポイントをサポートします。各プロキシエンドポイントは 1 つの内部エンドポイントと 1 つのパブリックエンドポイントをサポートします。 | |
| スイッチオーバー中の永続的な接続 | サポート対象 | サポート対象 |
| フェイルオーバー中の永続的な接続 | サポート対象外 | サポート対象 |
| 接続プール | サポート対象 | |
| SSL 暗号化 | サポート対象 |
上記の表で、専用列のセルが空の場合、その値が汎用列の値と同じであることを示します。
プロキシの仕様とプロキシの数は次のように計算します。
プロキシ仕様と単一プロキシノードの仕様の関係:
プロキシ仕様 = すべてのプロキシノードの仕様の合計。たとえば、専用プロキシが 2 つのゾーン (ゾーン A + ゾーン B) にまたがってデプロイされているとします。ゾーン A の単一プロキシノードの CPU 仕様が 1 コアでノード数が 2、ゾーン B の単一プロキシノードの CPU 仕様が 2 コアでノード数が 2 の場合、
プロキシ仕様 = ゾーン A のプロキシ仕様 + ゾーン B のプロキシ仕様 = 1 コア x 2 + 2 コア x 2 = 2 コア + 4 コア = 6 コアとなります。プロキシ数とプロキシ仕様の関係:
プロキシ数 = プロキシ仕様 / ユニットプロキシ仕様。ユニットプロキシ仕様は 2 CPU コアに固定されています。たとえば、プロキシインスタンスのプロキシ仕様が 6 コアの場合、
プロキシ数 = 6 コア / 2 コア = 3となります。
注意事項
詳細については、「データベースプロキシ機能の注意事項」をご参照ください。
課金
詳細については、「データベースプロキシの課金」をご参照ください。
使用方法
詳細については、「データベースプロキシの使用」をご参照ください。