KLab勉強会 #3 「Erlang による高可用システムの構築」の感想

まずは、有意義な時間を過ごせた事に感謝!

会社としての取り組み

既に社内で利用し始めているようで、とても羨ましい。現在、根回しに労力を割いている私とはエライ違いだ orz
もし、erlang ネタで次回があれば、プロダクション環境で運用する為のノウハウを聞いてみたいと思いました。
あー、懇談会に出席できたら良かったのに!!

net_kernel:get_net_ticktime/0

こんな関数がある事を始めて知りました。
調べてみると、net_kernel:set_net_ticktime/1 以外に kernel の configuration でも設定できるっぽい。

ブロックする処理

質疑応答で、ブロックする処理の扱いは?という質問が出た。回答としては、ノード上のプロセスがブロックされても問題ない…だったような?(ちょっと記憶が曖昧)

確かに、ノード上のプロセスがブロックされても、他のプロセスには影響が出ない。
しかし、ノードは OS から見ると一つのプロセスであって、そのプロセス自体がブロックされる事はありそうな気がする。

とりあえず、I/O に限って言えば、+K オプションを付けてノードを起動すると epoll が使われるので避けられるらしい。ただし、erlang を ./configure する際、--enable-kernel-poll を指定する必要がある。(昔、kqueue 使ってくれないかなぁと思い、手元の FreeBSD で試した所「kernel-poll not supported; "K" parameter ignored」と出たので、未検証で放置してます手元の mac で [kernel-poll:true] となったので検証開始ports から R12B-0 を入れて +K true でノードを立ち上げたら [kernel-poll:true] となった

後は、+A オプションで async-threads の数を増やすという手もあるかと。+A オプションに関しては みかログ: Erlangの+Aオプション こちらが詳しいです。

ememcached の性能について

質疑応答で、memcached と ememcached の速度比較の質問が出た。回答としては、少しだけ試した感じでは2倍くらい遅いとの事。

ん〜、erlang で書かれたサーバは、同時接続数が増えた際に、その素晴らしさを発揮し始めるので、そこを補足して欲しかったなぁと思いました。

ノードが "絶対" スケールしないよ!

帰りのエレベータの中で「ノード が "絶対" スケールしないよ!」と話し合ってる方々がいらっしゃった。
それを質疑応答の際に発言すれば良いのに(w;

えーっと、スケールってスケールアウトの略語だろうか?だとしたら、ノードは環境であって、その環境の上で動くアプリケーション(mnesia とか)がスケールアウトするように作られていれば、ノードがスケールアウトする・しないは関係ない話だと私は思う。

その他

id:Hamano さんはじめ、erlang を仕事で使っている方々と知り合えて嬉しかったです。
erlang もっと普及すると良いなぁ