Sooey

2011-04-04 01:13:05 +0900

RailsConf 2010で行われた、Pivotal LabsのIan McFarlandさんによる「Pivotal Labsの働き方」を紹介したプレゼンテーションを、今更ながら見つけた。

スライドのPDFはこちら。プレゼンテーションの内容はもちろん興味深いものなんだけど、それ以上にIanさんの経歴が面白い。

  • 89年にAutodeskでTed Nelsonのハイパーテキストシステムに参加したのがキャリアの始まり
  • HotWiredの立ち上げにも参加し、その後468x60の広告バナーが定着する発端となった決定をした4人のうちの1人となった(Netscape 0.94 betaでHotWiredのサイトを閲覧したときに丁度いいサイズだったから)
  • その後コンサルタント企業を始めて、95年からはJava開発に取り組んだ
  • VisualCafeの全盛期にはSymantecでJavaエヴァンジェリストになった
  • 2004年、4番目の社員としてFriendsterに参加してチーフアーキテクトを務めたが、新しいエンジニアリング副社長がPHP+XSLへの移行を決定したので辞めた
  • それからはPivotal Labsで現在に至る

2011-04-03 15:15:01 +0900

Zed ShawがMongrel2の開発に利用してかなり気に入っているらしい、ZeroMQで遊んだ話。

まず、ZeroMQは、その名前からてっきりActiveMQやRabbitMQのようなメッセージキューサーバかと思っていたら、ぜんぜん違った。ZeroMQのサイトに書かれている表現を借りると、

The socket library that acts as a concurrency framework.

ということで、単体のサーバープロセスが動くようなキューサーバではなく、プロセス間通信、TCP、UDPマルチキャストなどの上でRequest/Reply、Publish/Subscribe、Push/Pullなどのモデルによる通信を簡単に実現するソケットライブラリなのであった。メリットや特徴はグニャラくんのwktk運営日記にあるØMQ(zeromq)について調査する。が詳しいのでそちらをどうぞ。

で、ZeroMQはインストールが用意で言語バインディングも充実しているということなので、とりあえずRubyで何か書いてみることにした(インストールや設定が超簡単ってのは重要ですね)。

例えば、Mac OS X SnowLeopard + Homebrewな環境の場合は、

$ brew install zeromq
$ ARCHFLAGS="-arch x86_64" gem install zmq -- --with-zmq-dir=/usr/local

こんな感じで、zmq.gemをインストールできる。

今回は、2つのプロセスをTCPで繋いでPublish/Subscribeモデルのメッセージングを行うものを書いてみた。それぞれの動きは以下のとおり。

  • Publishするプロセス
    • Amazon Web ServicesのEC2 APIにアクセスしてインスタンス一覧を取得する
    • インスタンス毎に「状態、識別子、起動日時」のメッセージを作成して送信する
    • 10秒待って繰り返す
  • Subscribeするプロセス
    • メッセージを受信する
    • インスタンスの状態がrunningの場合は「*** が起動しました」と表示する
    • インスタンスの状態がstoppedの場合は「*** が停止しました」と表示する
    • 次のメッセージを受信して繰り返す

EC2の情報をポーリングするプロセスが1ついれば、あとはそのメッセージをSubscribeするプロセスを書くだけで、EC2 APIをいちいち叩きに行かずともインスタンスの状態変化をキャッチできる、という流れ。

Publishするコードはこんな感じ(要amazon-ec2.gem)。

Subscribeするコードはこんな感じ。

それぞれを実行すると(起動順序はどちらが先でもよいのがZeroMQのいいところ)、

$ ruby zmq-publisher.rb
-> running i-fe4ac2ff 2011-04-01T07:44:02.000Z
-> stopping i-fe4ac2ff 2011-04-01T07:44:02.000Z

$ ruby zmq-subscriber.rb
i-fe4ac2ff が起動しました
i-fe4ac2ff が停止しました

EC2の状態を受信してPublishすると、Subscribeしている側でそれを受けたメッセージが表示される。

このシンプルさと使い勝手の良さはたしかに素晴らしいので、いつかプロダクションコードにも使ってみたいな。

2011-04-03 14:49:34 +0900

リンクいろいろ。

2011-04-02 23:52:29 +0900

EC2でMongoDBを運用するにあたって、インスタンスのロール毎にどんなインスタンスタイプとディスク構成にすればいいかを解説したスライドを発見。

MongoDB on EC2 and EBS

2011-04-01 18:50:45 +0900