InfoQ

新闻

关注部署:谈Rails应用的最后一公里

作者 高昂 发布于 2008年1月15日 上午7时9分

社区
Ruby
主题
Ruby on Rails,
部署/数据中心
标签
Ruby on Rails

基于Rails框架应用开发的普及,在为用户带来众多创造性应用的同时,也赋予了开发者令人兴奋的高效与快捷体验。使用Rails开发Web应用的最后一个步骤,是要把Ruby代码从开发测试环境中迁移到实际生产模式之下。相比于开发过程来说,应用的部署并非易事。如何保证部署后站点的稳定和健壮性,并且可以从容应对大规模的并发访问,每一位富有经验的开发者或许都有自己的一套途径,就此,InfoQ中文站汇总了近期Rails部署问题的各方面观点,为您提供参考。

早在Rails应用普及之初,就时常会听见针对Rails部署问题的抱怨。对于PHP,一直以来都是以成熟的LAMP模式进行部署,讨论主要是集中在如何有效的进行服务器规模的拓展等等。而Rails方面则是没有统一的规则,Web服务器的组合方式和部署工具也都有各自的特色,应用的部署对开发新手来说,是个常会产生困惑的问题,在题为“我不喜欢RoR的原因”的帖子中,一位开发者提到:

RoR无疑是目前最具生产效率的开发框架之一,实现同样的应用,确使得开发时间缩减到原先的一半。但令我感到困扰的是,RoR对于开发者的确具有吸引力,但客户却并不这么认为。比方说,Rails应用的部署方式非常复杂,客户并不熟悉如何将开发好的应用部署在自己的服务器上,并且他们不喜欢使用命令行和脚本来操作Rails应用。

的确,相比PHP应用LAMP模式的部署,Rails的可选方案非常多。保持站点的稳定性和健壮性,所涉及的不仅仅是Rails或Ruby开发相关的技术,还有很多因素来自于Web服务器和应用服务器的选择与搭配。Rails部署常见的架构中,前端服务器加多个进程处理的方式如Fastcgi,Mongrel的选择以及与Web服务器的搭配使用,往往会给用户造成困扰。在《应用Rails进行敏捷Web开发》一书中,对于Rails的部署过程也作了简单的描述,但是所提供的部署方式并不十分合适于大规模网站的并发访问。论坛里的讨论中,常会针对于Lighttpd+FastCGI、Nginx+Mongrel、Apache+FastCGI等不同的搭配模式展开讨论。对于Mongrel服务器,Robbin在文章“RoR部署方案深度剖析”中评价道:

我们假设使用服务器端程序控制带权限的文件下载,某用户下载的是一个100MB的文件,该用户使用了多线程下载工具,他开了10个线程并发下载,那么每个线程Mongrel在响应之后,都会把整个文件读入到内存的StringIO对象当中,所以总共会创建出来10个StringIO对象保存10份文件内 容,所以Mongrel的内存会一下暴涨到1GB以上。而且最可怕的是,即使当用户下载结束以后,Mongrel的内存都不会迅速回落,而是一直保持如此 高的内存占用,这是因为Ruby的GC机制不好,不能够及时进行垃圾回收。

对此,robinlu根据自己的Rails部署经验写道

Mongrel处理rails request和静态文件使用的是不同的handler。处理静态文件用的是DirHandler,DirHandler没有通过调用response的start方法使用到StringIO,而是直接调用了response的send_file方法,直接write socket。验证过程非常简单,自己起一个mongrel,在public下放一个100M的文件,通过浏览器下载一下。在我的mac上,本来是76M的mongrel,在下载结束后是74M,下载过程中也一直小于80M,最低到过68M。无论是过程中还是结束后,都没有出现占用内存暴涨的现象。

的确,针对Rails部署的Web服务器与应用服务器的搭配方案,会令客户面对众多的选择,并且JVM之上的JRuby以及微软.Net平台上的Ruby运行环境,都可能会使得Rails的部署呈现多元化发展的趋势。Robbin在文章中对于JavaEye站点部署方案的选择做出了如下的总结:

Lighttpd+FastCGI是性能最佳,服务器资源消耗最少的RoR部署方案,事实上目前RoR网站部署使用最多最流行的也是Lighttpd+FastCGI方式,而JavaEye网站,自然也是这种方式的部署。因此我们可以对各种方案进行一个性能优劣的排队,即Lighttpd+FastCGI是性能最佳方案,而Apache+FastCGI是性能最差方案。

从设计架构上来说,对静态文件的处理应尽量由Web服务器前端处理,避免多线程下载对cpu和带宽的影响。搭配的方式有很多,方案选择的优劣也不能一概而论,需要根据具体情况做出最合适自身的选择。在InfoQ中文站之前的一篇新闻“与时俱进的轻量级Web服务器”中,也解释了Lighttpd+FastCGI成为目前Rails网站优秀部署方案的原因。对于各种选择和经验之谈,毕竟是仁者见仁、智者见智的事情,但无疑,关注小型轻量级服务器的发展,及其自动化部署工具和一站式集成化生产环境,都会给应用的部署上线带来有益的帮助。

关于应用服务器部署的更多信息,可以在InfoQ中文站的部署应用服务器相关主题,以及ChinaonRails服务器架构讨论区中详细了解。

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。