BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Facebookが新しいNoSQLであるApolloを発表

Facebookが新しいNoSQLであるApolloを発表

原文(投稿日:2014/06/13)へのリンク

FacebookのコアデータグループのJeff Johnson氏はQCon New YorkでApolloを発表した。ApolloはPaxosライクなNoSQLデータベースだ。Apache Thrift 2 RPCフレームワーク上でC++11で書かれたApolloは階層型のストレージシステムであり、すべてのデータはシャードに分割される。シャードはHBaseのリージョンサーバにとても似ている。氏の説明によれば、このデータベースの特徴はオンラインで低遅延であることだ。

ドキュメント指向やキーバリューストアとは違い、Apolloはデータ構造を変えることができる。マップやキュー、ツリー、やキーバリューを表現できる。ひとつのデータのサイズは1バイトから1MBの範囲で収まるくらいに小さいが、データの総量は1MBから10PB以上まで扱える。

シャードは4つのコンポーネントから成り立っている。ひとつは、クォーラム合意プロトコル。これはスタンフォードで開発された強いリーダー型の合意アルゴリズムであるRaftに基づいている。氏の説明によれば、Raftの最も気に入っている点はリーダー障害復旧がクォーラムビュー変更と同様しっかりと定義されていることだ。これによって、複数のPaxosを相手にするより遥かにシンプルになる。

やらなければならないことがたくさんありました。ディスクへの非同期書き込みと読み込みを許したり、サーバに処理がたまったり、ディスクの性能が劣化したり、異常を検知したりして、後続の処理が遅くなったら何らかの対処をしなければなりません。

ふたつ目のコンポーネントはストレージだ。書き込みのタイミングでは、プライマリのストレージはRocksDBを使う。これは、GoogleのLevelDB上に構築されたキー/バリューストアだ。Facebookはこれをキーバリュー以外のデータ構造をエミュレートするのに利用している。Apolloはどのようなストレージでも利用でき、チームは代替のストレージエンジンとしてMySQLを使えるようにするために開発を進めている。

3つ目のコンポーネントはClient API。read()write()メソッドがある。Apolloのシェードレベルのすべての操作はアトミックであり、事前条件を提示し、その条件が満たされたら読み込みか書き込みのどちらかを返す。次に示すのはサンプルコードだ。

read(conditions : {map(m1).contains(x)}, 
reads : {deque(d2).back()})

これは、“mapのm1が値xを持っていたら、d2のdequeの値を返す”ということだ。

条件はいくらでも組み合わせることができる。読み込みも同様だ。

書き込みも似ている。事前条件を提示することができる。

write(conditions : {ver(k1) == v}, reads : {}, 
writes : {val(k1) := x})

最後のコンポーネントはフォールトトレラント状態マシン(FTSM)だ。主にシステム側のコードで使われるが、ユーザ側のコードでも使うことができる。各FTSMはシェードが保有する。例えば、ひとつのシャードの3つのマシンでは同じ時点で同じコードが実行される。コードは各マシンのローカルのストレージにアクセスできる。最も重要なのは、ひとつのノードが死んでも、コードはほかのすべてのノードが同意した適切な順番で実行を続けるということだ。

ステートマシンはロードバランシング、データ移行、シャードの作成や削除、クロスシャードトランザクションの調整にも使われている。しかし、ステートマシンには副作用もある。例えば、RPCリクエストをリモートのマシンに送信するが、永続化されている状態に変更を加えるときは、必ずその変更をRaftにサブミットしてすべてのサーバの同意を取り付ける必要がある。

Apolloは現時点ではFacebookの運用には使われていない。しかし、同社はmemcahcedが使われている部分をいくつかApolloで置き換えるつもりだ。Johnson氏はFacebookがmemcahcedをかなり積極的に使っていることを認めた。"私たちはさまざまなインメモリストレージの用途を模索しています。新しいものと既存のものを並べて比較することで、新しいものを調べたり、既存のものを置き換えたりすることも考えています。"と氏はInfoQに語った。

また、同社はApolloを信頼性の高いキューイングシステムとして利用しようとしている。iOSやAndroidやキャリアにSMSでメッセージを送信するために使う。また、より高速に分析を行うためにも使うつもりだ。

Apolloはまだ開発段階で、オープンソースにはなっていない。しかし、Johnson氏はオープンソース化は同社の方向性と一致している、と名言している。QCon New Yorkの参加者は氏のプレゼンを見ることができる。今後はInfoQでも見ることができるようになる。

この記事に星をつける

おすすめ度
スタイル

BT