Google の公式のドキュメントでは Bigtable のアーキテクチャを下記のように紹介しているが、実はここには記載されていない、わりかし重要な仕様や要素が含まれていたりするので、Bigtable の検索時の動作も含め、簡単にまとめました。
Bigtable の構成要素
- Node (Tablet Server)
- Chubby
- GFS (Colossus)
- SSTable (File)
- Tablet
- Root tablet
- Memtable
- tablet log
データ
BigTable のテーブルのデータは、内部では複数の Tablet に分割されているので、例えば、User のデータを保持する User Table があれば、そのデータは Tablet1、Tablet2、Tablet3 と複数の Tablet に分割されます。
※ Tablet 内のデータはキーの辞書順にソートされている
データの保存先
実際のデータは Tablet Server のメモリ上にある memtable というキャッシュと GFS (GoogleFileStrage) 上に SSTable 形式のファイル、さらに Tablet log にも保存されます。
※1 Tablet log は追記限定のため、ファイルの書き込み処理のオーバーヘッドを低減しています。
※2 memtable も追加書き込み方式のため、時間がたつとどんどん肥大化してしまうので、マイナーコンパクションという、その時点の memtable の内容を新しい SSTable に書き込んで、memtable をクリアする処理が定期的に走る。
※3 マイナーコンパクションとは別にメジャーコンパクションも存在するが、これはマイナーコンパクションで作成された SSTable と既存の SSTable を一つにまとめる処理のこと。
RootTablet ・ Chubby Server
データ にもあったようにテーブルのデータは複数のTabletに分割されるが、それとは別に Root Tablet、META DATA Tablet という特別な Tablet に他のTablet がどの Tablet Server に振り分けられているのかが登録されている Tablet が存在する。
また、Root Tablet が担当している Tablet Server の情報は分散ロックサービスの Chubby にも保存されるため、クライアントは一度、 Chubby にアクセスして RootTablet の情報を取得した後、該当の Tablet Server にアクセスをして欲しいデータを取得するフローになっている。
※ Chubby 自身もマスタ・レプリカの冗長化された構成になっており、レプリカはいつでもマスタに昇格できるようになっている。
Master Server
Tablet Server の状態を管理する Master Server は、実はクライアントからはほとんどアクセスされなく、新規にテーブルを作成した場合や、既存の Tablet Server が障害で停止した場合に、他の Tablet Server のリソースを見て、余裕のあるものに Tablet を振り分けるといったことを行います。
そのため、 Master Server が停止した場合でも、問題なくテーブルにアクセスが可能になっている。
また、Master Server は Chubby から起動中の Tablet Server を把握して (Tablet Server は起動時に Chubby に自身の存在を登録する) 、サーバーの状態をチェックをしたり、 Chubby から取得した排他ロックを使って、データに矛盾が発生しないように Tablet の操作を行ったりもします。
最後に
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