What have you found for these years?

2009-10-19

Charlie!

本來想仔細寫一篇,懶了... 把 ptt 的貼上來就好。

 作者  godfat (godfat 真常)                                        看板  Ruby
標題 Re: [問題] Lighttpd的設定方式
時間 Thu Oct 15 21:13:01 2009
───────────────────────────────────────

最近收了一堆信,信箱整個爆,來賺 p 幣買信箱... @@

[...跟 Charlie 無關,略]

這滿新的,作者是 Eric Wong, 是 mogilefs-client 的作者。
程式寫得相當漂亮,簡潔俐落,設計則是參考 UNIX/POSIX 的作法。
很明顯這不能用在 windows 上 XD

可以參考這頁:
http://tomayko.com/writings/unicorn-is-unix

這邊則是一些設計上的考量:
http://unicorn.bogomips.org/DESIGN.html
http://unicorn.bogomips.org/PHILOSOPHY.html

好,我知道大家都很懶,不想自己看 XD 正好我今天大概看了一下。
簡單地說,unicorn 遵循 UNIX philosophy:

1. Write programs that do one thing and do it well.
2. Write programs to work together.
3. Write programs to handle text streams,
because that is a universal interface.

unicorn 不企圖做到每件事,他只對付快速的 client, 不做 buffer.
所以前端會需要有一個 reverse proxy, 例如 nginx.
你要用 apache 也不是不行啦,但就我所知沒什麼人在用 apache...
我指做這些事情。每個地方都在講 apache bloat bloat bloat, slow slow slow...
memory leak leak leak... 他就只是很方便而已。

除此之外就是用 shared socket, select (or epoll?), 還有 prefork.

而慢速的 client? 用 Rainbows! 對付
http://rainbows.rubyforge.org/ 這是從 unicorn 切出來的。

我個人是覺得跟 passenger 架構有一點類似,只是 passenger 是整個包成一包,
但 unicorn 則是把最重要的核心拆出來。程式碼也很少,除了 http parser 外,
全部都是 ruby 寫成。http parser 是用 mongrel 的,用 ragel 寫,產生 c 程式
再去 compile 的。ragel 是 parser generator, 最近應該也滿流行的。

參考這篇留言:
http://github.com/blog/517-unicorn#comment_3142

Now don't get me wrong, Passenger is great. Point it at your app and
for the most part your are done. But if you need it to do something
different, it's fairly inflexible, and it's here, I think, that
Unicorn really shines.

當你想做點什麼手腳時,passenger 沒有這樣的空間讓你動;
然而 unicorn 只有最核心的部份,而且全部是 ruby, 你隨時可以改變什麼。
我覺得 unicorn 相當值得一試,雖然短時間內可能還是繼續用 passenger.
原因很簡單,目前我不需要對 passenger 動手腳 :p
而且針對 passenger 的 script 都寫好了,沒有重大問題前,也不用特別去換
但如果碰到什麼問題,我第一個決定試的肯定是 unicorn.
他沒什麼新東西,都是過去已知的概念,但我個人覺得是個突破。
就像 rails 其實也沒有什麼新東西,一個個看都沒什麼,放在一起就厲害了。

[...跟 Charlie 無關,略]

0 retries:

Post a Comment

Note: Only a member of this blog may post a comment.



All texts are licensed under CC Attribution 3.0