部署 apache+passenger vs nginx+unicorn

jasl · 发布于 2012年8月24日 · 最后由 jasl 回复于 2012年8月26日 · 6424 次阅读
1107

花了一些时间把linode上部署gitlab用的apache+passenger替换成了nginx+unicorn,发现性能提高了N倍,特别是load commit data的磁盘io。 按道理apache+passenger module没有socket通信时间,性能更快啊。 两边配置均采用gitlab installation guide上的,不过nginx上开启了epoll。 有没有人做过实际项目上的性能对比?

共收到 18 条回复
8
hooopo · #1 · 2012年8月24日

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?"

2
huacnlee · #2 · 2012年8月24日

Passenger 和 Apache 之间也是走 Socket 的

1
Rei · #3 · 2012年8月24日

nginx + passenger 呢?

96
valentine · #4 · 2012年8月24日

github好像用的是unicorn

1107
jasl · #5 · 2012年8月24日

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

1107
jasl · #6 · 2012年8月24日

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

370
kgen · #7 · 2012年8月24日

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

1107
jasl · #8 · 2012年8月24日

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

243
Saito · #9 · 2012年8月25日 1 个赞

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

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

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

370
kgen · #10 · 2012年8月25日 1 个赞

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

594
ery · #11 · 2012年8月25日

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

96
pridechung · #12 · 2012年8月25日

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

1090
benzhang · #13 · 2012年8月25日

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

1090
benzhang · #14 · 2012年8月25日

@huacnlee
nginx sends requests directly to the Unicorn worker pool over a Unix Domain Socket (or TCP, if you prefer) nginx跟unicorn也是走socket的耶.

3
lgn21st · #15 · 2012年8月25日

#10楼 @kgen 我记得Ruby China建站之初,我们就遇到了选型问题,是thin,unicorn,还是passenger,当时我发过一个帖子,见这里:http://ruby-china.org/topics/35

至今9个多月了,unicorn 还是我的第一选择,理由是内存资源占用,以及在多个worker process下,他的Load balancing上有一定的性能优势。

370
kgen · #16 · 2012年8月25日

#15楼 @lgn21st 我们一直在关注 Thin, Passenger, unicorn 的性能对比,不过github到目前为止,也表示差别不大。当时我记得github文章末尾提到:几种方式性能差别不大,不要因为github用什么就用什么,而是选择真正能解决问题的。

我们的场景和RubyChina不太一样,是在内存较大的服务器上部署多个应用,包括一些老的Ruby 1.8 + Rails 2的项目,这些客户没有预算升级到 Ruby 1.9 + Rails 3。综合考虑了性能,多版本共存的兼容性,部署的方便性,我们选择了Passenger。

unicorn相比Passenger在RubyChina应用中的差别,有没有数据可以公布一下。

3
lgn21st · #17 · 2012年8月25日

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

1107
jasl · #18 · 2012年8月26日

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

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