Erlang で AMQP のメッセージング

最近流行っているらしい Twitter では、インスタントメッセージングに Erlang (で書かれたサービス)を使っているとのこと。

twitterブームの陰で注目を集める“Erlang” − @IT
====
twitterでは、メッセージングシステムに“ejabberd”を使っているという。これは“Erlang”で書かれたIMサーバだ。オープンなIM標準規格のJabberに対応している。また、クック氏がプレゼンテーションの中でRoRの代替として挙げている候補の1つ、“RabbitMQ”も、Erlangで書かれたメッセージングサーバだ
==== http://www.atmarkit.co.jp/news/200704/27/erlang.html

ほほう、プレゼン資料(まだ読んでない)の中には、Erlang で書かれたメッセージングサーバーも登場するらしい。Twitter 本体よりもそっちに興味が有るので、ちらっと外側だけ眺めてみます。

RabbitMQ - Open Source Enterprise Messaging
RabbitMQ is an implementation of AMQP, the emerging standard for high performance enterprise messaging.
==== http://www.rabbitmq.com/

ライセンスは、MPL1.1。プロトコルは AMQP。Erlang という言葉はあまり出てこない。インストールガイドのところでちょろっと。

Installation Instructions

  • Install a recent version of Erlang.
  • Download rabbitmq-server-N.M.tar.gz, where N.M is the version of RabbitMQ Server you want to install.

==== http://www.rabbitmq.com/install.html#generic-unix

と思ったら、1ページ、Erlang で AMQP を実装する利点が述べてあった。ここは後でゆっくり読もう。

This page describes the advantages of using Erlang for Enterprise-class messaging systems.
Table of Contents

  • Distribution
  • Live code upgrade
  • Built in Process Monitoring and Control
  • Predictable High Speed
  • Point to Point
  • Enterprise Ready
  • Portability

==== http://www.rabbitmq.com/erlang.html

ダウンロードできるソースコードのファイル名には、1.0.0-alpha と書いてある。ロードマップ http://www.rabbitmq.com/roadmap.html には、時間軸は含まれていないよう。

ダウンロードしたソースコードの中身

  • まず、直下に erlangjava の2つが在る。
    • java はクライアントだろう(パッケージ名からのみ推測)ということで、
    • erlang/rabbit/ に降りてみる。
  • ディレクトリは、src, ebin, examples, include, scripts 。
    • include/rabbit.hrl は、拡張子から、Erlang のヘッダーファイル。
      • メッセージを表す構造体とログのモードが定義されているっぽい(Erlang の文法知らないので見た目からあてずっぽう)。
    • src/ の下に、拡張子 erl のファイルが 26 個。全部で、6020 行。トップページに「コンパクトで保守が容易なコードベース」と書いてあるのは伊達じゃなさそうだ。ちなみに、AMQP の仕様書は、ざっと1ページあたり30行くらいで、70ページほど。2000 行くらいか。
    • ebin/ というフォルダには、定数というか設定っぽいものが書いてあるファイルが2つ。
      • ebin/rabbit.app を見ると、AMQP のバージョンは 0.8.1 なのかな。
      • ebin/rabbit.rel はリリース情報っぽい。 {"rabbit", "0.2"} がバージョン情報か。

ちなみに、AMQP は、現在バージョン0.9になっているようだ。仕様書はここ  http://www.amqp.org/tikiwiki/tiki-index.php?page=Download

全く中身には立ち入っていないけど、関数が他言語の勉強と Erlang の勉強と、AMQP の勉強を兼ねて読んでみるのも面白いかも?