読者です 読者をやめる 読者になる 読者になる

mixi engineer blog

ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

memcachedの最新動向

mixi

先週アメリカに行ってMySQLカンファレンスやmemcached hackathonに参加してきました。そこで今回はmemcachedコミュニティやhackathonで行われた多くの議論に関してご報告させていただきたいと思います。

前書き

ご存知の通りmemcachedはFacebookWikipediaをはじめとする巨大ウェブサイトのコアテクノロジーの一つとして世界中で使われるまでに到達したソフトウェアです。mixiを支えるテクノロジーの一つでもあります。

memcached hackathonhackathonをご存知ない方のために簡単に説明すると、オープンソースプロジェクトのハッカーたちが実際に集まってプロジェクトの開発をしたり仕様の議論や提案などをするイベントの事です(とても楽しいです)。

今回で4回目になるmemcachedのhackathon(議事録)ですが、東京でもやったら面白いんじゃね?的な話を結構まえにしたら良い反応だったので、もし行われる事があればここで告知させていただきますね。

テキストからバイナリプロトコルへ

今行われている最も目立つ変更は、去年からmemcached界隈で話題になっているプロトコルについてです。クライエントライブラリとmemcached間の通信は従来、とても単純なASCIIベースのプロトコルを用いて行われていました。ではなぜ、今までず〜っと使ってきたプロトコルをわざわざ改善しようという運動がコミュニティ内で起きているのでしょうか?

バイナリプロトコルに惹かれる最も大きいモチベーションは、データの出し入れ周りではなくテキストプロトコルをパースする処理がCPUタイムを大食いしているのがプロファイリングにより明らかになっている事です。

プロトコルをバイナリにする事によりCPU効率を向上しmemcachedはより速く、よいプロダクトになるという事です。

他にもテキストベースだと脆弱性が入り込みやすい事や、今後の拡張性を考えるなら最初から拡張性に長けた効率のよいプロトコルを設計しよう!というノリもあったりします。

時代の流れに従いマルチスレッド専用に

近い未来、memcachedからシングルスレッドモードがなくなります

でもそもそもmemcachedは安かったり余っているサーバ達にインストールしてシステム全体の無駄メモリを有効活用しよう!というものだったのに何故こうなるの?と疑問に思われる方は少なくないと思います。

答えは時代の流れがマルチコアを標準にしてしまったからです。例えば(言い切れませんが)memcachedを必要としそうなサービスの運用にシングルスレッドのサーバを使っていたりするでしょうか?もしくは新しくサーバを購入する際にわざわざシングルコアのマシンを購入するでしょうか?答えはNOだと私は思います、なぜなら最近のマルチコアのマシンは、一昔に比べとてつもなく安値になっているからです。今となってはシングルコアのマシンは市場で見つけることすら難しくなりつつあります。

こういった背景から、将来のリリースではmemcachedはマルチスレッドでしかビルドできなくなります。採用されるかされないかは別ですがこれを実現するパッチを先日書いて送っちゃったりしました。あ〜でもバイナリプロトコル対応用ブランチへのパッチなので適応されるとしても、まだまだ先の話です。それとスタートアップでスレッド数を1に指定したらシングルスレッドで運用するのと変わらないはずです。

外部ストレージエンジン対応

少し前に私が実験的に書いたmemcachedのストレージ層をプラガブルにするという試みがmemcached本家でウケがよくて是非やろう!という事でロードマップに載せていただけました。軽いノリでBrian Akerにソースを見せたらコミュニティに投げられたのが全てのはじまりでした。

で、これを実現すると何が嬉しいかというと、以前のエントリーにも書かせて頂きましたがmemcachedを使って色々な事が出来てしまうことです。極論をいうとデータをmemcachedに送信したらGmailやバージョンコントロールシステムに投げる事も出来ちゃったりします。個人的に一番ありそうだな〜と思うユースケースは、特殊なブロックデバイスやTokyo Cabinetの様なデータベースライブラリをバックエンドに使うといったところでしょうか。

まとめ

今回は時代の流れやパフォーマンス改善による事情で進化するmemcachedの方向性を報告させて頂きました。そして私が子供心で書いてみたストレージエンジンの交換メカニズムの対応も行われる事になりました。でもぶっちゃけた話、私の書いたプロトタイプはビルドテストが通ったものの結構てきとうな作りなので、設計をmemcachedコミュニティの人たちと見直している今日この頃です。

こういった話は日本ではmemcached好き同士で口頭やチャットで話し合いはされるものの、資料や記事としては出回らないので、私なんかのエントリーで恐縮ですが何かのネタになれば幸いです。