memcachedを知り尽くす

第4回 memcachedの分散アルゴリズム

この記事を読むのに必要な時間:およそ 4 分

株式会社ミクシィの長野です。第2回第3回と前坂がmemcachedの内部について紹介しました。今回は内部構造から離れて,memcachedの分散についての紹介をいたします。

memcachedの分散

連載の1回目に紹介しましたが,memcachedは「分散」キャッシュサーバと言われていますが,サーバ側には「分散」の機能は備わっていません。サーバ側には当連載の第2回第3回で前坂が紹介したメモリストレージの機能のみが組み込まれており,非常にシンプルな実装となっています。では,memcachedの分散はどのように実現しているのかと言うと,すべてクライアントライブラリによって実現されます。この分散方法はmemcachedの大きな特徴です。

memcachedの分散とは

ここまで数度「分散」という言葉を用いてきましたが,あまり詳しく触れてきませんでした。ここでは各クライアントの実装に共通する大まかな仕組みから紹介いたします。

memcachedのサーバが,node1〜node3まであり,アプリケーションから「tokyo」「kanagawa」「chiba」「saitama」「gunma」というキー(名前)のデータを保存する場合を想定してみます。

図1 分散概要:準備

図1 分散概要:準備

まず「tokyo」をmemcachedにaddします。クライアントライブラリに「tokyo」を渡すと,ライブラリに実装されたアルゴリズムよって「キー」から保存するmemcachedサーバを決定します。サーバが決定したら,そのサーバに対して「tokyo」とその値を保存する命令をします。

図2 分散概要:追加時

図2 分散概要:追加時

同じように,「kanagawa」「china」「saitama」「gunma」もサーバを決定して保存します。

次は保存したデータの取得です。取得の場合も,ライブラリに対して,取得したいキー「tokyo」を渡します。ライブラリは保存時と同じアルゴリズムを使い,「キー」からサーバを決定します。同じアルゴリズムを利用しているので保存したときと同じサーバが決定されるので,サーバに対してgetの命令を送るとなんらかの理由でデータが削除されていない限り,保存した値が取得できます。

図3 分散概要:取得時

図3 分散概要:取得時

このようにキーごとに異なるサーバへ保存することでmemcachedの分散は実現されています。memcachedのサーバが多くなればキーも分散され,もしmemcachedのサーバが1台障害がおきて接続できない状態になったとしても,ほかのキャッシュに影響はせずにシステム全体は動き続けることができます。

次は具体的な実装として,1回目の連載で紹介したPerlのクライアントライブラリであるCache::Memcachedが実装している分散方法紹介いたします。

著者プロフィール

長野雅広(ながの まさひろ)

株式会社ミクシィ 開発部システム運用グループ アプリケーション運用チーム所属。mixiのアプリケーション運用に携わっています。Perlのカンファレンス,YAPC::Asia 2008でもmemcachedに関する発表を行いました。

URLhttp://blog.nomadscafe.jp/

コメント

コメントの記入