`

[讨论]部署Rails的最佳方案是什么?

阅读更多
从来没真正部署过一个production级别的rails应用,但是9月份很可能要部署一个,所以最近也开始关注Rails的部署问题。这里算是抛砖引玉吧,还请各位有经验的同志热烈讨论,我想很多人也都对这方面很感兴趣。

Robbin之前的帖子里面讨论过如何选择Rails的部署方案,也挺详细的,我估计硬件和操作系统方面大家分歧应该不大,总归是linux,服务器越强劲,内存越大越好。所以问题就到了软件方面。数据库大概也不用怎么讨论,mysql之类的东西大家心里都有数。关键还是server的问题。

JavaEye现在用的server应该是lighttpd和fastcgi吧,从大家浏览网站的体验上看,性能还是不错的。Robbin有写文章讲过如何安装这些server,但是很想知道选择这些server的原因。apache应该是最传统的选择,为什么Robbin没有选它呢?

ThoughtWorks的RubyWorks选择的是HAProxy和Mongel,这里没有静态web server,文档里说可以用apache和一个叫nginx的东东。我想大公司选择这些东东作为RubyWorks的默认安装,肯定是有原因的吧。那它们的lighttpd+fastcgi比较起来如何呢?gigix也许可以解释一下。

如果有哪位大哥可以总结一下目前比较流行的server组合,说说各自的优缺点,那小弟真是感激不尽啊。

另外,我个人觉得选择server的时候,不单单要看功能和性能方面,还要看安装配置是不是比较简单,不知道各位是否同意这一观点呢?
分享到:
评论
24 楼 gigix 2007-09-20  
moumentei 写道
在没有达到百万、千万流量的时候,部署问题没有太大意义,apache+fcgi这种傻瓜方案完全可以应付。

这么说只是希望一些看热闹的同学不要陷入太深,这淌水比较深,没有必要的话可以先绕过去。

没错
所谓“高性能部署”,需要水平相当高的网管。说白了,绝大多数公司根本请不起这样的网管,因为他们根本也不需要这么高性能的部署。
简单又好用的部署环境,包括RubyWorks Production Stack,更多的还是“信心工程”,让大家看到这些事情是可以做的罢了。
23 楼 moumentei 2007-09-20  
在没有达到百万、千万流量的时候,部署问题没有太大意义,apache+fcgi这种傻瓜方案完全可以应付。

这么说只是希望一些看热闹的同学不要陷入太深,这淌水比较深,没有必要的话可以先绕过去。
22 楼 uu4u 2007-09-14  
freemind 写道
AllenYoung 写道
freemind 写道

JavaEye为什么用lighttpd + fcgi呢?原因如下:

1) lighttpd发展了好几年了,市场占有率也相当高,是一个经过实践检验的server,它的文档也很全;而nginx还没有经过足够的市场检验,文档也很缺乏
2) JavaEye的ruby进程和web server在一台机器上面跑,通过unix socket使用fcgi协议通讯可以避免tcp的网络开销,其通讯速度比使用tcp socket使用http协议通讯要快一些。

谢谢你的详细讲解,受益匪浅。我看Agile Web Development with Rails 2e里面说fastcgi总是会出现莫名其妙的问题,而mongrel则是未来的一个趋势,因此它推荐使用mongrel而确实也说道one-box下使用fastcgi也可以。

也许可以先用lighttpd+fastcgi搭配,然后当lighttpd对mongrel的支持增强后再换到mongrel。

很是奇怪,既然lighttpd性能这么好,呼声这么高,咋没有谁弄个lighttpd+XXX的one-stack安装包出来呢。


第一,不是fastcgi有问题,fastcgi只是一个协议(程序之间的语言),是apache的mod_fastcgi这个模块有问题。打个比方,有个人英语水平很差,和你用英语对话,总是结结巴巴的,那你说是英语(fastcgi)这种语言有问题呢?还是和你对话的这个人(mod_fastcgi)有问题呢?

第二,分布式部署使用lighttpd + fastcgi也是已经被证明了非常stable的方案,至少是目前RoR方案当中performance和stablition最好的。

第三,lighttpd下一个版本1.5.0搭配fastcgi还是通过http proxy代理到mongrel,没有什么区别。1.5.0已经把这两种协议统一在一个module里面了。但是单机情况下,使用fastcgi比走http有一个额外的优势,就是通过unix socket通讯,可以降低通讯开销。

第四,one-stack的installer也只有ThoughtWorks一家在做,没有其他人在做。你也可以问问他们,为什么不做apache的installer,为什么不做nginx的installer,为什么不做litespeed的installer。

第五,传统Unix的Adminstrator都不屑于使用one-stack installer这种东西。高性能的Server需要通过自己手工安装和调整每一个参数来取得最好的效果。这是one-stack installer这种东西做不到的。打个比方,你有没有见过专业的摄影师用傻瓜相机的?



写的很明了、清楚,学到了很多知识。程序员如果都有你这样的沟通能力,中国未来的软件将不可限量。
21 楼 kenwei 2007-07-26  
Nginx + Mongrel,简单,高性能,稳定!
20 楼 whisper 2007-07-17  
公司现在用nginx -> mongrel的部署
nginx绝对是个杀手应用,超高性能,proxy也相当的爽
以前用lightty 1.4,不仅proxy比较诡异,而且并不是很稳定
最重要的是,nginx的代码写的太爽了,要增加点儿东西简直就是个享受
19 楼 dream_bird 2007-07-12  
引用
Nginx + Mongrel是Rails社区未来的方向,Railsconf2007上一个Session,"Xen and the Art of Rails Deployment",PDF在这里下。


前几天测试了文中提到的Swiftiply,有些高明的地方,不过不知道在生产系统上能否经受住考验。
18 楼 iunknown 2007-07-09  
gigix 写道
引用
ThoughtWorks的RubyWorks选择的是HAProxy和Mongel,这里没有静态 web server,文档里说可以用apache和一个叫nginx的东东。我想大公司选择这些东东作为RubyWorks的默认安装,肯定是有原因的吧。那它们的lighttpd+fastcgi比较起来如何呢?gigix也许可以解释一下。

FastCGI最大的问题是不成熟,稳定性不够,即便像DreamHost这样老资格的shared host也经常出现FastCGI进程挂死的情况。至于Apache,我们还没有看到把它放进统一配置的需求,也许以后会加进去。
我列举了几个一站式的Rails环境安装方案:http://gigix.thoughtworkers.org/articles/2007/07/05/existing-rails-deployment-stacks


这里有另外一个 fastcgi 的实现 http://fastcgi.coremail.cn/,看它的介绍应该是解决了 mod_fastcgi 的大部分问题。
17 楼 hideto 2007-07-09  
freemind和robbin写的一篇博客一模一样,见RoR的部署方案选择freemind是robbin的马甲么?
16 楼 kenwei 2007-07-09  
freemind 写道
RoR的部署方式从架构上来说分为前端和后端:
4、nginx
一个俄国人开发的轻量级高性能web server,特点是做proxy性能很好,因此被推荐取代apache2.2的mod_proxy_balancer,来和mongrel cluster搭配。其他方面和lighttpd到差不多。

要说缺点,可能就是发展的时间比较短,至今没有正式版本,还是beta版。没有经过足够网站的验证。



这里看看,然后再发表看法。

to freemind:

不要老是引用别人的看法(又不注明),自己要实践了以后再说,人言即言,没有什么希望。
15 楼 kenwei 2007-07-09  
freemind 写道

第一,不是fastcgi有问题,fastcgi只是一个协议(程序之间的语言),是apache的mod_fastcgi这个模块有问题。打个比方,有个人英语水平很差,和你用英语对话,总是结结巴巴的,那你说是英语(fastcgi)这种语言有问题呢?还是和你对话的这个人(mod_fastcgi) 有问题呢?


fastcgi是讲西班牙语,http是讲英语,很多人都不懂西班牙语怎么知道你讲得好不好?
14 楼 dogstar 2007-07-09  
freemind 写道
dogstar 写道
freemind 写道
dogstar 写道
haproxy+mongrel

静态资源怎么处理?直接交给mongrel?
把haproxy整合进lighttpd多好,呵呵




没有这个必要性。lighttpd自己对于fastcgi的负载均衡分发能力就足够强了。如果真的到了lighttpd都撑不住的时候,像haproxy这种应用级别的balancer也一样撑不住的。到了那个时候起码得是kernel级别的LVS来做负载分发了,或者直接购买硬件负载均衡器。


前面你不是说过lighttpd的proxy现在很差么,haproxy很强。现在怎么有差不多了?


http proxy <> fastcgi dispatcher

我只说过lighttpd的http proxy功能不完善,没有说过它差,更没有说过它很差。

真是对牛弹琴!


说话何必如此犀利?我只是在请教你,也许是我语言没有组织好吧,呵呵。
13 楼 kenwei 2007-07-09  
freemind 写道
RoR的部署方式从架构上来说分为前端和后端:

4、nginx
一个俄国人开发的轻量级高性能web server,特点是做proxy性能很好,因此被推荐取代apache2.2的mod_proxy_balancer,来和mongrel cluster搭配。其他方面和lighttpd到差不多。

要说缺点,可能就是发展的时间比较短,至今没有正式版本,还是beta版。没有经过足够网站的验证。



简直胡说八道!“发展的时间比较短,至今没有正式版本,还是beta版。没有经过足够网站的验证”,拷!根本就没有什么实践经验,也出来害人,还装得像XX一样出来指点江山,操。不知道就不要乱发表,肤浅。
12 楼 kenwei 2007-07-09  
freemind 写道
kenwei 写道
Nginx + Mongrel是Rails社区未来的方向,Railsconf2007上一个Session,"Xen and the Art of Rails Deployment",PDF在这里下。

这也是我期待已久的完美组合。看看大家现在Pound + Apache/Lighttpd + mod_fastcgi/mod_fcgid + Mongrel,不堪回首。


别动不动就上升到革命的高度。现在的Nginx根本就没有比现在RoR部署方案高明到哪里去。

至于你根本就不懂RoR的部署方案,妄言不堪回首,那就太可笑了。
像你这种闭门造车、自以为是的人是很悲哀的。你用过Nginx吗?没有用过就不要乱放屁。
11 楼 kenwei 2007-07-09  
Nginx + Mongrel是Rails社区未来的方向,Railsconf2007上一个Session,"Xen and the Art of Rails Deployment",PDF在这里下。

这也是我期待已久的完美组合。看看大家现在Pound + Apache/Lighttpd + mod_fastcgi/mod_fcgid + Mongrel,不堪回首。
10 楼 zhenjian 2007-07-08  
我想dogstar的问题是haproxy+mongrel处理静态资源的能力如何?
9 楼 dogstar 2007-07-07  
freemind 写道
dogstar 写道
haproxy+mongrel

静态资源怎么处理?直接交给mongrel?
把haproxy整合进lighttpd多好,呵呵




没有这个必要性。lighttpd自己对于fastcgi的负载均衡分发能力就足够强了。如果真的到了lighttpd都撑不住的时候,像haproxy这种应用级别的balancer也一样撑不住的。到了那个时候起码得是kernel级别的LVS来做负载分发了,或者直接购买硬件负载均衡器。


前面你不是说过lighttpd的proxy现在很差么,haproxy很强。现在怎么有差不多了?
8 楼 gigix 2007-07-07  
freemind 写道
第四,one-stack的installer也只有ThoughtWorks一家在做,没有其他人在做。你也可以问问他们,为什么不做apache的installer,为什么不做nginx的installer,为什么不做litespeed的installer。

事实显然不是这样。http://gigix.thoughtworkers.org/articles/2007/07/05/existing-rails-deployment-stacks
至于为什么不包含Apache在RubyWorks Production Stack里面,前面已经说过了
freemind 写道
第五,传统Unix的Adminstrator都不屑于使用one-stack installer这种东西。高性能的Server需要通过自己手工安装和调整每一个参数来取得最好的效果。这是one-stack installer这种东西做不到的。打个比方,你有没有见过专业的摄影师用傻瓜相机的?

这是当然。再好的production stack也只能是一个入门的指引,用户肯定需要在这个基础上做很多很多的调整。production stack的象征意义大于实际意义:对于那些对部署环境的性能、伸缩性、可靠性等有怀疑的人,可以让他们看到,RoR的部署环境是很好并且很容易得到的。要真说用起来,说实话,我不认为任何non-trivial的网站能够直接在任何一个production stack上部署而不需要自己调整。但一个好的production stack能够给你指出方向,而不用什么都从头去摸索。
7 楼 dogstar 2007-07-06  
haproxy+mongrel

静态资源怎么处理?直接交给mongrel?
把haproxy整合进lighttpd多好,呵呵

6 楼 AllenYoung 2007-07-06  
freemind 写道

JavaEye为什么用lighttpd + fcgi呢?原因如下:

1) lighttpd发展了好几年了,市场占有率也相当高,是一个经过实践检验的server,它的文档也很全;而nginx还没有经过足够的市场检验,文档也很缺乏
2) JavaEye的ruby进程和web server在一台机器上面跑,通过unix socket使用fcgi协议通讯可以避免tcp的网络开销,其通讯速度比使用tcp socket使用http协议通讯要快一些。

谢谢你的详细讲解,受益匪浅。我看Agile Web Development with Rails 2e里面说fastcgi总是会出现莫名其妙的问题,而mongrel则是未来的一个趋势,因此它推荐使用mongrel而确实也说道one-box下使用fastcgi也可以。

也许可以先用lighttpd+fastcgi搭配,然后当lighttpd对mongrel的支持增强后再换到mongrel。

很是奇怪,既然lighttpd性能这么好,呼声这么高,咋没有谁弄个lighttpd+XXX的one-stack安装包出来呢。
5 楼 gigix 2007-07-06  
RubyWorks Production Stack就是haproxy+mongrel的

相关推荐

Global site tag (gtag.js) - Google Analytics