コンテンツに移動
データ分析

BigQuery の仕組み:ゾーンの割り当ての機能について

2020年3月10日
Google Cloud Japan Team

※この投稿は米国時間 2020 年 2 月 13 日に、Google Cloud blog に投稿されたものの抄訳です。

BigQuery は、サーバーレスでスケーラビリティと費用対効果に優れたクラウド データ ウェアハウスで、柔軟性と使いやすさを考慮して設計されています。BigQuery を開発する際、多くの便利な機能や設計上の決定がありました。この投稿では、BigQuery のリソースにおけるゾーンの割り当てがどのように機能するかについて詳しくご説明します。他の Google Cloud サービスと同様に、BigQuery もグローバルなクラウド リージョンを活用して、いつでも必要なときにデータにアクセスできるようにしています。

BigQuery のアーキテクチャで重要な点は、BigQuery がマルチテナントであるということです。マルチテナントは、コンピューティングやストレージ インフラストラクチャでさまざまなお客様のワークロードを実行しますが、キャパシティ プランニングにお客様を関与させる必要がありません。BigQuery にデータを読み込むときは、お客様がデータの読み込み先リージョンを選択するだけです。また、必要に応じてコンピューティング容量の予約を購入することもできます。その後は、サービスによってプロビジョニングが行われます。

適切なゾーンの割り当てで滞りないデータフローを維持

BigQuery の各リージョンは、内部的には複数の可用性ゾーンにデプロイされており、お客様のデータはこれらのゾーン間で複製されます。プライマリ ゾーンで問題が発生した場合は、セカンダリ ゾーンへの高速フェイルオーバーが自動的に処理されます。このフェイルオーバー機能は、お客様に透過的に行われる設計になっており、ダウンタイムを発生させることはありません。Google Cloud では、既存のお客様のビジネスの成長をサポートし、新しいお客様の追加にも対応できるように、常に容量のフットプリントを拡大しています。また、すべてのお客様がストレージの無限性を実感でき、データの読み込みと分析に十分なコンピューティング リソースを利用できるようにするために、リージョン内のプライマリ ゾーンとセカンダリ ゾーンの最適な配置を継続的に見直しています。

プライマリ ゾーンとセカンダリ ゾーンの最適な割り当てを実現するため、割り当てアルゴリズムは、それぞれのお客様のストレージとコンピューティングの使用量と、各ゾーンでの利用可能な容量を考慮します。そのうえで、現在割り当てられているゾーンに使用量が適合することを確認します。使用量がゾーンに適合しない場合は、そのお客様に適した別のゾーンを探して、現在のゾーンから新しいゾーンへの移動を調整します。これらはすべて、お客様のワークロードを中断することなくバックグラウンドで実行されます。

同じリージョンを共有するデータセットはすべて、1 つのクエリで JOIN されることがあります。クエリの適切なパフォーマンスを確保するため、Google では I/O が同じゾーン内になるようにコンピューティングとストレージを同一の場所に配置するよう努めています。その目的は、同一ゾーン内の高スループットなネットワークを利用することです。同一ゾーン内の I/O 帯域幅は非常に広く設計されており、このネットワークの利点を享受することができます。(Google の Jupiter ネットワーク ファブリックは 1 秒あたり 1 ペタビット以上の全二分帯域幅を維持できます)一方で、異なるゾーン間のネットワーク容量は制限されます。Google の割り当てアルゴリズムは、同じ Google Cloud 組織内の Google Cloud プロジェクトが、すべてのリージョンでゾーンの同じサブセットに確実に割り当てられるようにします。大規模な組織に対応するため、Google ではプロジェクトのかたまりを、その組織内のプロジェクト間クエリパターンに基づいて算出しています。これによって組織をより管理しやすいチャンクに分割し、各チャンクを個別に配置できます。組織をまたいだデータのクエリ読み取りを処理するため、このアルゴリズムは過去のクエリパターンも調べて組織間の関係を特定し、関連する組織間に共通のゾーンを少なくとも 1 つ定めようとします。クエリエンジンでは、リモートでの読み取り、またはクエリ実行前のコンピューティング ゾーンへの一部のデータのコピーにより、同じ場所に配置されない少量のデータを読み取ることもできます。ごくまれに、アルゴリズムでこれを行えない場合や新しい組織間クエリパターンがある場合、大量のデータを読み取るクエリは失敗することがあります。

データの整理と移動のベスト プラクティス

  • 異なるプロジェクトに属すデータセットのデータの読み取り / 書き込みを行うワークロードで最高のパフォーマンスを発揮するには、プロジェクトを必ず同じ Google Cloud 組織内に配置します。

  • 自分のデータを Google Cloud 組織内の別の BigQuery ユーザーも利用できるようにするには、IAM 権限を使用してアクセス権を付与します。

  • データをリージョン間で移動するには、データセットのコピー機能を使用します。

Google Cloud サービスのリージョンとゾーンの詳細をご確認ください。また、Compute Engine がゾーンをどのように処理するかに関する説明もご覧ください。 

- BigQuery ストレージ担当スタッフ ソフトウェア エンジニア Purujit Saha

投稿先