messagepackを使ってみよう。 その1〜はじめに〜

messagepackを利用する機会に巡りあったので、勉強の成果を備忘録としてまとめてみます。

スタート地点

JSONよりもいけてるプロトコルあるよ、というのを小耳に挟んだレベル。
正直何がどういけてるのか全然わかってません。

目標

というわけで、どのレベルまで頑張るのか決めてみました。

  1. messagepackの原理を大まかに理解する。
  2. messagepackの用途を理解する。
  3. messagepack-rpcを使って、サーバ・クライアント間通信を実現する。Javaで。

目標を更に細かく

もう少し目標を細かく設定してみます。

  1. messagepackの原理を大まかに理解する。
    1. messagepackとは?
    2. どんな特徴?
    3. どんな仕様?
  2. messagepackの用途を理解する。
    1. 何に利用されている?
    2. 何に利用できそうか?
  3. messagepack-rpcを使って、サーバ・クライアント間通信を実現する。Javaで。
    1. eclipseでmessagepack-rpcが利用できる環境を作ろう。
    2. サンプルアプリを作ってみよう。
    3. Seasarと連携してサーバーアプリを作ろう。
    4. Androidと連携してクライアントアプリを作ろう。

ん、これくらい細かいとやりやすいかな。
では、今回は目標1の1番「messagepackとは?」まとめてみます。

messagepackとは?

まずは、messagepackって一言でいうとなんでしょう。
中の人曰く、

Introducing the MessagePack

The Messagepack Project

  • MessagePack is a binary-based efficient object serialization library.

なるほど、なるほど。
MessagePackはシリアライズのための機能をまとめたライブラリなのですね。
で、バイナリにシリアライズするから効率的だと。


あれ?シリアライズってなんだっけ?
それにバイナリにすると、何に比べてどう効率的なんだっけ?

シリアライズってなんだっけ?

wikiの説明だと、

  1. ある一つの資源を、複数の主体が利用しようとするときに、それを調整して、一つの時点では一つの主体だけがそれを利用するようにすること。この意味では逐次化という訳語が用いられる。対義語は並列化である。
  2. ある環境に存在しているオブジェクトをバイト列やXMLフォーマットに変換すること。この意味では直列化という訳語が用いられる。同義語にMarshallingがある。対義語は直列化復元ないしデシリアライズである。

また、Javaだと、

オブジェクト直列化は、オブジェクトとそこから参照されているオブジェクトをバイトストリームにコード化します。

とあります。
ああ、ファイルを保存する前や通信する前にデータを変換するあれですね。理解理解。

バイナリにすると、何に比べてどう効率的なんだっけ?

同じシリアライズライブラリでかつ公式での比較対象として、JSONがあげられています。
まず、「シリアライズとデシリアライズの速度」について比較し、messagepackの方が優れた結果を出していることを取り上げています。
そして、その理由として「データ形式」の違いを言及しています。
JSONがテキスト形式に対して、前述したようにmessagepackはバイナリ形式。
そのため、messagepackの方がデータ量が小さくなり、その結果として高速なシリアライズとデシリアライズを可能にしているようです。

今回のまとめ

messagepackとは?

  1. messagepackは、オブジェクトをバイナリ形式に変換してくれるシリアライズライブラリである。
  2. messagepackは、オブジェクトをバイナリ形式に変換することで変換後のデータが小さくなる。そのため、帯域を消費を抑制したり、CPUの負荷を低減したりと効率的な側面を持つ。

といった感じかな?
今回は、これくらいで。時間を見つけてまた続きを書きたいと思います。

参考リンク

この記事、そしてこれからの記事を書くにあたり、中の人の記事を参考にさせてもらいました。
私のを読むよりも、ずっと参考になるのでどうぞ。

The Messagepack Project
公式サイトです。
ここのLearn Moreに基礎的な話が書いてあります。一回は読んだ方がいいです。
Introducing the MessagePack
MessagePackの概要をまとめてくれています。
MessagePack for Java 作りかけリリース!
MessagePackのJava版についてまとめてくれています。
MessagePack-RPCのプロトコル仕様(ドラフト)と実装例
MessagePack-RPCの仕様についてまとめてくれています。
高速メッセージングシステムMessagePack - 楽天テクノロジーカンファレンス2010
楽天テクノロジーカンファレンスで発表してきた際の資料を公開してくれています。
MessagePackの全体像を知るためにとっても役立ちました。
発表の録画もあるのでぜひ見てください。