Geographic Replication

データセンタ間データ複製

Aerospikeのデータセンタ間データ複製機能は、インターネット規模で災害対策が必要なアプリケーションのために、自動的、継続的にデータをクラスタ間で複製します。


データセンタ間データ複製(XDR: Cross Datacenter Replication)は、種々のトポロジをサポートしています。例えば、アクティブ・アクティブ、アクティブ・パッシブ、リング状、スター構成、複数センタ経由等、柔軟な構成が可能です。

通常状態(不具合が無い状態)では、各ノードは、そのノード上のマスタとレプリカの両方のパーティションの操作のログを作成しています。しかし、各ノードがリモート・クラスタにデータを送信するのは、そのノード上のマスタ・パーティション内のデータのみです。レプリカ・パーティションが使用されるのは、ノードに不具合があった時のみです。もし、あるノードに不具合が発生した場合、他の全てのノードがそれを検知し、必要な作業を肩代わりします。この方法はスケールアウトすることができ、ノードを追加することにより、データ複製の負荷をさらに分散させることが可能です。

書き込みが行われた際、システムは、その更新をログに残し、そのレコード全体を受信側に送信します。データの読み込みと送信に際して、最適化が行われています。データはログファイルからバッチで読み込まれますが、その際、システムは一つのバッチ内で同じデータが複数回、更新されているかどうかを検査し、最後の1回のみ読み込みます。読み込まれた際に、そのレコードのジェネレーション数値とログ内のそれを比較します。もし、ログ内のジェネレーション数値が小さい場合、そのレコードをスキップします。そのスキップ回数の最大値が設定されており、その間は、送信対象になりません。この最適化により、頻度高く更新されるホットキーの送信回数を削減しています。

各ノードのXDRコンポーネントは、リモート・クラスタに対するクライアントとして動作します。つまり、通常のクライアントと同様に、すべての役割を行います:リモート・クラスタの状態変化を追跡し、リモート・クラスタの全てのノードに接続し、コネクション・プールを保持する等々です。これは、SPOFがないことから、非常に頑強な分散搬送システムと言えます。送信側クラスタの全てのノードは自分の責任の範囲にあるパーティションのデータを送信し、受信側クラスタの全てのノードは同様に受信します。このアルゴリズムでは、送信側と受信側のクラスタの構成が異なっていても構いません。

この方法では、データの変更があれば、送信側、受信側の双方に1台でもノードがあれば、動作することを保証します。同様に、送信側、受信側のクラスタに新たなノードが追加された場合でも、双方の全てのリソースを均等に使うことができるように調整されます。

このデータセンタ間の通信には、Aerospikeは非同期のパイプライン方法を採用しています。送信側の各ノードは、受信側の全てのノードと通信します。各送信側ノードは、送信レコードをラウンドロビン方式で64個のコネクション・プールを使用します。複数レコードは非同期にて、空いているコネクションを利用して送信するために受信側からのレスポンスを待ちます。従って、どのようなタイミングでも、あるコネクションには、複数のレコードが送信待ちの状態にあります。このパイプライン・モデルは、WANのような高レイテンシのネットワークを用いて高いスループットで通信を行うための主たる方法です。受信側のノードが送信されたレコードを書き込んだ後、リターンコードと共に、送信ノードに受領通知を返します。ユーザは、送信される際のレコード数を設定することができ、これにより、ネットワークの使用状況を制御できます。

X