このページでは、Spanner の有向読み取りとその使用方法について説明します。
Spanner の有向読み取りでは、マルチリージョン インスタンス構成またはカスタム リージョン構成(オプションの読み取り専用リージョンを含む)内の特定のレプリカ タイプまたはリージョンに、読み取り専用トランザクションと単一読み取りを柔軟にルーティングできます。
利点
有向読み取りには次のような利点があります。
- 複数のリージョン間でワークロードのロード バランシングをより細かく制御し、CPU 使用率を均等にして、Spanner インスタンスのオーバープロビジョニングを回避します。
- ワークロードの分離を有効にします。分析ワークロードと変更ストリームの読み取りを特定の Spanner レプリカに転送することで、同じ Spanner データベースで実行されているトランザクション ワークロードへの影響を最小限に抑えることができます。
サポートされているクエリ オペレーション
クエリ オペレーション | 有向読み取りはサポートされていますか? |
---|---|
ステイル読み取り | ○ |
強力な読み取り | ○ |
読み取り / 書き込みトランザクション | × |
読み取り / 書き込みトランザクションとパーティション化 DML タイプの一括更新では、有向読み取りはサポートされていません。これは、読み取り / 書き込みトランザクションをリーダー リージョンで処理する必要があるためです。読み取り / 書き込みトランザクションで有向読み取りが使用されている場合、トランザクションは BAD_REQUEST
エラーで失敗します。
制限事項
Spanner の有向読み取りには次の制限があります。
- 有向読み取りは、マルチリージョン インスタンス構成、またはカスタム リージョン構成(オプションの読み取り専用リージョンを含む)内の Spanner インスタンスでのみ使用できます。
- 書き込みリクエストは常にリーダー リージョンによって処理されるため、読み取り / 書き込みリクエストで有向読み取りを使用できません。
- Google Cloud コンソールまたは Google Cloud CLI では、有向読み取りを使用できません。REST API と RPC API および Spanner クライアント ライブラリで使用できます。
- 1 回の有向読み取りで最大 10 個のレプリカを指定できます。
始める前に
有向読み取りを使用する前に、次の点を考慮してください。
- アプリケーションに最も近いレプリカまたはリージョン以外のレプリカまたはリージョンに読み取りをルーティングすると、アプリケーションに追加のレイテンシが発生する可能性があります。
- 以下に基づいてトラフィックをルーティングします。
- リージョン名(例:
us-central1
)。 - レプリカタイプ(有効な値:
READ_ONLY
、READ_WRITE
)。
- リージョン名(例:
- 有向読み取りの自動フェイルオーバー オプションはデフォルトで有効になっています。自動フェイルオーバー オプションが有効で、指定したすべてのレプリカが使用不可または異常な場合、Spannerは
includeReplicas
リスト外のレプリカにリクエストをルーティングします。自動フェイルオーバー オプションを無効にし、指定したすべてのレプリカが使用不能であるか、異常な場合、有向読み取りリクエストは失敗します。
有向読み取りパラメータ
REST API または RPC API を使用して有向読み取りを行う場合は、これらのフィールドを directedReadOptions
パラメータで定義する必要があります。includeReplicas
または excludeReplicas
のいずれか一つのみを含めることができます。両方は使用できません。
includeReplicas
:replicaSelections
の繰り返しセットが含まれます。このリストは、特定のリージョンまたはレプリカタイプへの有向読み取りを考慮する順序を示しています。最大 10 個のincludeReplicas
を指定できます。replicaSelections
: 有向読み取りリクエストを処理するlocation
またはレプリカtype
で構成されます。includeReplicas
を使用する場合は、次のフィールドのうち少なくとも 1 つを指定する必要があります。location
: 有向読み取りリクエストを処理するロケーション。ロケーションは、データベースのマルチリージョン構成内のリージョンのいずれかである必要があります。ロケーションがデータベースのマルチリージョン構成内のどのリージョンにもない場合、リクエストは想定どおりにルーティングされません。代わりに、最も近いリージョンによって処理されます。たとえば、マルチリージョン インスタンス構成nam6
のデータベース上のロケーションus-central1
に読み取りを指定することができます。location
パラメータをleader
またはnon-leader
文字列リテラルで指定することもできます。leader
値を入力すると、Spanner はリクエストをデータベースのリーダー レプリカに転送します。逆に、non-leader
値を入力すると、Spanner は最も近いリーダー以外のレプリカでリクエストを処理します。type
: 有向読み取りリクエストを処理するレプリカタイプ。有効なタイプはREAD_WRITE
とREAD_ONLY
です。
autoFailoverDisabled
: これはデフォルトでFalse
に設定されています。つまり、自動フェイルオーバーが有効になります。自動フェイルオーバー オプションが有効で、指定したすべてのレプリカが使用不可または異常な場合、SpannerはincludeReplicas
リスト外のレプリカにリクエストをルーティングします。自動フェイルオーバー オプションを無効にし、指定したすべてのレプリカが使用不能であるか、異常な場合、有向読み取りリクエストは失敗します。有効な値は、無効の場合はTRUE
、有効の場合はFALSE
です。
excludeReplicas
: リクエストの処理から除外されるreplicaSelections
の繰り返しセットが含まれます。Spanner は、このリストのレプリカにリクエストをルーティングしません。replicaSelections
: 有向読み取りリクエストの処理から除外されるロケーションまたはレプリカタイプ。excludeReplicas
を使用する場合は、次のフィールドのうち少なくとも 1 つを指定する必要があります。location
: 有効読み取りリクエストの処理から除外されるロケーション。type
: 有向読み取りリクエストの処理から除外されるレプリカタイプ。有向なタイプはREAD_WRITE
とREAD_ONLY
です。
REST リクエスト本文の例を表示するには、[有向読み取りを使用する] セクションの [REST] タブをクリックします。
有向読み取りを使用する
有向読み取りを行うには、Spanner クライアント ライブラリ、REST API、RPC API を使用します。
クライアント ライブラリ
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
次の REST API を使用して、有向読み取りを行います。
たとえば、executeSQL
を使用して us-central1
で有向読み取りを行うには、次のようにします。
[session] に以下のように入力します。
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
以下を置き換えます。
- PROJECT-ID: プロジェクト ID。
- INSTANCE-ID: インスタンス ID。
- DATABASE-ID: データベース ID。
- SESSION-ID: セッション ID。
セッションを作成するときに
SESSION-ID
の値を取得します。
[Request body] で以下のように入力します。
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
[実行] をクリックします。レスポンスにクエリの結果が表示されます。
RPC
次の RPC API を使用して、有向読み取りを行います。
モニタリング
Spanner には、インスタンス内の有向読み取りアクティビティをモニタリングするために役立つレイテンシ指標が用意されています。この指標は Cloud Monitoring で使用できます。
spanner.googleapis.com/api/read_request_latencies_by_serving_location
この指標は、/serving_location
フィールドまたは /is_directed_read
フィールドを使用してフィルタリングできます。/serving location
フィールドには、リクエストが提供される Spanner サーバーのロケーションを指定しています。/is_directed_read
フィールドは、指向読み取りオプションが有効かどうかを示しています。
使用可能な指標の全一覧については、Spanner の指標一覧をご覧ください。
次のステップ
- トランザクション外部の読み取りの実行方法を学習する。