论坛首页 Ruby版 ruby

Rails站点压力测试及优化方案

浏览 704 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-12-01
Rails站点压力测试及优化方案

傲游招聘站案例分析

傲游招聘站压力测试情况
·         11月1日之前,大量的使用请求路由(Routing Requests),使用静态页.在2000并发的测试下,mongrel很慢,动态页面出现堵塞情况.实际上线测试mongrel挂掉(5个mongrel进程)

·         11月1日改进后,除了提交和后台页面,其他页面都使用静态页,去掉了大部分请求路由.mongerl进程改为10个.

情况分析

·         虽然rails的缓存机制可以生成静态页面,但是如果我们认为生成静态页后就万事大吉了就大错特错了.rails站点获得url请求后,先到public目录下找相应文件,如果找不到再经请求路由到相应的controller里面找相应的action,然后生成页面.之前傲游招聘站的url都要经请求路由,所以并发量大的时候mongrel直接挂掉.

解决方法和注意事项
·         查过很多资料,看过rails社区里对mongrel的评测,目前能解决mongrel并发量的方法只能是多开mongrel进程.” 只要硬件管够,J2EE系统和Rails系统的网站负载能力不会有多大的差别”(关于rails大容量网站部署的性能讨论)

·         既然mongrel能承受并发量太小是一个目前难以解决的瓶颈,那我们只能尽量避开让大量用户直接访问mongrel服务.

·         由前端web服务器比如nginx(传说最多可以30000并发)或者apache(据mason调查限于硬件情况最多20000并发)来运行静态内容(html页面,图片,压缩文件,流媒体等).

·         列表类型的页面,用缓存来解决.如果对页面内容时效性要求不高,就可以设置定期缓存(Rails敏捷开发第一版380页有介绍).如果页面时效性要求高,就在每次更新的时候更新相应页面的缓存.

·         对于提交表单类型的页面,表单的交互(告诉用户填写信息是否满足要求)用Ajax技术来实现,整个表单页面为静态页.

·         性能优化注意事项

·         参考 ruby on rails应用性能优化之道

·         缓存的静态页面路径要和url对应上,否则还是要经过请求路由.

·         参照上一条,还是尽量少用请求路由,或者用的话,也一定要让缓存路径和url匹配.

·         参照以上几点,似乎只有页面缓存才是最终的安全之道,片段缓存只能说是提高执行时的效率.

有待考虑的问题
·         如果mongrel这么脆弱不堪,应该如何防范DDOS攻击mongrel呢?总会有非静态页的.



文章引用自:
   
最后更新时间:2007-12-01
1,多个mongrel实例负载均衡
2,后台用monit/runit监控mongrel

参考RubyWorks Production Stack的配置就行了
   
0 请登录后投票
最后更新时间:2007-12-03
多谢gigix
   
0 请登录后投票
论坛首页 Ruby版 ruby

跳转论坛:
JavaEye推荐