Solaris 10がリリースされてから随分経つが、目玉機能の一つであるSMFがあまり利用されてないように思う。理由は恐らく次のようなことからだろう。
- ドキュメントが乏しい(または難解である)
- XMLを編集しなければならないのが煩わしい
- 既存の仕組み(init.d)でも別に問題がない
しかしSMFは使いこなせば非常に有用なツールである。最も便利だと思うのは、プロセスが停止してしまった時に自動的に再起動してくれる点だ。世の中のすべてのプログラムにはバグがあり、バグによりプロセスが停止することは世の常である。従って、システム管理者たるものプロセスをすぐさま再起動するような仕組みを設けていなければならない。
既存の仕組みではそのようなことをシステムレベルで実装することができず、従って独自のプロセス監視方法などを導入する必要があった。しかしSMFを使えばその仕組みを比較的簡単に実装することができる。SMFはOpenSolarisでも利用可能であり、SMFにサービスを対応させる価値は大いにあるだろう。
最近注目度ナンバーワンのmemcachedであるが、そのソースコードはシンプルでありビルドも非常に簡単なのだが、リンクするべきライブラリがただ一つだけ存在する。それが
libeventである。
http://monkey.org/~provos/libevent/
libeventとはその名の通り
イベント通知ライブラリである。と言っただけではなんのこっちゃ?!と思われることだろう。別の言い方をすると
非同期I/Oライブラリてな感じだろうか。
※オトコたるもの滅多なことでそもそも論をしてはいけないが、非同期I/Oについて語らねば先に進まないので致し方なしとする。
エンジニアたるもの想像力が必要だ。
複数のmemcachedサーバーを起動させてキャッシュを分散させるような運用では、各データをそれぞれどのサーバーにキャッシュするかを自動的に選択する必要がある。そのアルゴリズムとして、
コンシステントハッシュ法というものがあるのだが、これがなんとも見事なアルゴリズムなのである。
先日、Brian Akerとミクシィの前坂氏によるmemcachedのセミナーがあった。
実践で使用する上での話や開発最前線の話が聴けたため、セミナーは非常に盛況であった。筆者にとっても非常に勉強になる内容だった。
セミナーの資料はBrian Aker氏のサイトから入手できるのでセミナーに参加出来なかったひとはこの資料を読んで自習して頂きたい。
が、いかんせん氏のスライドはパッと見ただけではなんとなく分かりづらいように俺は思う。なぜだろうか?それはきっと図がないからだ・・・と勝手に想像する。オトコたるもの、時には勝手な憶測で突き進むのもアリだ。ちなみにBrianのスライドはほとんど要点の箇条書きになっている。これでは解説がないと、特に新規にmemcachedやMySQLを学習している人たちには分かりづらいだろう。
というわけで氏に代わり、memcachedがどのように既存の仕組みを置き換えるかについて絵を描いてみたので以下に紹介する。
(余談だがMySQL ClusterのStewert Smith氏はパラパラ漫画のようなスライドを描く。Brian氏のプレゼントはまったく毛色が違う。ギークという人種は本当に個性豊かだ。)
Mixiや
Facebook、Wikipediaなど、大規模なサイトで
memcachedを利用する例が増えている。
マイコミジャーナルのレポートでFacebookの事例紹介があるのだが、なんとmemcached用のサーバは805台で、メモリ容量は15TBにもなるそうだ。ディスクではなくメモリだけで15TB!である。アクティブユーザーの数は7000万人もいるそうだから、それを捌くとなるとハードウェアも凄い規模にならざるを得ないのである。
このように大規模サイトを支えるmemcachedであるが、そのプログラムの中身は一体いかなるものなのであろうか。memcachedは
http://www.danga.com/memcachedでソースコードが配布されている。現時点での最新版は1.2.5である。ぜひダウンロードしてみてほしい。そしておもむろにファイルサイズを確認してみてほしい。するとあることに気づくだろう。