Home > Archives > 2010-05

2010-05

MessagePack-RPC for Java/Pythonの実装を行っています。

blogはご無沙汰中です。3月で大学を卒業して、社会人生活を満喫しています。頭の切り替えが楽になった気がします。

最近は古橋さんが中心となってやっている、MessagePackというプロジェクトに少しコミットしています。同じような目的のプロジェクトとして、Google ProtocolBufferApache ThriftApache Avroなどが有ります。簡単に言うと、JSONより速くてコンパクトなシリアライズ/デシリアライズライブラリです。

MessagePackは非常に安定して十分にプロダクトでも使えるレベルなので、是非使ってみて下さい。C/C++ライブラリを用いて、毎月数億回ぐらいは(de)serializeを行なっていますが、非常に安定して稼働しています。

僕は特に、MessagePackを使用したRPC(Remote Procedure Call)の仕組みの部分にコミットしようと思っています。MessagePack-RPCの説明は以下に有ります。Thrift等のプロダクトと比べると、非常に高速なのに加えて、非同期呼び出しをサポートしているのが利点です。

MessagePack-RPCは従来C++/Ruby版のみが提供されていました。ただ、広めるに当たっては様々な言語でのサポートが必須です。

そこでゴールデンウィークを利用し、Java版/Python版のRPCライブラリを実装しました。Ruby版のコードを参考にしています。どちらも更なる検証・負荷実験が必要ですが、圧縮機能を除く一通りの機能は有ります。

各言語のバージョンは、その言語の一番良さそうなイベントライブラリを用いるというポリシーで開発しています。Java版はJBoss netty, Python版はTwistedを用いました。Ruby版はRev, C++版はmpioが用いられています。

開発したものは、githubにあります。

実験的に、Java版をApache Cassandraに組み込み、get関数をRubyから叩いたりしてみました。ただ、MessagePack-RPCでは現在IDLからのコードジェネレーターが無いので、カスタムなデータ型をやりとりするのが非常に面倒くさいという問題が認識できました。

コードジェネレーターは、実は今、古橋さんが開発中です。Thrift互換のIDLを採用するため、Thriftを使用しているプロダクトは簡単にMessagePack-RPCに乗り換えられるようになっています。

Thriftは非常に良いライブラリなのですが、仕事で使ったときに色々と痛い目を見て、ベストなものでは無いと個人的には思っているので、MessagePack-RPCでそこら辺の問題を解決したいと思っています。

MessagePack-RPCはまだまだ成熟したプロダクトではないですが、徐々に完成度を上げていきたいと思っていますので、もし多言語間で通信するタスクが発生した場合には、使ってみてください:-) 将来的にはInfiniband/SDP(Socket Direct Protocol)などにも対応したい所です。

何か有れば、@kzk_moverまでお願いします。

Home > Archives > 2010-05

お薦め本
広告
Archives
Categories

Return to page top