锁定老帖子 主题:rails部署艺术
精华帖 (0) :: 良好帖 (3) :: 新手帖 (10) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-10
最后修改:2009-11-10
听到Rails部署这两词,可能你首先想到的是下面这堆东西:
* CGI
但时代已经变了,新时代需要新思维
Mongrel是由Zed Shaw完成的一个HTTP Server,它:
* 使用Ragel + C的快速HTTP解析
Mongrel就足够了?
答案是:不够,因为:
* Rails请求分发需要使用互斥锁
因此,你仍然需要一个前端HTTP Server,幸好有一大堆:
* Pen,Pound,Balance,Haproxy(不支持静态文件,只是代理)
这就搞定了?还不行:
* Pen(不支持SSL,不能限制连接速率)
那怎么办?
Nginx有什么好处:
* 专为性能优化而开发,性能是其最重要的考量
答案有了:Nginx + Mongrel,现在
* Apache很清闲了,它只需要负责mod_dav_svn就可以了
当然还有一些问题:
* Nginx会自动缓冲文件上传,因此将失去mongrel_upload_progress支持
完美的部署就这样产生了:
* Linux
就这么完了?还有一点,上面讲到过Mongrel的问题:
* 不能同时处理多个请求
这些都会损耗性能,因此我们需要新思维
Swiftiply事实上是Mongrel的修订版,那么它对Mongrel做了什么:
* 去除了Mongrel中对线程和Socket的处理
你可能疑惑为何单线程会优于多线程,这是因为:
* Ruby的绿色线程进行上下文切换时需要拷贝大量的状态信息
Swiftiply还有一个好处:它可以启动多个Mongrel,但只使用一个端口。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-10
最后的结论是什么
根据这个号的方案,详细的部署方法呢 如果有这个,就更好了 |
|
返回顶楼 | |
发表时间:2009-11-10
最后修改:2009-11-10
我用的是lightTPD + fastCGI(用nginx+mongrel cluster也行)
请教大家,我在工作时间有时为了更新,不得不重启 web server,有什么办法可以让当前正在处理的请求(如支付订单的操作)不中断,直到它安全的执行完呢?有没有什么 办法可以安全地重启更新呢,这样心惊肉跳的,早晚会出事。 |
|
返回顶楼 | |
发表时间:2009-11-10
引用 Swiftiply还有一个好处:它可以启动多个Mongrel,但只使用一个端口。
这个有意思 |
|
返回顶楼 | |
发表时间:2009-11-10
机器人 写道 我用的是lightTPD + fastCGI(用nginx+mongrel cluster也行)
请教大家,我在工作时间有时为了更新,不得不重启 web server,有什么办法可以让当前正在处理的请求(如支付订单的操作)不中断,直到它安全的执行完呢?有没有什么 办法可以安全地重启更新呢,这样心惊肉跳的,早晚会出事。 你的fastcgi应该有多个进程,你可以在发布新版本的时候kill一个fastcgi进程然后再重启一个,而不需要重启web server,这样就不会中断了。 |
|
返回顶楼 | |
发表时间:2009-11-12
现在mongrel除了windows部署有些人用以外linux下几乎没什么人用了吧。作者是个大粪青,骂了社区一堆f打头的话后放弃了mongrel。
现在最方便的部署是nginx+passenger了,干净,快速,方便。速度貌似和thin差不多,比不上Lightly+fastcgi。 |
|
返回顶楼 | |
发表时间:2009-11-12
这个标题很好听。
|
|
返回顶楼 | |
发表时间:2009-11-12
机器人 写道 我用的是lightTPD + fastCGI(用nginx+mongrel cluster也行)
请教大家,我在工作时间有时为了更新,不得不重启 web server,有什么办法可以让当前正在处理的请求(如支付订单的操作)不中断,直到它安全的执行完呢?有没有什么 办法可以安全地重启更新呢,这样心惊肉跳的,早晚会出事。 还是在你的首页上说明一下吧,你看支付宝不也是偶尔出一个维护通知吗 |
|
返回顶楼 | |
发表时间:2009-11-15
最后修改:2009-11-15
最近我的所有服务器都换成了nginx + unicorn
零down机重启,启动速度快 unicron的运行方式与nginx的master worker方式极其相似,每一部分做他擅长的事情 nginx负责接收请求。并维护相关的长连接 linux kernel socket负责转发, unicorn master负责启动与监视worker, 重启时,kill -USR2 master_pid master加载代码,启动一个worker, 并让以前的worker做完事情后退出 是不是与nginx的kill -HUP nginx_pid很相似呢,那你就对了 http://github.com/blog/517-unicorn推荐篇博客 用了那么多部署方式,只有这个让我感觉最爽 |
|
返回顶楼 | |
发表时间:2009-11-15
引用 重启时,kill -USR2 master_pid master加载代码,启动一个worker, 并让以前的worker做完事情后退出
这个好 ![]() |
|
返回顶楼 | |