Nexus Weblogging
ChinaonRails
You are here ChinaonRails > Ruby on Rails > Rails > Rails部署艺术

研究


0.107%

disconnected
登录后回复主题 | 跳到回复(4)

Rails部署艺术

... by 研究 ... 33 月 27 天前 ... 2061 次点击

获取更好的排版效果,请访问:http://letrails.cn

翻译自:Ezra Zygmuntowicz, “Xen and the Art of Rails Deployment”

听到Rails部署这两词,可能你首先想到的是下面这堆东西:

* CGI
* Apache1.3/mod_fastcgi
* Lighttpd/fcgi
* Apache2/mod_fcgid
* Lighttpd/SCGI
* Lightspeed

但时代已经变了,新时代需要新思维
Mongrel:The year of the dog

Mongrel是由Zed Shaw完成的一个HTTP Server,它:

* 使用Ragel + C的快速HTTP解析
* 使用C的快速URI过滤器
* 堆栈式请求处理
* 配置灵活
* 安全同时兼容RFC的HTTP解析器

Mongrel就足够了?

答案是:不够,因为:

* Rails请求分发需要使用互斥锁
* 一个Mongrel实例只能同时处理一个请求
* 需要使用Mongrel_cluster创建多个实例来获取可伸缩性

因此,你仍然需要一个前端HTTP Server,幸好有一大堆:

* Pen,Pound,Balance,Haproxy(不支持静态文件,只是代理)
* Lightspeed,支持静态文件和代理
* Apache2.2.x/mod_proxy_balancer,同上

这就搞定了?还不行:

* Pen(不支持SSL,不能限制连接速率)
* Pound(不支持高负载,不能限制链接速率)
* Haproxy(可限制连接速率,性能非常高,不支持静态文件
* Lightspeed,免费版功能严重残缺
* Apache2.2.x,没什么不好,就是:太臃肿了

那怎么办?
Nginx:From Russia, with Love

Nginx有什么好处:

* 专为性能优化而开发,性能是其最重要的考量
* 非常小的资源占用
* 经过考验的高负载支持,没有内存泄漏
* 杀手级的Rewrite及Proxy模块
* 平易近人的作者以及快速扩大的社区

答案有了:Nginx + Mongrel,现在

* Apache很清闲了,它只需要负责mod_dav_svn就可以了
* 灵活的nginx.conf语法可以很轻易的搞定Rails Cache及动态请求
* 还有就是:快,快,快
* 我有说过快吗?

当然还有一些问题:

* Nginx会自动缓冲文件上传,因此将失去mongrel_upload_progress支持
* Proxy模块暂时还不支持链接速率限制

完美的部署就这样产生了:

* Linux
* Nginx
* Mongrel(Mongrel_cluster)
* Monit

就这么完了?还有一点,上面讲到过Mongrel的问题:

* 不能同时处理多个请求
* Rails分发需要取得互斥锁,
* 还有多线程切换

这些都会损耗性能,因此我们需要新思维
Swiftiply: Evented Mongrel

Swiftply事实上是Mongrel的修订版,那么它对Mongrel做了什么:

* 去除了Mongrel中对线程和Socket的处理
* 使用EventMachine的事件循环来代替
* Mongrel成了单线程,事件驱动
* 显著的速度及IO吞吐量提升
* 即使高并发,也没有不良症状(性能下降及内存泄漏)

你可能疑惑为何单线程会优于多线程,这是因为:

* Ruby的绿色线程进行上下文切换时需要拷贝大量的状态信息
* 互斥锁非常昂贵
* 单个进程的IO吞吐量有限
* 事件驱动意味着更紧凑的循环已经回调处理
* 由于节省了进程切换的时间,因此单线程可以将更多的精力集中到网络IO上。

Swiftiply还有一个好处:它可以启动多个Mongrel,但只使用一个端口。

总算结束了,原文还有一部分是关于虚拟机和磁盘阵列的,对这部分不是很熟悉,所以没有翻,有兴趣的可以看原文:Xen and the Art of Rails Deployment

----------------------------------------
LetRails.cn: 为Ruby on Rails在中文社区的枝繁叶茂贡献点滴


1 - 2007-6-4 8:15
bd7lx 深圳
2 - 2007-6-4 20:26
研究 楼主 地球
就是这个
3 - 2007-6-4 20:43
bd7lx 深圳
http://letrails.cn


[url]http://letrails.cn[/ Uurl] DoesNot works
4 - 2008-11-26 11:17
123456 地球
关于swiftiply+mongrel部署rials的问题?
1、swiftiply的安装出问题。
mapper.cpp: In constructor ‘Mapper_t::Mapper_t(const std::string&)’:
mapper.cpp:53: 错误: ‘strerror’在此作用域中尚未声明
mapper.cpp:57: 错误: ‘strerror’在此作用域中尚未声明
mapper.cpp:62: 错误: ‘strerror’在此作用域中尚未声明
make: *** [mapper.o] 错误

后来安了不少软件包也不起作用,没办法看了源文件,是在抛出异常时调用了:‘strerror’函数,我索性把异常抛出删除掉了,再执行setup.rb文件,勉强安装上了,但还不知有没问题呢 :(

2、配置后mongrel不能启动的问题,如下:
如果所谓swiftiply配置文件中 outgoing: 127.0.0.1:30000
mongrel 启动命令为 env SWIFT=1 mongrel_rails start -d -a 127.0.0.1 -p 30000
那么 mongrel将无法启动进程 但如果两者端口不同则可以启动,启动后也无法访问。

请有经验的师傅指点!!
(我说下我自己哦 ,以前学计算机,可后来作了公务员,几年下来所有的底子都荒废了,现在不甘心学起了ror,自己摸索,也没人指点,:( 不知自己 的路子对不对,烦请给指个方向)
看完之后有话想说?那就帮楼主加盖一层吧!

在回复之前你需要先进行登录
电子邮件或昵称
密码

© 2006-2010 A Jesse Cai Production   -   About   -   京ICP备07020911号
a site powered by Project Babel