部署 apache+passenger vs nginx+unicorn

jasl · 2012年08月24日 · 最后由 jasl 回复于 2012年08月26日 · 9157 次阅读

花了一些时间把 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?"

Passenger 和 Apache 之间也是走 Socket 的

nginx + passenger 呢?

github 好像用的是 unicorn

@hooopo 生产环境下有什么好的 peofiler 方式?

我很喜欢 unicorn 和下游服务器没有依赖 定制性也很强 passenger 这次算第一次用 默认配置下有这么大差距比较奇怪

什么条件都不同,怎么比?至少要统一 Web server 吧。。。

@kgen 我只是蛋疼折腾的时候无意发现这个现象 而且是很直观的就能看出来 并不是刻意去测试的

最近在折腾 Gitlab 的 Git HTTP 支持,发现 unicorn 真的很好。

passanger 会将 http basic auth 的信息拦截掉。导致后端没法正常验证。这个有人报过 issue 了。我只能让它换到非 passanger 环境下。

其他的 thin unicorn puma. 我最近看过代码。关于 tempfile 的实现上面。unicorn 也是最好的。puma 里面的代码真的很取巧。

#8 楼 @jasl 我觉得是 nginx 带来的性能提升,因为 unicorn 相比 passenger 没有很大的性能差别。

我记得,很多年以前 JavaEye(现在叫 ITEye) 上, 有不少关于 Rails Webserver 的性能对比的文章, 其中包括 apache 和 nginx。 好久不去 ITEye 了。

#11 楼 @ery 范凯在 08 年的一篇文章里建议的部署方式是 Lighttpd+FastCGI,两样都冷门得不行。

那是 08 年啊 现在还是变了不少东西的了

@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 应用中的差别,有没有数据可以公布一下。

#16 楼 @kgen RubyChina 之前用的是 thin,后来转用 Unicorn,没用过 Passenger。

@lgn21st 研究了下 gitlab 的 unicorn 配置 更加喜欢了,http://ruby-china.org/topics/35 里提到的重启 woker 可以自动化完成 虽然是定时 restart 而不是根据阀值

需要 登录 后方可回复, 如果你还没有账号请 注册新账号