memcachedを知り尽くす
第4回 memcachedの分散アルゴリズム
株式会社ミクシィの長野です。第2回,第3回と前坂がmemcachedの内部について紹介しました。今回は内部構造から離れて,memcachedの分散についての紹介をいたします。
memcachedの分散
連載の1回目に紹介しましたが,memcachedは「分散」キャッシュサーバと言われていますが,サーバ側には「分散」の機能は備わっていません。サーバ側には当連載の第2回,第3回で前坂が紹介したメモリストレージの機能のみが組み込まれており,非常にシンプルな実装となっています。では,memcachedの分散はどのように実現しているのかと言うと,すべてクライアントライブラリによって実現されます。この分散方法はmemcachedの大きな特徴です。
memcachedの分散とは
ここまで数度「分散」という言葉を用いてきましたが,あまり詳しく触れてきませんでした。ここでは各クライアントの実装に共通する大まかな仕組みから紹介いたします。
memcachedのサーバが,node1〜node3まであり,アプリケーションから「tokyo」「kanagawa」「chiba」「saitama」「gunma」というキー(名前)のデータを保存する場合を想定してみます。
まず「tokyo」をmemcachedにaddします。クライアントライブラリに「tokyo」を渡すと,ライブラリに実装されたアルゴリズムよって「キー」から保存するmemcachedサーバを決定します。サーバが決定したら,そのサーバに対して「tokyo」とその値を保存する命令をします。
同じように,「kanagawa」「china」「saitama」「gunma」もサーバを決定して保存します。
次は保存したデータの取得です。取得の場合も,ライブラリに対して,取得したいキー「tokyo」を渡します。ライブラリは保存時と同じアルゴリズムを使い,「キー」からサーバを決定します。同じアルゴリズムを利用しているので保存したときと同じサーバが決定されるので,サーバに対してgetの命令を送るとなんらかの理由でデータが削除されていない限り,保存した値が取得できます。
このようにキーごとに異なるサーバへ保存することでmemcachedの分散は実現されています。memcachedのサーバが多くなればキーも分散され,もしmemcachedのサーバが1台障害がおきて接続できない状態になったとしても,ほかのキャッシュに影響はせずにシステム全体は動き続けることができます。
次は具体的な実装として,1回目の連載で紹介したPerlのクライアントライブラリであるCache::Memcachedが実装している分散方法紹介いたします。
memcachedを知り尽くす
- 第5回 memcachedの運用と互換アプリケーション
- 第4回 memcachedの分散アルゴリズム
- 第3回 memcachedの消去メカニズムと今後の動向
- 第2回 memcachedのメモリストレージを理解する
- 第1回 memcachedの基本


