部署 apache+passenger vs nginx+unicorn

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

花了一些时间把 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 而不是根据阀值

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