BLOGTIMES
2006/12/17

memcachedを導入

  memcached 
このエントリーをはてなブックマークに追加

かなり乗り遅れちゃってるんですが、いまさらならがmemcachedを導入してみました。実績を見るとはてなや、mixiなどの結構大規模なウェブサイトにも導入されているようなのでそこそこのスケーラビリティはありそうです*1

memcachedというのはその名のとおりメモリを使ったキャッシュサーバーで、ディスクへの書き込み機能を持たず、テーブルが1つしかないDBのようなものです。データはメモリ上にしか保存されないので、高速に動作しますが、デーモン自体を再起動すると保存していたデータは消去されてしまいます。大概のウェブアプリケーションにおけるトランザクションは更新系よりも参照系の方が圧倒的に多いので、ライトスルーキャッシュのような使い方でも十分に性能の向上が見込めると思います*2

memcached以前

これまでPHPのメモリキャッシュにはXCacheeAcceleratorの機能を使っていたんですが、これらはmod_phpに組み込まれて動くものなのでウェブサーバーを再起動するたびにキャッシュが空になってしまうのが非常に気になっていましたが、こちらはキャッシュデーモンを再起動しない限りキャッシュは常に温まっている状態(warm cache)にあるので心置きなくApacheの再起動ができるようになります。

導入方法

導入は簡単で、ほとんど設定の必要ありません。
またデーモンの設定はすべてコマンドラインオプションで行います。

1. libeventのインストール

# yum install libevent

2. memcachedのインストール

# ./configure # make # make install

3. memcachedの起動

# ./memcached -d -m 64-l 127.0.0.1 -p 11211

4. phpへのモジュール組み込み

peclでのインストール後、memcache.soをextensionとして読み込むようにphp.iniを編集

# pecl install memcache

5. phpからの接続テスト

Apacheを再起動後、下記の内容のファイルを作って起動してみる。エラーが表示されなければOK。

<?php $memcache = new Memcache; $memcache->connect('127.0.0.1', 11211) or die ("Could not connect"); ?>

導入後

さっそくNucleusのコア*3にちょっと手を入れてみたいのですがいい感じで動いています。

時間がないのでちゃんとしたベンチを取っていないのですが、通信のオーバーヘッドが若干あるためなのかXCacheeAcceleratorよりは数十ミリ秒ほど遅くなっているようですがぜんぜん許容範囲内です。

運用の工夫

cactiを使ってmemcachedの稼動統計を取ってみました。
 → cactiでmemcachedを監視する
 → 続・cactiでmemcachedを監視する

PHPで動く、memcachedの内容をダンプするスクリプトを書いてみました。
 → memcachedの内容を確認するには

  • *1: もちろんそれなりにパラメータのチューニングは必要なのでしょうが。
  • *2: というか、にわか仕込みの僕の腕ではそれくらいのキャッシュマネジメントしかできません。
  • *3: 手を入れたのはglobalfunctions.php、SKIN.php、TEMPLATE.php、PLUGIN.phpの4つ

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/1767
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン