aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

訳:EvernoteはNoSQLを使っているか?

Evernote: NoSQL? Not Now, Thanks! We're Good

===

大きなサービスはNoSQLに依存しているか?10億近いノートと約20億のリソースファイルを持つEvernote は、NoSQLとビッグデータの楽隊車に飛び乗る準備をすべきだろうか?それは早急だ、とEvernoteのCTO Dave Engbergは言う。Engbergによると、いくつかのアプリケーションは、最近のKey-Valueストレージエンジンの利益を得るだろうが、Evernoteは アカウントのメタデータ用に構築したMySQLに留まることの良い理由がある。

Engbergは昨日のEvernote Tech Blogのポストで、MySQLのデフォルトストレージエンジン(InnoDB)のACID迎合性は、Evernoteの同期モデルにとって重要である、と述べている。(同期モデル:PDF)

ACID迎合性は、デスクトップやモバイルデバイスのEvernoteクライアントがEvernoteサーバからの応答を信じることができることを保証する、とEngbergは言う。Atomicty(原始性)とは、ユーザのノートが正確に(すべての変更が完了して)Evernoteサーバに保存されることを意味する。もしAPIコールが失敗したら、すべての変更はコミットされない。「これは、ノートの4番目の画像を保存するのに失敗した場合に、不完全なノートがアカウントに存在せず、不完全なアップロードに対してその量は計算されない」

Consistency(一貫性)とは、宙ぶらりんな(dangling)ノートでノートブックは削除されないことを意味する。Durabillty(耐久性)とは、サーバがノートが作成されたことを知らせた時、実際に作成されていることを意味する。

Durabillity(耐久性)は最も重要な属性である、とEngbergは言う。「サーバ上の変更が永続的(Durable)である、とクライアントが信じられないなら、プロトコルはもっと複雑で非効率になってしまう。同期中の各クライアントは、サーバ上の全オブジェクトの状態がローカルの状態と合っているかのダブルチェックを耐えず行う必要が出るだろう。もし変更が永続的であると信じられないなら、2万個のノート、4万個のリソース、1万個のタグを持ったアカウントの完全な一貫性を維持することは、とても高くつく」

Evernoteをスケールする

一方(the flip side)、多くのサービスがKey-Valueデータに期待している理由は、データセットをスケールすることがあまり難しくない( pretty hairy )からだ。「 Evernoteは、"ユーザ毎に"20億個のデータセットにパーティショニングすることでこの問題を回避している」とEngbergは言う。

evernote-architecture-1.png

もし興味があるなら、Evernoteはアーキテクチャのダイジェストを公開している。(2011年5月のものなので一部古いかもしれないが)Evernoteのサービスがどのように構築されているかが詳しい。XenVM上のDebianで稼動しているMySQLがユーザメタデータを保持し、Linuxファイルシステムにファイルデータを保存している。

ビッグデータの代わりに、Evernoteは「大量の”中規模データ”のストレージをシャード化されたアーキテクチャにきちんとパーテションしている」とEngbergは言う。

しかし、Evernoteは、ACID迎合性を必要としていないその他のプロジェクトのために、比較的新しいツールを見ているかもしれない。Evernoteのレポート・分析システムは現行のMySQLプラットフォームから徐々に脱却して置き換えている、とEngbergは記述している。

しかし、ユーザメタデータにとって、Evernoteのコアの一部はサービスだろうか?「クールな子供からスタイルを奪い取るつもりはないが、Evernoteのユーザアカウントのメタデータ用にシャード化されたMySQLストレージに比較的(relatively)満足している。」