`
BlueFuture
  • 浏览: 53268 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
社区版块
存档分类
最新评论

RoR的部署方案选择

    博客分类:
  • ROR
阅读更多

RoR的部署方式从架构上来说分为前端和后端:

一、前端
前端的作用就是处理静态资源,将动态请求分发到后端,有时候也带有一些额外的功能,例如对特定URL进行rewrite和redirect,对HTTP输出进行gzip压缩等等。

前端目前已知的可以选择apache, lighttpd, litespeed, nginx, haproxy

1、apache2.2
apache是全球市场占有率最高的web server,超过全球互联网网站50%的网站都用apache。apache2.2 + mod_proxy_balancer是一个非常流行,非常稳定的方案。

使用apache2.2唯一的问题就是apache的性能和后面那些轻量级web server相比,差太远了。一方面在处理静态请求方面apache要比lighttpd慢3-5倍,内存消耗和CPU消耗也高出一个数量级,另一方面 mod_proxy_balancer的分发性能也不高,比haproxy差很远。

2、lighttpd
lighttpd是一个轻量级高性能web server,一个在MySQL Inc工作的德国人写的。性能很好,内存和CPU资源消耗很低,支持绝大多数apache的功能,是apache的绝好替代者。目前lighttpd已经上升到全球互联网第四大web server,市场占有率仅此于apache,IIS和Sun。

lighttpd唯一的问题是proxy功能不完善,因此不适合搭配mongrel来使用。lighttpd下一个版本1.5.0的proxy模块重写过了,将会解决这个问题。

3、litespeed
和lighttpd差不多,商业产品,收费的。比lighttpd来说,多一个web管理界面,不用写配置文件了。litespeed专门为单机运行的RoR开发了一个lsapi协议,号称性能最好,比httpd和fcgi都要好。他的proxy功能比lighttpd完善。

litespeed的缺点我却认为恰恰是这个lsapi。因为lsapi不是web server启动的时候启动固定数目的ruby进程,而是根据请求繁忙程度,动态创建和销毁ruby进程,貌似节省资源,实则和apache2.2进程模型一样,留下很大的黑客攻击漏洞。只要黑客瞬时发起大量动态请求,就会让服务器忙于创建ruby进程而导致CPU资源耗尽,失去响应。

当然,litespeed也支持httpd和fcgi,这个和lighttpd用法一样的,到没有这种问题。

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

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

5、haproxy
就是一个纯粹的高性能proxy,不处理静态资源的,所有请求统统分发到后端。

二、后端
后端就是跑ruby进程,处理RoR动态请求了。运行后端ruby进程有两种方式:

1、fcgi方式
准确的说,不能叫做fcgi方式,其实就是启动一个ruby进程,让这个ruby进程监听一个tcp/unix socket,以fcgi协议和前端通讯。所以fcgi不是指ruby进程的运行方式,而是ruby进程使用的通讯协议。这就好比你tomcat可以用 http也可以使用ajp通讯一样,tomcat自己的运行方式都一样的,只是通讯方式不一样。

fcgi方式启动ruby进程,可以使用lighttpd带的一个spawn-fcgi工具来启动(JavaEye目前采用这种方式)。

值得一提的是,apache2.2的mod_fastcgi的方式和上面还不太一样,由apache动态创建fcgi进程和管理fcgi进程,这种方式和litespeed的lsapi面临的问题是一样的,此外apache的mod_fastcgi自己也有很多严重的bug,是一种很糟糕的部署方式。这种糟糕的部署方式也败坏了fcgi的名声。

fastcgi只是一种协议,虽然古老,但并不是不好用,http协议也很古老。没有必要因为apache的mod_fastcgi的运行方式的问题而连带把fastcgi都一同否定了。fastcgi只是一个协议(程序之间的语言),是apache的mod_fastcgi这个模块有问题。打个比方,有个人英语水平很差,和你用英语对话,总是结结巴巴的,那你说是英语(fastcgi)这种语言有问题呢?还是和你对话的这个人 (mod_fastcgi)有问题呢?

2、http方式
也就是用mongrel去跑ruby进程,由于mongrel实际上已经是一个简单的http server,所以也可以单独作为web server使用。mongrel现在越来越受欢迎了。

用fcgi方式还是http方式,我个人觉得区别不大,关键还是看应用的场合,一般而言,推荐的搭配是:

lighttpd + fcgi 或者 nginx +mongrel,而apache因为性能差距,而不被推荐。

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

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

什么场合使用haproxy?

大规模部署,例如你的RoR应用到十几台服务器上面去,你用haproxy会更好,可以方便的添加删除应用服务器节点,proxy性能更好。

分享到:
评论
1 楼 tomorrow009 2010-05-25  
受交了~

相关推荐

    机遇ROR 的图书管理系统

    《机遇ROR的图书管理系统》是一份以Ruby on Rails(简称ROR)技术为核心,旨在构建高效、便捷的图书管理解决方案的学习资料。Ruby on Rails,是基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-...

    Ruby on Rails为企业SOA做好准备了吗

    此外,Begin的目的是教育开发者理解RoR部署的原理,而不仅仅是提供一套固定的部署方案。他认为,开发者应该能够在阅读书籍后根据自己的需求创造适应性强的部署策略,比如使用Thin服务器替代Mongrel。 尽管Java和C#...

    基于RoR的在线考试系统

    《基于Ruby on Rails的在线考试系统开发详解》 在当今数字化时代,教育领域的创新与...通过合理利用RoR的特性,我们可以构建出功能完善、易用性强、安全性高的在线考试平台,为教育领域提供更优质的数字化解决方案。

    twitch:使用RoR 4.2.2的类似app的twitter

    10. **部署** - 最后,应用需要部署到生产环境,如Heroku或AWS,以便用户访问。这涉及到配置服务器、数据库和环境变量。 在项目文件`twitch-master`中,你可以找到这个应用的源代码,包括`app`目录下的模型、视图和...

    ProfessionalRubyonRails教程

    10. **部署**:学会使用Capistrano、Heroku或DigitalOcean等工具将RoR应用部署到生产环境。 除此之外,本教程还将涵盖安全实践、性能优化、集成第三方服务如OAuth、API设计以及如何利用社区资源如Gemfile来扩展RoR...

    doc_ecommerce:ror-ecommerce 的文档

    **标题解析:** ...8. **部署**:学习如何将应用部署到云服务如 Heroku 或 AWS 上。 以上就是根据标题、描述和标签所推测出的相关知识点。在实际解压并查看文件后,可以更具体地学习和掌握这些内容。

    Ruby on Rails实践之路给PHP和Java开发者的书

    对于Java开发者,他们可能更熟悉Spring Boot或者Java EE,这些框架相对复杂,而RoR则提供了一个更为简洁、灵活的解决方案。RoR的ActiveRecord是ORM(对象关系映射)的一个实现,它简化了数据库操作,使得开发者可以...

    Ruby-ROREcommerceRubyonRails电子商务平台

    10. 部署:了解如何将应用部署到Heroku、AWS或其他云平台。 通过学习和实践ROR Ecommerce,你可以获得构建电商网站的全面技能,同时也能深入了解Ruby on Rails框架的精髓。无论是对于个人提升还是小型企业的实际...

    铁道中文应用开发现状综述2006版

    ##### 4.4 免费的试验部署环境Web Hosting ROR 为了方便开发者学习和测试,一些服务商提供了免费的ROR Web Hosting服务,使得开发者可以在无需投入大量成本的情况下搭建和运行自己的应用程序。 ##### 4.5 可下载...

    架构创新与演进(解决方案专场)——FreeWheel在微服务架构下的前端改造实践 共39页.pdf

    4. **静态资源服务器(Static Asset Server)**:使用Nginx+CDN方案部署静态资源,提高资源加载速度。 5. **SPA架构**:采用React.js构建单页应用,利用其高效的虚拟DOM机制提升性能。 6. **路由(Route)**:使用React ...

    examal:课程设计--在线考试系统。使用Ruby on Rails实现。在服务器上部署后可以由老师管理其考试,并发布给学生参加考试。由于需要自动化评分,题型只支持选择题和多选题

    本项目名为"examal",是用Ruby on Rails框架开发的一个实例,特别强调了自动化评分功能,因此它仅支持选择题和多选题这两种能够自动评估答案的题型。 Ruby on Rails(RoR)是一个基于模型-视图-控制器(MVC)架构...

    Mozy云服务

    Mozy是一家在线备份服务提供商,为个人用户及中小型企业(SMBs)提供高效、安全且可扩展的数据备份解决方案。自成立以来,Mozy已在市场上运营超过五年时间,并积累了超过三百万的客户基础以及七十万的企业用户。其...

    redmine0.7.3

    Ruby on Rails,简称RoR,是Redmine选择的基础框架,它为Web开发带来了很多优势: 1. **MVC架构**:RoR遵循模型-视图-控制器(MVC)设计模式,将业务逻辑、数据操作和用户界面分离,使得代码组织清晰,易于维护。 2...

    薄荷网RubyonRails开发运营实践.pptx

    在部署方面,薄荷网选择了Linux操作系统,因为Linux被广泛认为是稳定且适合服务器环境的选择。对于Web服务器,他们选择了Nginx,而不是Apache或Lighttpd,原因在于Nginx在处理静态文件和反向代理上有较好的性能表现...

    结合使用 Oracle 和 Ruby on Rails 教程

    10. **部署和监控**:在生产环境中,使用如Capistrano这样的工具进行部署,并设置监控工具,如New Relic或Prometheus,以监控应用性能和数据库状态。 总的来说,虽然Oracle与Ruby on Rails的集成相比其他数据库系统...

    export-handlers(fusioncharts离线导出服务).rar

    这里的处理器为RoR应用提供了离线导出的解决方案,使得Ruby开发者也能方便地实现图表导出。 6. **php-export-handler**:PHP是另一种广泛使用的服务器端脚本语言,特别适合Web开发。这个处理器使得PHP开发者能够...

    radiant-radiant-0.9.0.rc2-0-gb9809f5 源文件

    Radiant 是一个基于 Ruby on Rails 的开源内容管理系统(CMS),专为设计师和开发人员提供简洁、灵活和可扩展的解决方案。这个压缩包“radiant-radiant-0.9.0.rc2-0-gb9809f5”包含了 Radiant CMS 的源代码,版本号...

    如何在局域网安装Redmine(原创)

    Redmine是一款基于Web的项目管理和跟踪工具,由Ruby on Rails (RoR)框架编写而成。它为团队提供了全面的功能,包括但不限于问题追踪、任务管理、版本控制集成、时间追踪、文件管理等。Redmine的设计初衷是为了提供一...

    blog

    10. **部署**:RoR应用可以部署到Heroku、AWS、DigitalOcean等云平台,或者自建服务器,使用Capistrano等工具进行自动化部署。 以上就是关于"blog"项目的核心知识点,涵盖了从开发环境、技术选型到实际应用的各个...

Global site tag (gtag.js) - Google Analytics