Developing applications for geo-replication#

アプリケーションを地域分散PGDクラスターに対して実行するときに考慮すべきことを学びます。 PGDはレプリケーションとフェイルオーバーを透過的に処理しますが、ジオレプリケーションはアプリケーションレベルでの動作を導入し、接続、書き込み、および再試行方法の変更が必要になる場合があります。

geoレプリケーションがアプリケーションに影響を与える場合#

geoレプリケーションでアプリケーションの変更が必要なシナリオを特定します。

  • アプリケーションは書き込みの直後に読み取ります 。レプリケーションは非同期であるため、別のノードまたは場所からの読み取りは、最近のコミットをまだ反映していない場合があります。

  • 書き込みを失うことはできません 。デフォルトのコミットは非同期です。書き込みがレプリケートされる前にノードに障害が発生すると、書き込みは失われます。

  • 失敗したコミットは安全に再試行できません 。このリスクはどのデータベースにも存在しますが、地域分散クラスターでは、書き込みリーダー選択中により多くの飛行中の障害が発生します。書き込みはノード間で複製されるため、中断されたコミットは一部のノードで既に有効になっている場合があり、ブラインド再試行はデータを破損する可能性があります。

  • 複数の場所が同じ行に書き込みます 別の場所から同じ行への同時書き込みにより、競合が発生します。 PGDはそれらを自動的に解決しますが、持続的な競合率は、再設計が必要なアクセスパターンを示します。

  • アプリケーションコードからDDLを実行します 。スキーマの変更は、クラスター全体のロックを取得します。ローカルクラスターでミリ秒単位で完了するDDLは、マルチリージョンクラスターでは数秒を要し、実行中に他のトランザクションをブロックする場合があります。

アプリケーションのジオレプリケーションの準備をする#

新しいアプリケーションを構築するか、既存のアプリケーションを適応するかに同じ考慮事項が適用されます。

接続マネージャーを介して接続する#

個々のノードに直接接続するのではなく、接続マネージャーエンドポイントを使用します。接続マネージャーは、書き込み接続を現在の書き込みリーダーにルーティングし、フェールオーバーを自動的に処理します。復元力を高めるために複数のホストで接続文字列を構成します。

Connecting through Connection Manager を参照してください。

オペレーションごとにコミットスコープを選択します#

DBAは、使用可能なコミットスコープを定義し、グループまたはサブグループレベルでデフォルトを設定します。アプリケーションは、セッションごとまたはトランザクションごとにそのデフォルトをオーバーライドできます。ほとんどの書き込みにグループのデフォルトを使用し、耐久性が重要な場合はマジョリティ保護にオーバーライドし、支払いや在庫の減少などの非冪等操作にCAMOを使用します。

Choosing commit scopes を参照してください。

競合を最小限に抑えるようにスキーマをデザインする#

競合は、複数の場所が同じデータに同時に書き込むときに発生します。デザイン時のスキーマとアクセスパターンの選択は、事後の構成変更よりも競合頻度に大きな影響を与えます。

Preventing conflicts を参照してください。

選択的レプリケーションの構成#

レプリケーションセットを使用して、どのテーブルがどのノードにレプリケートするかを制御し、リージョン内に機密または場所固有のデータを保持します。

Configuring selective replication を参照してください。

再試行を正しく処理する#

冪等操作、1回適用しても複数回適用しても同じ結果を生成する操作は、一時的なエラーで自由に再試行できます。重複したアプリケーションが誤った結果を引き起こす支払いや在庫の減少などの非冪等操作では、 CAMOワークフローで再試行する前にトランザクション運命を決定する必要があります。指数バックオフとサーキットブレーカーを使用して、フェールオーバー中にクラスターに負荷がかかるのを回避します。

Handling retries and failures を参照してください。

DDLを安全に実行する#

地理的分散クラスターのスキーマ変更は、書き込みリーダー全体でロックを取得するため、単一場所のセットアップよりも遅くなり、混乱が発生します。 DDLとDMLの混合を避け、 DDLトランザクションを小さくしてください。

Running DDL safely を参照してください。