レプリケーション

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

概要

Spanner はバイトレベルで自動的にレプリケートします。Spanner の読み取りと書き込みのライフサイクルで説明されているように、基盤となるファイル システムでこの機能を活用します。 Spanner は、このファイル システムのファイルにデータベースの変異を書き込みます。マシンやディスクに障害が発生したときに、このファイル システムがファイルの複製と復旧を行います。

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

Spanner は、各データベースのスプリットのレプリカを作成します。スプリットは連続した行を保持します。ここで、行は主キーにより順序付けられます。1 つのスプリットのデータはすべて同じレプリカに物理的に保存さSpanner は独立した障害ゾーンに各レプリカを提供します。詳細については、スキーマについてをご覧ください。

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

Spanner レプリケーションのメリット

Spanner レプリケーションのメリットには、次のものがあります。

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

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

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

  • アプリケーション開発の省力化: Spanner は ACID に準拠し、グローバルな強整合性を提供するため、Spanner を利用するデベロッパーは、結果整合性に対処するロジックをアプリケーションに追加する必要がありません。アプリケーションの開発とその後のメンテナンスを迅速かつ簡単に行うことができます。

レプリカの種類

Spanner には、読み書きレプリカ読み取り専用レプリカウィットネス レプリカの 3 種類のレプリカがあります。ベースインスタンス構成を形成するリージョンとレプリケーション トポロジは固定されています。ベースのリージョン インスタンス構成では、読み取り / 書き込みレプリカのみを使用します。ベースのデュアルリージョン インスタンス構成では読み取り / 書き込みレプリカとウィットネス レプリカを使用しますが、ベースのマルチリージョン インスタンス構成では、3 種類のレプリカすべてを組み合わせて使用します。カスタム インスタンス構成を作成し、リージョン インスタンス構成とマルチリージョン インスタンス構成に読み取り専用レプリカを追加できます。

次の表に、Spanner レプリカの種類とそれらのプロパティの概要を示します。

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

* 詳細については、カスタム インスタンス構成を使用してインスタンスを作成する方法をご覧ください。

読み取り / 書き込みレプリカ

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

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

読み取り専用レプリカ

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

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

    強力な読み取りを行う場合には、リーダー レプリカへのラウンド トリップが必要になる可能性があります。ラウンド トリップはタイムスタンプのネゴシエーションのみを行い、リーダーからの実際のデータの提供は行いません。 タイムスタンプのネゴシエーションはリーダーでの CPU 効率の高いオペレーションであり、通常、データはすでに転送中です。この通信はシステムによって自動的に処理されます。

    古い読み取りと強力な読み取りの詳細については、読み取りのセクションをご覧ください。

  • リーダーになることはできません。

カスタムのリージョンまたはマルチリージョン インスタンス構成を作成し、オプションの読み取り専用レプリカを追加して、読み取りをスケーリングし、低レイテンシのステイル読み取りをサポートできます。[オプションのリージョン] にリストされているロケーションをオプションの読み取り専用レプリカとして追加できます。選択した読み取り専用レプリカのロケーションが表示されない場合は、新しいオプションの読み取り専用レプリカ リージョンをリクエストできます。 ベースインスタンス構成のレプリケーション トポロジは固定されており、変更できません。

オプションの読み取り専用レプリカはすべて、コンピューティング容量とストレージ費用の対象となります。さらに、読み取り専用レプリカをカスタム インスタンス構成に追加しても、インスタンス構成の Spanner SLA は変更されません。リーダー リージョンとは異なる大陸に読み取り専用レプリカを追加する場合は、少なくとも 2 つの読み取り専用レプリカを追加することをおすすめします。これにより、読み取り専用レプリカのいずれかが使用できなくなった場合に、読み取りレイテンシを低く維持できます。

ベスト プラクティスとして、まずカスタム インスタンス構成の非本番環境インスタンスでパフォーマンス ワークロードをテストします。リージョン間のレイテンシの中央値データについては、リージョン間のレイテンシとスループットのベンチマーク ダッシュボードをご覧ください。たとえば、カスタム インスタンス構成を eur6 マルチリージョン基本構成で作成し、us-east1 でオプションの読み取り専用レプリカを作成した場合、europe-west4 のリーダー リージョンへのラウンド トリップ時間のため、us-east1 のクライアントの予想される高い読み取りレイテンシは約 100 ミリ秒になります。十分な古さの古い読み取りではラウンドトリップが発生しないため、はるかに高速です。Lock Insights と Transaction Insights を使用して、高レイテンシの原因となるトランザクションを特定することもできます。

手順については、カスタム インスタンス構成を作成するをご覧ください。

ウィットネス レプリカ

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

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

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

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

書き込み

クライアントの書き込みリクエストは、リーダー以外のレプリカがクライアントの近くに存在している場合や、リーダー レプリカがクライアントから地理的に遠い場所に存在する場合でも、常にリーダー レプリカで最初に処理されます。マルチリージョン インスタンス構成を使用し、クライアント アプリケーションがリーダー以外のリージョンにある場合、Spanner はリーダーアウェア ルーティングを使用して、読み取り / 書き込みトランザクションを動的にルーティングし、データベースのレイテンシを短縮します。詳しくは、リーダー認識ルーティングをご覧ください。

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

読み取り

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

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

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

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

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