Three data groups, active-active-active
=======================================

3つのデータグループパターンは3つ以上の地理的リージョンにまたがり、それぞれがローカルの高可用性HAのために独自の独立したRaftコンセンサスグループを実行しています。グループごとに3つ以上のデータノードがある場合、各グループは、接続マネージャーが書き込みリーダールーティングをローカルに処理し、独自のリージョン内でマジョリティベースのコミットスコープを使用できます。

アプリケーションは、低遅延の読み取りおよび書き込みのためにローカルリージョンに接続します。リージョン間のレプリケーションは、通常、リージョン間のレイテンシーペナルティを回避するために非同期です。

.. figure:: /images/three-data-groups.png
   :width: 70% 
   :alt: Three data groups topology

   Three data groups topology

図の凡例
--------

シンボルは、ノードタイプ、グループコンテナ、および接続タイプを表します。

.. figure:: /images/legend.png
   :width: 70% 
   :alt: Diagram legend showing node types, group containers, and connection types

   Diagram legend showing node types, group containers, and connection
   types

このパターンを使用する場合
--------------------------

このパターンは、グローバルSaaSアプリケーション、CDNのようなデータ分散、および3つ以上のリージョンにわたるデータの局所性と最終的一貫性を備えたジオレプリケーションを必要とする多国籍企業に適しています。

このパターンには次のような利点があります。

- すべてのリージョンでの低レイテンシーの読み取りおよび書き込みにより、真のグローバルプレゼンスを有効にします。

- 他のリージョンが動作を継続している間、リージョン全体の障害は生き残ります。

- 3つ以上のリージョンを持つNatural Raftマジョリティ。

- グローバルに分散されたアプリケーションのための最高のエンドユーザーエクスペリエンス。

注意すべき制限がいくつかあります。

- オプティミスティックなクロスリージョンの一貫性処理では、競合は避けられません。

- より多くのノード、より多くの場所、より多くの監視による運用の複雑性の向上。

- リージョン間のレイテンシーは、レプリケーションラグと競合検出ウィンドウに影響を与えます。

グローバルルーティングの追加
----------------------------

3つ以上のデータグループは、クラスター全体がグループごとに1つではなく単一の書き込みリーダーを持つグローバルルーティングで使用することもできます。単一のグローバル書き込みリーダーは、すべての書き込みを1つの場所を介してルーティングすることにより、書き込み競合を排除しますが、書き込みリーダーをホストしていないリージョンの書き込みレイテンシーが増加します。書き込みリーダーの場所が変更されると、すべてのリージョンのレイテンシー特性がシフトします。

.. figure:: /images/three-data-groups-global-routing.png
   :width: 70% 
   :alt: Three data groups with global routing topology

   Three data groups with global routing topology

このパターンに推奨されるコミットスコープ
----------------------------------------

- **マジョリティプロテクト**
  グループ内のマジョリティノードへの同期複製。実稼働使用に最も一般的に推奨されるスコープ。

- **クォーラムコミット**
  ノードがローカルにコミットする前に、すべての参加ノードにわたってコミット決定を調整し、コミットする前にすべてのリージョンでトランザクションが持続することを保証します。決済やコアバンキングなど、厳密な分散一貫性を必要とするワークロードに推奨されます。
  ``MAJORITY FOR EACH GROUP IN CLUSTER QUORUM COMMIT ABORT ON (timeout = 6s)``
  を使用します。これは、リージョンに関係なく、新しい書き込みリーダーに、以前のリーダーによって確認された最新のコミットデータがあることを保証します。

- **アダプティブプロテクト**
  利用可能な場合はグループ内のノードの大部分への同期レプリケーション、構成可能なタイムアウトの後、非同期レプリケーションに自動的に低下します。グループごとに2つのデータノードと1つの監視を使用する場合にお勧めします。

- **ローカルプロテクト**
  ローカルノードのみの耐久性を備えた非同期レプリケーション。実稼働環境での使用はお勧めしません。

コミットスコープは、パフォーマンス、耐久性、一貫性、スケーラビリティにわたってさまざまなトレードオフを行います。

.. figure:: /images/three-data-groups-behavior.png
   :width: 70% 
   :alt: Three data groups behavior diagram

   Three data groups behavior diagram
