花了一些时间把 linode 上部署 gitlab 用的 apache+passenger 替换成了 nginx+unicorn,发现性能提高了 N 倍,特别是 load commit data 的磁盘 io。 按道理 apache+passenger module 没有 socket 通信时间,性能更快啊。 两边配置均采用 gitlab installation guide 上的,不过 nginx 上开启了 epoll。 有没有人做过实际项目上的性能对比?
protip: "If you really want to make a point about the performance of a particular thing, can you at least pretend you're using science?"
最近在折腾 Gitlab 的 Git HTTP 支持,发现 unicorn 真的很好。
passanger 会将 http basic auth 的信息拦截掉。导致后端没法正常验证。这个有人报过 issue 了。我只能让它换到非 passanger 环境下。
其他的 thin unicorn puma. 我最近看过代码。关于 tempfile 的实现上面。unicorn 也是最好的。puma 里面的代码真的很取巧。
我记得,很多年以前 JavaEye(现在叫 ITEye) 上, 有不少关于 Rails Webserver 的性能对比的文章, 其中包括 apache 和 nginx。 好久不去 ITEye 了。
@huacnlee
nginx sends requests directly to the Unicorn worker pool over a Unix Domain Socket (or TCP, if you prefer)
nginx 跟 unicorn 也是走 socket 的耶。
#10 楼 @kgen 我记得 Ruby China 建站之初,我们就遇到了选型问题,是 thin,unicorn,还是 passenger,当时我发过一个帖子,见这里:http://ruby-china.org/topics/35
至今 9 个多月了,unicorn 还是我的第一选择,理由是内存资源占用,以及在多个 worker process 下,他的 Load balancing 上有一定的性能优势。
#15 楼 @lgn21st 我们一直在关注 Thin, Passenger, unicorn 的性能对比,不过 github 到目前为止,也表示差别不大。当时我记得 github 文章末尾提到:几种方式性能差别不大,不要因为 github 用什么就用什么,而是选择真正能解决问题的。
我们的场景和 RubyChina 不太一样,是在内存较大的服务器上部署多个应用,包括一些老的 Ruby 1.8 + Rails 2 的项目,这些客户没有预算升级到 Ruby 1.9 + Rails 3。综合考虑了性能,多版本共存的兼容性,部署的方便性,我们选择了 Passenger。
unicorn 相比 Passenger 在 RubyChina 应用中的差别,有没有数据可以公布一下。
@lgn21st 研究了下 gitlab 的 unicorn 配置 更加喜欢了,http://ruby-china.org/topics/35 里提到的重启 woker 可以自动化完成 虽然是定时 restart 而不是根据阀值