レプリケーション

このページでは、Cloud Spanner でのデータの複製方法、Cloud Spanner レプリカの種類、読み取り / 書き込みでのレプリカの役割、レプリケーションの利点について説明します。

Cloud Spanner でのレプリケーションの概要

Cloud Spanner は、基盤となる分散ファイル システムからバイトレベルでレプリケーションを自動的に行います(Cloud Spanner 読み取り / 書き込みライフサイクルを参照)。Cloud Spanner は、このファイル システムのファイルにデータベースの変異を書き込みます。マシンやディスクに障害が発生したときに、このファイル システムがファイルの複製と復旧を行います。

Cloud Spanner が構築されている分散ファイル システムでバイトレベルでのレプリケーションが行われている場合でも、Cloud Spanner はデータを複製してデータの可用性と地理的な局所性を維持します。簡単に言うと、Cloud Spanner のデータはすべて行に編成されています。Cloud Spanner は、これらの行の複数のコピー(レプリカ)を作成し、地理的に異なる場所に保存します。Cloud Spanner は、Paxos ベースの同期レプリケーション スキーマを使用しています。このスキーマでは、書き込みを commit する前に、投票レプリカ(以下を参照)が書き込みリクエストの採決を行います。これにより、グローバルに同期されたレプリケーションが実行され、Cloud Spanner 読み書きレプリカまたは読み取り専用レプリカから最新のデータを読み取ることが可能になります。

Cloud Spanner はデータベースを分割した各スプリットのレプリカを作成するという形で、上記のコンセプトを、スキーマとデータモデルで紹介している用語やコンセプトに結び付けています。スプリットは、最上位テーブルで連続している行のセットで、各行は主キーでソートされています。1 つのスプリットのデータはすべて同じレプリカに物理的に保存され、Cloud Spanner は独立した障害ゾーンにレプリカを提供します。

一連のスプリットは Paxos で保存と複製が行われます。Paxos レプリカセット内で、1 つのレプリカがリーダーとして選択されます。読み書きレプリカまたは読み取り専用レプリカがリーダーと通信を行わずに読み取りリクエストを処理できる場合、リーダー レプリカは書き込みを処理します(強力な読み取りがリクエストされた場合、通常はリーダーで読み取り専用レプリカが最近のミューテーションをすべて受け取ったことを確認する必要があります)。読み取りと書き込みでのリーダーあるいはリーダー以外のレプリカの役割については、以下の説明をご覧ください。

Cloud Spanner でのレプリケーションの利点

前述のように、Cloud Spanner のレプリケーションには次の利点があります。

  • データの可用性: データのコピーが増えるため、読み取り時にクライアントで利用可能なデータ量が増加します。投票レプリカの過半数を占めれば書き込みを commit できるため、レプリカの一部が使用できない場合でも、Cloud Spanner は書き込みを行うことができます。

  • 地理的な局所性: Cloud Spanner と異なるリージョンや大陸にデータが配置されている場合、ユーザーやサービスから地理的に近い場所にデータが保存されます。

  • 単一のデータベース エクスペリエンス: Cloud Spanner では、同期レプリケーションとグローバルの強整合性により、スケールに関係なく一貫したデータベース エクスペリエンスを提供できます。

  • アプリケーション開発の省力化: Cloud Spanner の ACID トランザクションではグローバルな強整合性を実現しています。デベロッパーは、結果整合性を扱うアプリケーションでロジックを追加する必要はなく、アプリケーションの開発とメンテナンスを迅速かつ高速に行うことができます。

レプリカの種類

Cloud Spanner には、読み書きレプリカ読み取り専用レプリカウィットネス レプリカの 3 種類のレプリカがあります。単一リージョン インスタンスは読み書きレプリカのみを使用しますが、マルチリージョン インスタンスの構成では、これらの 3 種類すべてを組み合わせて使用できます(理由の詳細については、読み取り専用レプリカとウィットネス レプリカを使用する理由をご覧ください)。

次の表に、Cloud Spanner レプリカの種類と特性を示します。以降のセクションでは、各タイプについて詳しく説明します。

レプリカの種類 投票可能か リーダーにできるか 読み込みを処理できるか
読み書き
読み取り専用 × ×
ウィットネス × ×

読み書き

読み書きレプリカは、読み取りと書き込みの両方をサポートします。このレプリカの特性は次のとおりです。

  • データの完全なコピーを維持します。
  • 読み取りを処理します。
  • 書き込みを commit するかどうかを投票できます。
  • リーダーの選出に参加できます。
  • リーダーになる資格があります。
  • 単一リージョン インスタンスで使用できる唯一のタイプです。

読み取り専用

読み取り専用レプリカは読み取りをサポートします(書き込みはサポートしません)。これらのレプリカは、リーダーや書き込みの commit を決める投票に参加しません。書き込みに必要なクォーラム サイズを増やさずに読み取り容量をスケーリングできます。読み取り専用レプリカの特性は次のとおりです。

  • マルチリージョン インスタンスでのみ使用されます。
  • データの完全なコピーを維持します。このデータは読み書きレプリカから複製されます。
  • 読み取りを処理します。
  • 書き込みの commit を決める投票に参加しません。したがって、読み取り専用レプリカのロケーションは、書き込みのレイテンシに影響しません。
  • デフォルトのリーダー リージョンへのラウンド トリップが必要のないステイル読み取りを処理します。ステイルネスは 15 秒以上と想定されています。強力な読み取りを行う場合には、リーダー レプリカへのラウンド トリップが必要な場合があります。この通信は、システムで自動的に処理されます。(ステイル読み取りと強力な読み取りの詳細については、以下をご覧ください)。
  • リーダーになることはできません。

ウィットネス

ウィットネス レプリカは、読み取りをサポートしませんが、書き込みの commit を決める投票に参加します。これらのレプリカにより、読み書きレプリカがデータの完全なコピーを保存し、読み取りを処理するために必要なストレージやコンピューティング リソースを使用せずに、書き込みクォーラムを簡単に実現できます。ウィットネス レプリカの特性は次のとおりです。

  • マルチリージョン インスタンスでのみ使用されます。
  • データの完全なコピーは維持しません。
  • 読み取りを処理しません。
  • 書き込みの commit を決める投票に参加します。
  • リーダーの選出に参加しますが、リーダーになる資格はありません。

書き込みと読み取りでのレプリカの役割

このセクションでは、Cloud Spanner の書き込みと読み取りでのレプリカの役割について説明します。この役割を理解することで、マルチリージョン構成で Cloud Spanner が読み取り専用レプリカとウィットネス レプリカを使用する理由も理解できます。

書き込み

クライアントの書き込みリクエストは、リーダー以外のレプリカがクライアントの近くに存在している場合や、リーダー レプリカがクライアントから地理的に遠い場所に存在する場合でも、最初にリーダー レプリカに送信されます。

リーダー レプリカは、受信した書き込みを記録し、この書き込みへの投票資格がある他のレプリカに同時に転送します。投票資格のあるレプリカは、書き込みを完了した後、書き込みを commit するかどうかの投票結果をリーダーに返します。投票レプリカ(書き込みクォーラム)の過半数が書き込みの commit に同意すると、書き込みが commit されます。バックグラウンドでは、ウィットネスを除く残りのすべてのレプリカが書き込みを記録します。読み書きレプリカまたは読み取り専用レプリカは、完全なデータを含む別のレプリカに不足データをリクエストします。

読み取り

読み取りリクエストの同時実行モードによっては、クライアントの読み取りリクエストでリーダー レプリカとの通信が必要になる場合があります。

  • リーダー レプリカがシリアル化に必要なロックを保持しているため、読み書きトランザクションに含まれる読み取りはリーダー レプリカから処理されます。

  • 読み取りの同時実行モードによっては、単一の読み取りメソッド(トランザクションのコンテキスト外の読み取り)と読み取り専用トランザクションの読み取りでリーダーとの通信が必要になる場合があります(同時実行モードの詳細については、読み取りタイプをご覧ください)。

    • 強力な読み取りリクエストは、任意の読み書きレプリカまたは読み取り専用レプリカに送信されます。リクエストがリーダー以外のレプリカに送信された場合、このレプリカはリーダーと通信を行い、読み取りを実行する必要があります。

    • ステイル読み取りリクエストは、リクエストのタイムスタンプに従って、最も近い利用可能な読み取り専用レプリカもしくは読み書きレプリカに送信されます。読み取りリクエストを送信したクライアントに最も近いレプリカがリーダー レプリカの場合、リーダー レプリカに送信されます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Spanner のドキュメント