Content last updated 2025-08-04

Topology Service 向け Cloud Spanner リージョン設定

This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. The development, release, and timing of any products, features, or functionality may be subject to change or delay and remain at the sole discretion of GitLab Inc.
StatusAuthorsCoachDRIsOwning StageCreated
a_richterdevops tenant-scale2025-05-08

Cells アーキテクチャの Topology Service には、強力な整合性保証を持つ高可用性データベースが必要です。Cloud Spanner はリージョナル構成とマルチリージョナル構成の両方を提供します。 私たちの実装では、パフォーマンス、災害復旧機能、コストのバランスが取れた最適な構成を決定する必要があります。

主な検討事項:

  • クライアント側のレイテンシーの例: HTTP Router -> Topology Service
  • サーバー側のレイテンシー: Paxos レプリケーションなどの Spanner 内部通信
  • 災害復旧のニーズとリージョン障害に対する耐性
  • 各構成のコストへの影響
  • Google が提供する SLA

検討中のマルチリージョナル構成:

  • nam3: 米国東部のリード/ライトレプリカと、ヨーロッパとアジアのオプションレプリカ
  • nam11: 複数の北米リージョンにまたがるリード/ライトレプリカ
  • nam-eur-asia3: 北米全体のリード/ライト、ヨーロッパとアジアのリードオンリー

クライアント側レイテンシーテスト

HTTP Router がグローバルからリクエストを送信できる本番環境を模倣するため、現在 us-east1/us-central1 にホストされている Topology Service と各 GCP リージョン間のレイテンシーをテストしました。 テストは GCP VM 上で k6 負荷テストツールを使用して実施し、リージョン間のレイテンシーパターンを示しています。

テスト VM は以下のリージョンに作成されました。

  • asia-east1-a (n1-standard-4)
  • europe-west1-b (n1-standard-4)
  • us-east1 (n1-standard-4)
  • us-central1 (n1-standard-4)

k6 テストスクリプトは、30 秒間 1 つの仮想ユーザーで Topology Service の /v1/classify エンドポイントへ POST リクエストを行いました。

K6 レイテンシーテスト手法

詳細についてはこちらのコメントを参照してください。

import http from 'k6/http';
import { check } from 'k6';

export const options = {
  vus: 1, // Number of virtual users
  duration: '30s', // Test duration
};

export default function() {
  const url = 'https://topology-rest.runway.gitlab.net/v1/classify';
  const payload = JSON.stringify({
    type: "CELL_ID",
    value: "2"
  });

  const params = {
    headers: {
      'Content-Type': 'application/json',
    },
  };

  const response = http.post(url, payload, params);

  // Check if the request was successful
  check(response, {
    'status is 200': (r) => r.status === 200,
  });
}

結果

ベースライン構成(us-east1/us-central1 デプロイ):

実行us-east1europe-west1-basia-east1-c
111.57ms105.69ms182.41ms
211.27ms106.12ms188.10ms
312.04ms105.12ms182.79ms
平均11.63ms105.64ms184.43ms

マルチリージョナル構成(us-east1/us-central1/europe-west1/asia-east1 デプロイ):

実行us-east1europe-west1asia-east1us-central1
114.35ms17.59ms11.48ms31.30ms
214.82ms18.12ms11.23ms32.87ms
313.92ms17.21ms11.79ms30.76ms
平均14.36ms17.64ms11.50ms31.64ms

分析

レイテンシーテストにより、マルチリージョナルデプロイを使用した際の国際リージョンでの大幅な改善が明らかになりました。

  • ヨーロッパのレイテンシー改善: 83% 削減(105.64ms → 17.64ms)
  • アジアのレイテンシー改善: 94% 削減(184.43ms → 11.50ms)
  • 米国東海岸: 分散ルーティングにより若干増加(11.63ms → 14.36ms)

これらの結果は、提案している nam11 構成が北米のユーザーには適しているものの、将来の EU またはアジアベースのデプロイに向けて nam-eur-asia3 に移行すると大幅なパフォーマンス向上が見込まれることを示しています。

サーバー側レイテンシー

Spanner はレプリケーションに Paxos を使用します。マルチリージョナルでは、書き込みの成功は両方のリージョンで完了したことを意味します。 書き込みを高速化するには、両リージョン間のレイテンシーを低く保つ必要があります。 以下の Performance Dashboard は、nam3 に対応するリージョンである us-east1us-east4 間のレイテンシーが最小であることを示しています。

ゾーンペア間のレイテンシー

ソース

決定事項

以下の変更を加えた nam3 をベースのインスタンス構成として採用します。

  • プライマリとして us-east1us-east4 の代わりに): 私たちのプライマリリージョンは us-east1 です。
  • 追加の読み取り専用レプリカ: HTTP Router はグローバルに分散されているため、分類のレイテンシーを改善するために Topology Service も同様にグローバルに分散させる必要があります。そのため追加の読み取り専用レプリカが必要です。
リード/ライトリージョン読み取り専用リージョンウィットネスリージョンオプションの読み取り専用リージョン
us-east1(プライマリ)、us-east4us-west2asia-southeast1europe-west1us-central1asia-southeast2europe-west2

データの暗号化については、Customer-Managed Encryption Keys(CMEK)を実装するのではなく、自動的に有効になる Google のデフォルト暗号化(保存時)を使用します。

結果

Spanner のトポロジーを変更すると、インスタンスの移動がトリガーされます。 Terraform を使用するとインスタンスが再作成されてデータが失われる可能性がありますが、 レガシー Cell を Cells クラスターに追加する直前に読み取りレプリカを追加すれば、データの損失は発生しません。

利点

  1. 必要になるまでのコスト削減: リード/ライトのトポロジーを変更せずに小さく始めて拡張できます。
  2. 書き込みのサーバー側レイテンシーが最小化されます。
  3. クライアント側レイテンシーのためにヨーロッパやアジアなど他のコンテンツへの拡張が可能です。
  4. CMEK と比較して暗号化キーのメンテナンスオーバーヘッドが削減されます。

検討した代替案

代替案 1: nam-eur-asia3

コンテキスト: us-east1us-central1 でのリード/ライトと、すぐに使える読み取り専用リージョン。

決定: サーバー側レイテンシーに最適ではなく、リージョンの拡張性が低く、初期コストが高いため採用しません。

代替案 2: nam11

コンテキスト: us-east1us-central1 でのリード/ライトと、単一のオプション読み取り専用リージョン。

決定: サーバー側レイテンシーに最適ではなく、リージョンの拡張性が低いため採用しません。

コスト分析

構成コンピュートレプリケーション合計コスト
nam3$12,138.60$888.18$13,026.78
nam11$11,702.50$888.18$12,590.68
nam-eur-asia3$20,751.58$1937.12$22,688.70

この見積もりは以下に基づいています。

  • コンピュート容量 5 ノード
  • SSD ストレージ 1 TB
  • 1 時間あたりの書き込み/変更データ 10 GB
  • Enterprise Plus エディション