Spanner の新しい地域別パーティション分割でパフォーマンスの改善と費用削減を実現
Nitin Sagar
Sr. Product Manager, Google Cloud
※この投稿は米国時間 2024 年 7 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。
昨今の相互に接続された世界において、アプリケーションやユーザーは地理的に分散されています。データベースがこの地理的分散に対応できるように設計されていないと、パフォーマンスやユーザー エクスペリエンスが損なわれることになります。ただし、Spanner の地域別パーティション分割を利用すれば、そのような心配は無用です。
Spanner は、高いスループットと事実上無制限のスケーリングを備えた、Google のフルマネージド型のグローバル分散データベースです。自動シャーディング、計画的なゼロダウンタイム、強整合性などの機能を備えた Spanner は、要求の厳しいグローバルなワークロードにも対応し、リレーショナルと非リレーショナルの両方のワークロードに使用できます。
さらに、地域別パーティション分割が追加されたことで、単一のグローバル データベースの管理性を維持しつつ、世界中に分散するユーザーのレイテンシを改善できます。
地域別パーティション分割の概要とメリット
Spanner の地域別パーティション分割を使用すると、世界中のテーブルデータを行レベルで分割し、ユーザーに近い場所でデータを提供できます。データが複数のデータ パーティションに分割されていても、Spanner は分散されたすべてのデータを、クエリやミューテーション用に 1 つのまとまったテーブルとして維持します。
ゲーム、e コマース、金融サービスをはじめとするさまざまな業界の Spanner のお客様が、地域別パーティション分割を利用することで次のようなメリットを得られます。
-
レイテンシの短縮: ユーザーとデータ間の距離を短縮することで、ネットワーク レイテンシが改善され、その結果、応答時間が短縮されてユーザー エクスペリエンスが向上します。
-
費用の最適化: 地域別パーティション分割を使用すると、各ロケーションの特定のワークロードに合わせてデータベース構成を最適化できます。たとえば、データ パーティション A で対応するユーザー数が、データ パーティション B の 10 倍である場合、データ パーティション A の Spanner ノード数を、データ パーティション B の 10 倍に設定できます。このようにして、データ パーティションの各ロケーションの実際の使用状況に合わせることで、費用を最適化できます。
Wayfair は世界最大級のホーム e コマース企業で、世界中の 2,000 万人を超える顧客に Spanner でサービスを提供しています。
「Google Cloud Spanner の新しいデータ配置機能 [地域別パーティション分割] がリリースされたことを大変嬉しく思います。これにより Wayfair は、高い整合性、可用性、低レイテンシを確保しながら顧客データを保存し、スケーリングできるようになり、さらに費用削減とレプリケーションのオーバーヘッドの削減も実現できます。Cloud Spanner は e コマースにおける新たな選択肢となるでしょう」- Wayfair、Storefront、エンジニアリング部門ディレクター Hiren Patel 氏 および Wayfair、Storefront、プリンシパル エンジニア Shital Mehta 氏
地域別パーティション分割の仕組み
-
データ分割: Spanner の地域別パーティション分割により、単一の Spanner テーブルを複数の Spanner 構成間で分散して、ユーザーの近くに配置できます。こうして分散された複数のデータ パーティションは、より小さなローカライズされたリソースプールやストレージのように機能すると同時に、単一の一元化されたテーブルとしてのメリットも備えています。
-
データの配置: テーブルの一部またはすべてをパーティション分割するように選択できます。パーティション分割されていないテーブルの場合、すべてのデータは「default partition」と呼ばれるパーティションに保存されます。パーティション分割テーブルの場合、データは行レベルでパーティション分割されます。配置ルールを指定することで、各行を指定されたパーティションに配置できます。
-
ユーザー リクエスト: アプリケーションが Spanner に接続すると、リクエストされたデータを含む 1 つ以上のパーティションにリクエストが転送されます。前述の「default partition」は、データ リクエストをそのデータが存在するパーティションにルーティングするのに役立ちます。
具体例: 大規模なマルチプレーヤー型オンライン ゲーム
世界中に広がる大規模なマルチプレーヤー型オンライン(MMO)ゲームがあり、プレーヤーは北米、ヨーロッパ、アジアに分散しているとしましょう。そして、プレーヤーに関連するデータ(プレーヤー ID、リージョン ID、ユーザー名、レベル、キャラクター クラスなど)を地域的にパーティション分割したいとします。
最初に、1 つの Spanner インスタンスを作成し、これに 1 つのデフォルト パーティションと、プレーヤーのロケーションに応じて構成された 3 つの追加パーティションを含めます。
-
デフォルト パーティション(default partition): これは必須のパーティションです。これを使用して、プレーヤー固有ではないすべてのゲームデータを保存し、世界中のすべてのプレーヤーに提供できます。北米、ヨーロッパ、アジアにわたるマルチリージョン構成 nam-eur-asia3 としてこれを構成します。
-
北米パーティション(na-partition): このパーティションを使用して、北米のプレーヤー用のプレーヤー データを保存します。北米全体のリージョンを含むマルチリージョン構成 nam3 としてこれを構成します。
-
ヨーロッパ パーティション(eur-partition): 同様に、ヨーロッパのプレーヤー用に、ヨーロッパ全体のリージョンを含むマルチリージョン構成 eur3 としてこれを構成します。
-
アジア パーティション(asia-partition): 最後に、アジアのプレーヤー用に、アジア全体のリージョンを含むマルチリージョン構成 asia1 としてこれを構成します。
下の図に示すように、パーティションが提供するデータの特定の要件(読み取り、書き込み、ストレージ)に基づいて、データ パーティションごとに異なるノード数を設定できます。これにより、均一ではないプレーヤーの分散状況に応じて費用を最適化できます。
次に、プレーヤー データの配置ルールを作成しましょう。ここでの地域別パーティション分割の最終目標は、読み取りと書き込みのレイテンシを短縮し、パフォーマンスを向上させることです。また、配置ルールに基づいて地域別パーティション分割された Players テーブルを作成することもできます。
SQL
Spanner の地域別パーティション分割されたデータに対する挿入、更新、クエリ、トランザクションは、これまでどおりに機能します。挿入の例を以下に示します。
SQL
複数のパーティションにまたがるデータを更新またはクエリすることもできます。ただし、複数のパーティションに関わるリクエストにより、レイテンシが大きくなる場合があることに留意してください。
地域別パーティション分割の使用を今すぐ開始しましょう
Spanner の地域別パーティション分割は、本日よりプレビュー版としてご使用いただけます。新しい Spanner データベースを作成し、パーティションを作成して、数分以内にデータの操作を開始できます。詳細については、ドキュメント ページをご覧ください。