Help us understand the problem. What is going on with this article?

Google Cloud Bigtable のアーキテクチャ

More than 1 year has passed since last update.

Google の公式のドキュメントでは Bigtable のアーキテクチャを下記のように紹介しているが、実はここには記載されていない、わりかし重要な仕様や要素が含まれていたりするので、Bigtable の検索時の動作も含め、簡単にまとめました。

スクリーンショット 2018-05-15 20.43.45.png (40.0 kB)

Bigtable の構成要素

  • Node (Tablet Server)
  • Chubby
  • GFS (Colossus)
  • SSTable (File)
  • Tablet
  • Root tablet
  • Memtable
  • tablet log

データ

BigTable のテーブルのデータは、内部では複数の Tablet に分割されているので、例えば、User のデータを保持する User Table があれば、そのデータは Tablet1Tablet2Tablet3 と複数の Tablet に分割されます。

Tablet 内のデータはキーの辞書順にソートされている

イメージ
Big Table Architecture - Page 1.png

データの保存先

実際のデータは Tablet Server のメモリ上にある memtable というキャッシュと GFS (GoogleFileStrage) 上に SSTable 形式のファイル、さらに Tablet log にも保存されます。

※1 Tablet log は追記限定のため、ファイルの書き込み処理のオーバーヘッドを低減しています。
※2 memtable も追加書き込み方式のため、時間がたつとどんどん肥大化してしまうので、マイナーコンパクションという、その時点の memtable の内容を新しい SSTable に書き込んで、memtable をクリアする処理が定期的に走る。
※3 マイナーコンパクションとは別にメジャーコンパクションも存在するが、これはマイナーコンパクションで作成された SSTable と既存の SSTable を一つにまとめる処理のこと。

イメージ
Big Table Architecture - Copy of Page 1.png

RootTablet ・ Chubby Server

データ にもあったようにテーブルのデータは複数のTabletに分割されるが、それとは別に Root TabletMETA DATA Tablet という特別な Tablet に他のTablet がどの Tablet Server に振り分けられているのかが登録されている Tablet が存在する。
また、Root Tablet が担当している Tablet Server の情報は分散ロックサービスの Chubby にも保存されるため、クライアントは一度、 Chubby にアクセスして RootTablet の情報を取得した後、該当の Tablet Server にアクセスをして欲しいデータを取得するフローになっている。

Chubby 自身もマスタ・レプリカの冗長化された構成になっており、レプリカはいつでもマスタに昇格できるようになっている。

イメージ
Big Table Architecture - Copy of Copy of Page 1 (1).png

Master Server

Tablet Server の状態を管理する Master Server は、実はクライアントからはほとんどアクセスされなく、新規にテーブルを作成した場合や、既存の Tablet Server が障害で停止した場合に、他の Tablet Server のリソースを見て、余裕のあるものに Tablet を振り分けるといったことを行います。
そのため、 Master Server が停止した場合でも、問題なくテーブルにアクセスが可能になっている。

また、Master ServerChubby から起動中の Tablet Server を把握して (Tablet Server は起動時に Chubby に自身の存在を登録する) 、サーバーの状態をチェックをしたり、 Chubby から取得した排他ロックを使って、データに矛盾が発生しないように Tablet の操作を行ったりもします。

イメージ
Big Table Architecture - Copy of Copy of Copy of Page 1.png

最後に

Bigtable は最近東京リージョンで利用可能になったり (2018/5/1)、異なるリージョンへのレプリケーションが可能になったりと、まだまだ開発が進んでいるイメージなので、今後のリリース内容にも目が離せないですね。

参考

https://cloud.google.com/bigtable/docs/overview?hl=ja
https://courses.cs.washington.edu/courses/csep552/13sp/lectures/6/bigtable.pdf
http://www.atmarkit.co.jp/ait/articles/0909/07/news096_2.html
http://kaihooo.com/distributed-storage/
https://www.apps-gcp.com/gcp-storage-service/
https://www.school.ctc-g.co.jp/columns/nakai2/nakai205.html

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away