グーグルのBigtableが耐障害性を強化、Megastoreレプリケーションで

2009年9月24日はてなブックマーク del.icio.us Twitter

グーグルがGoogle App EngineやGoogle Appsのデータベースなどのデータベースとして利用しているのが、「Bigtable」と呼ばれるキーバリュー型ストアです。

グーグルは以前からこのBigtableを複数のデータセンターにまたがって運用し、万が一障害が発生したとしてもデータを失うことがないように、データセンター間のバックアップなどを行ってきました。

データセンターが「落ちる」ことを想定したグーグルのアーキテクチャ - Publickey

しかし、先月の記事「データセンターが「落ちる」ことを想定したグーグルのアーキテクチャ」で紹介したように、グーグルといえどもこうしたデータセンターにまたがるデータベースを安全に運用する方法については試行錯誤しており、7月には6時間にわたり大規模なデータベースの障害を引き起こしていたことは、「Google App Engineにデータストアの障害発生。復帰まで約6時間、原因は現在も不明」で紹介しました(この件については後日、原因などをグーグルが報告しています)。

そのBigtableを強化し、Megastoreという機能でレプリケーションを改善、耐障害性を強化したと、9月14日付けのGoogle App Engine Blog「Migration to a Better Datastore」で説明されていました。

いままでのレプリケーションには問題があった

Google App Engine Blog: Migration to a Better Datastore

記事「データセンターが「落ちる」ことを想定したグーグルのアーキテクチャ」の中のプレゼンテーションでグーグルのRyan Barett氏が説明しているように、グーグルはいままでデータセンター間のバックアップを、「Master/Slave Replication」という方法で行っていました。これは一般に非同期で行われ、スループットはよく、多くのRDBMSでも採用されていますが、Eventual Consistencyだという特徴を持っています。

しかし、このレプリケーション方式では障害発生時に問題が生じる可能性がありました。ブログから引用します。

if the Bigtable cell in A is unhealthy, we're in trouble. Bigtable replication is fast, but it runs in the background, so it's usually at least a little behind, which is why we wait for that final flush before switching to B. If A is unhealthy, some of its data may be unavailable for extended periods of time. We can't get to it, so we can't flush it, we can't switch to B, and we're stuck in A until its Bigtable cell recovers enough to let us finish the flush.

もしもBigtableの(データセンター)セルAに問題が発生すると面倒なことになる。Bigtableレプリケーションは高速だが、バックグラウンドで処理されるため多少の遅れはありがちだ。そのため、(アプリケーションからデータベースへのアクセスをセルAから)セルBに切り替える前にはデータのフラッシュを待たなければならない。しかしAに障害が起こった場合、そのデータにはしばらくのあいだアクセスできなくなり、フラッシュもできなくなり、Bへのスイッチもできなくなってしまう。Aがフラッシュできるほど復旧するまでは待たなければならないのだ。

Aの障害にBが巻き込まれて運用を止めざるを得ないときがある、ということのようです。そして、前述の長時間による障害も、これが原因であったようです。

Megastoreという解決策

これを解決するのが、Megastoreという技術だと解説されています。

Thankfully, there's a solution to our consistency problem: Megastore replication. Megastore is an internal library on top of Bigtable that supports declarative schemas, multi-row transactions, secondary indices, and recently, consistent replication across datacenters. The App Engine datastore uses Megastore liberally. We don't need all of its features - declarative schemas, for example - but we've been following the consistent replication feature closely during its development.

ありがたいことに、このコンシステンシの問題にはソリューションがある。Megastoreレプリケーションだ。Megastoreは、Bigtable上の内部ライブラリであり、宣言的スキーマ、複数行トランザクション、2次インデックス、そして最近、データセンタにまたがる一貫性のあるレプリケーションが実現された。 App EngineのデータストアはこのMegastoreを(一部)利用している、ただしMegastoreのすべての機能、例えば宣言的なスキーマは必要としていない。しかし、一貫性のあるレプリケーションについては開発段階から注目していた。

Megastoreレプリケーションとはどのようなものなのでしょう? 詳細は明かされていませんが、次のように説明されています。

Megastore replication was originally intended to replicate across multiple datacenters synchronously and atomically, using Paxos. Unfortunately, as I described in my Google I/O talk, the latency of Paxos across datacenters is simply too high for a low-level, developer facing storage system like the App Engine datastore.

Megastoreレプリケーションは元々、Paxosを用いて複数のデータセンター間の同期を自動的に計ろうとしていた。しかし、Google I/Oで話したように、Paxosのデータセンター間でのレイテンシは非常に大きい。

Due to that, we've been working with the Megastore team on an alternative: asynchronous, background replication similar to Bigtable's.

そこで、我々はMegastoreチームと協力して別の方法法を採用した。Bigtableレプリケーションに似た、非同期でバックグラウンドで動作するレプリケーションだ。

実は、Megastoreへのマイグレーションはすでに完了しています。9月22日午前5時(米国時間)に作業が予定されており、無事に終了したようです。今後、Google App EngineやGoogle Appsはより安全に利用できることになるのでしょう。

グーグルはGoogle File Systemの次世代版も計画しています「グーグルが「Google File System」次期バージョンを開発中」。クラウドは稼働し続けるのが当然とはいえ、それを維持しながら内部では改善を行っていく様子は非常に興味深いものがあります。

今回紹介したGoogle App Engineのエントリ「Google App Engine Blog」の内容は、「Migration to a Better Datastore - hidemonの日記」で翻訳されています。この記事を書くのにも参考にさせていただきました。

関連記事 on Publickey


次の記事≫ マイクロソフトも最新型の冷房なしデータセンターを完成、グーグル追撃!
前の記事≪ Amazon EC2は1日に5万ずつ新規インスタンスが起動されている、は本当か?

Loading...

Blogger in Chief

photo of jniino Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。新しいオンラインメディアの可能性を追求しています。
詳しいプロフィール


Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
RSSリーダーで : Feed
≫ 過去の記事を読む




アクセスランキング - 過去7日間

  1. IT系上場企業の平均給与を業種別にみてみた …
  2. IT系上場企業の平均給与を業種別にみてみた …
  3. Cassandra入門と、さらに詳しく知るた…
  4. SIerとパッケージベンダはどちらが高給? …
  5. ミクシィのNoSQLデータベース「Tokyo…
  6. 仮想化は、クラウドのインフラとしては不要では…
  7. Windows Azureも事実上、日本にデ…
  8. セキュリティを高めた「仮想化Firefox」…
  9. TwitterがBitTorrentで高速に…
  10. グーグル、「政府専用Google Apps」…
  11. アドビ「iPadでFlashアプリを動かす」…
  12. ITまんが 2010年版 ~ ITが楽しく分…
  13. 楽天、性能向上を分散オブジェクトキャッシュで…
  14. SQLの都市伝説。マイケル・ストーンブレイカ…

アーカイブ  (最新記事10)

バックナンバー

2010年7月
2010年6月
2010年5月
2010年4月
2010年3月
2010年2月
2010年1月
2009年12月
2009年11月
2009年10月
2009年9月
2009年8月
2009年7月
2009年6月
2009年5月
2009年4月
2009年3月
2009年2月






Trackbacks (TrackbackURL:http://www.publickey1.jp/mt/mt-tb.cgi/312)

  • (トラックバックは承認後に掲載されます)

Comments