Prev / Next / /home/pochi/ChangeLog

高速WebサーバMighttpdのアーキテクチャ[computer][Haskell][ウェブ]

2012-05-29

http://www.iij.ad.jp/company/development/tech/activities/mighttpd/

IIJ-II技術研究所では、2009年の秋からMighttpdbl(mightyと読む)という
Webサーバの開発を始め、オープンソースとして公開しています。


僕は、コードの見通しが悪いという問題を解決するために、
純粋関数型言語Haskellの主要コンパイラであるGHC(Glasgow Haskell Compiler)
が提供している軽量スレッドを利用しました。
軽量スレッドとは、イベント駆動の上に実現されているユーザ空間のスレッドです。
最近のコンピュータであれば、10万個起動しても問題なく動作します。
..
軽量スレッドを使えば、従来のスレッド・プログラミングと同様、
見通しのよいコードが書けます。また、軽量スレッドを切り替えるのは
GHCのランタイムですから、コンテキストスイッチは起こりません。


関数型言語は遅いとか実用的でないと誤解している方もたくさん
いらっしゃるようですが、我々のベンチマークでは、
Mighttpdはnginxと比肩する性能を出しています。


Haskell だと最初に読むのは悩むけど、
一旦理解すれば、見通しは良くなりそうだし、書くのも楽なのかもなあ。

配布元を見ると

Mighttpd
http://mew.org/~kazu/proj/mighttpd/en/

This domain "Mew.org" is provided with Mighttpd2.


mew.org は mighttpd2 で動いてるのか。
telnetで叩いてみた。

% telnet mew.org 80
...
HEAD / HTTP/1.0
...
Server: Mighttpd/2.6.0


ほんとだ。

実際のコードは、GitHub↓から見れる。

https://github.com/kazu-yamamoto/mighttpd2

ざっと中身を見ただけでは何がなんだかさっぱりわかんないけど、
たしかにコードは綺麗に見える。
ファイル名からある程度こういう処理なんだろうなという想像もつく。
コードリーディング用のドキュメントとかどっかにないのかしら?


関連)
LL飲み会でHaskellの洗脳をされる --> [2006-09-15-6]
Haskell使いのための C++ --> [2006-10-08-6]
map からモナドを理解する --> [2006-10-09-5]
「Lisp脳」の謎に迫る - Schemeプログラマの発想 --> [2007-05-16-4]
Haskell で書かれたウェブ付箋アプリ lino --> [2008-08-08-2]
Haskell≠現場言語って? --> [2010-08-20-1]

Referrer (Inside): [2012-06-07-8]

permlink