What have you found for these years?

2010-03-14

web server/framework + amqp

上篇才說最近講太少程式,立刻來講一篇

* 以下 amqp 是指 ruby 的 amqp gem, 不是那個 protocol

昨天才忽然想到,amqp 根本沒辦法直接用在現有的 web server 裡啊。
原因非常簡單,amqp 需要一個 event loop, 而因為 inverse of
control, 因此 amqp 需要是整個程式架構的核心。

而在一般 web server/framework 裡,你是碰不到程式的起點的。
在 event-driven 的 server 中,他本來就有 event loop 了,
你沒辦法把兩個 event loop 放在一起,因為他們是 blocking 的。

只有一個例外。

就是如果都是用 eventmachine 做 event loop 的話,
兩者很明顯非常有機會合併在一起。這意味著純 unicorn 出局了!
我想現在有三種方法可以做:

1. 改用 thin, 因為 thin 是 eventmachine 為核心
2. 改用 rainbow, 也就是在 unicorn 上面加裝 eventmachine
3. 改用 bunny, 也就是放棄 eventmachine 為核心的 amqp

我想先試 2. 因為本來就想試 rainbow 了,
而且理論上 amqp 的效能一定會比 bunny 好很多。
未來如果還有其他 eventmachine based 的 client,
應該也能無痛裝上去...

這樣應該肯定是大包裝下的最好作法了,我想。

==
Engine Yard 也說 Unicorn 好

有點想寫一篇 ruby web server 發展史...
mod_ruby -> fast-cgi -> mongrel ->
thin / passenger -> unicorn
第一行的應該算是被放棄了(笑)第二行的各有他用處在。
thin 是... 我想說那是 mongrel 該有的樣子。
passenger 是懶人包。unicorn 是強大。

從 mongrel -> thin 這段,還有 rack 的發明。
雖然這不屬於 web server, 但是很重要的里程碑。

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0