zed shawのmongrel2は言語ニュートラルなサーバ
Mongrel2は各種の外部リクエストをZeroMQに変換することにより、均一なインターフェースを提供し言語ニュートラルな分散型のシステム構築を可能にしてる。
http://sheddingbikes.com/posts/1276761301.html
「まだ君は気がついていないかもしれないけど、このデザインはウェブアプリケーションのアーキテクチャーと稼働形態を変えるものにる可能性がある」
"It may not dawn on you quite yet, but I think this design has a verygood chance of changing how we architect and deploy web applications."
大口を叩くので有名なZedがまた何か叫んでいる。聞いてみようではないか。
全ての言語を愛するサーバ
mongrel(バージョン1)はRubyの全てのフレームワークを平等に愛するサーバとして作った。
今度は全ての言語を平等に愛するサーバを作りたかった。だからCで実装されている。
一つのポートで色々なプロトコルを喋る!
HTTPもFlash SocketsもJSSCocketも全て一つのポートでこなすサーバだ。mongrel2.org:6767にブラウザを向けるとHTTPが帰ってくる。telnetするとJSSocketになる。「Mongrel HTTP parser」に各プロトコルをハンドリングするルールを追加して可能にした。 WebSocketsも時期がきたら対応できる。
各リクエストはTCP/IPやZeroMQ経由でバックエンドに行く。HTTPリクエストはnginxでプロクシ(keep-alive装備)する。JSSocket JSONはpythonのサーバにroutingされる。
Mongrel2の機能はリクエストをバックエンドサーバに送りソケットを管理する以外にない。
「この事実を暫く熟考してください」
HTTPリクエストが0mqに変換されることによって、色々な応答スタイル(PUB/SUB, REQ/REP, multicast)や言語で処理できる。ニーズに合せて言語を混ぜて使うことだった可能だ。
ウェブリクエストの同期・非同期やバックエンドサーバの言語、数、ロケーションにかかわらず、自由にシステムが構築できる。
nosqlのクラスターをアプリケーションロジックにあてはめたようなものだ。(アプリケーションサーバを簡単にクラスタリングできるという意味だと思う)今迄に無いようなアプリケーションが作れるようになる。(その例は意味不明。Zedちょっと落着きなさい、、)
ステータス
- クラッシュするがchatサーバがあるとのこと。
- 関心のある開発者はfossilを使ってビルドしてみ
- Mongrel2はchatとか得意なんで、chatのようなシステムを作っている人は連絡して
とのこと
ネットの各種プロトコルをメッセージqueueに変換するってのは良いアイデアだね。もしこのプロジェクトが成功したらアプリケーション・アーキテクチャーを変えるものっていうのも大袈裟な主張ではなさそうだ。
Zedは一頃,finite state machineに凝っていた。mogrelのパーサはFSMのデザインに基づいて作られているからセキュリティー系のバグが無い、とか言っていた。mongrel2で複数のプロトコルに同一ポートで対応できるのはFSMベースのデザインの御陰だろう。ハードコードしたロジックでは難しそう。zedのfsmパーサ、そのうち勉強させてもらいたい。