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
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy