`
PBFox
  • 浏览: 67995 次
  • 性别: Icon_minigender_1
  • 来自: China
文章分类
社区版块
存档分类
最新评论
阅读更多

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都一同否定了。

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性能更好。

分享到:
评论

相关推荐

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

    为了克服RoR部署的挑战,Tate与Ezra Zygmuntowicz和Clinton Begin共同编写了《Rails应用部署指南》。这本书旨在教育开发者如何有效地部署和扩展RoR应用,特别是在Nginx和Mongrel集群环境中实现高可用性和可伸缩性。...

    RoR性能优化经验谈

    首先,RoR性能优化涉及到多个层面,包括应用程序的部署、服务器配置以及代码优化。在部署方面,操作系统的选择至关重要。RoR通常在Unix类操作系统上运行最佳,如RHEL、CentOS、Ubuntu和SuSE Linux。对于AMD Opteron ...

    ROR安装必备所有架包

    `rake-0.7.3.gem`使得你可以定义任务,并通过命令行执行,简化了项目的构建、测试和部署流程。 `actionwebservice`是Rails早期版本中用于创建Web服务的组件,允许Rails应用程序提供SOAP接口。然而,自Rails 3之后,...

    ror实例

    1. **Gemfile与Gemfile.lock**:项目中的Gemfile用于指定项目依赖的gem库,Gemfile.lock则记录了具体版本,确保团队成员或部署环境具有相同的依赖。 2. **ActiveRecord**:这是Rails中的ORM(对象关系映射),它...

    RoR 培训课程PPT

    ### RoR培训课程PPT知识点概述 #### 一、课程概览与背景介绍 - **课程性质**:本课程为为期五天的Ruby on Rails(简称RoR)入门级培训,适合初学者快速掌握RoR的基本概念和技术要点。 - **讲师信息**:由Peter ...

    机遇ROR 的图书管理系统

    9. **部署与测试**:最后,学习如何将项目部署到服务器,如Heroku或AWS,并使用RSpec、Capybara等工具进行单元测试和集成测试,确保系统的稳定性和可靠性。 通过学习和实践《机遇ROR的图书管理系统》,你不仅能掌握...

    使用ROR编写ORACLE WEB应用

    综上所述,使用ROR编写Oracle Web应用涉及安装配置、数据库连接、模型、视图、控制器的设计,以及部署和性能优化等多个方面。通过深入学习和实践,开发者可以掌握这一技术栈,为构建高效、稳定的Web应用奠定基础。

    基于RoR的在线考试系统

    本文将深入探讨如何利用Ruby on Rails(RoR)框架开发一套功能完备的在线考试系统。 Ruby on Rails,简称RoR,是一款强大的开源Web应用框架,它遵循“Don't Repeat Yourself”(DRY)原则,以Ruby语言为基础,强调...

    learnRoR:艰难地学习RoR

    【标题】"learnRoR:艰难地学习RoR"揭示了这个项目是关于学习Ruby on Rails(RoR)框架的个人历程。RoR,或Rails,是由David Heinemeier Hansson开发的一个开源Web应用程序框架,它完全用Ruby编程语言编写。Ruby是一...

    用于ROR应用的lighttpd配置模板

    在开发和部署Ruby on Rails(简称ROR)应用程序时,选择合适的服务器软件是至关重要的一步。Lighttpd是一个轻量级、高效的Web服务器,尤其适合处理动态内容,如Rails应用。"用于ROR应用的lighttpd配置模板"提供了一...

    敏捷开发第二版ROR必看

    3. **高级篇**:涵盖更复杂的话题,如数据库查询优化、缓存策略、安全性和部署技巧。 4. **测试与持续集成**:讲解如何进行单元测试、集成测试,以及如何设置持续集成环境。 5. **敏捷开发实践**:介绍敏捷开发的...

    RoR-Newsroom:熨斗的RoR项目

    在部署方面,RoR Newsroom可能运行在Heroku或AWS等云平台上,使用PostgreSQL或MySQL作为数据库服务。为了优化性能和安全性,可能会配置如New Relic的监控工具,以及Rails的安全最佳实践,如参数过滤、XSS和SQL注入...

    开源项目管理系统redmine5.0.2,windows版一键部署,非常方便

    Redmine是用Ruby开发的基于web的项目管理软件,是用ROR框架开发的一套跨平台项目管理系统,据说是源于Basecamp的ror版而来,支持多种数据库,有不少自己独特的功能,例如提供wiki、新闻台等,还可以集成其他版本管理...

    在RHEL上安裝設置ROR(nginx+passenger+ruby+rails+oracle+netzke)

    10. **测试与部署**: 完成上述步骤后,启动Nginx和Rails应用,进行基本的功能测试。如果一切正常,RoR应用就可以在RHEL系统上通过Nginx和Passenger对外提供服务了。 在这个过程中,可能还会遇到如依赖库冲突、权限...

    计算机软件-编程源码-FOXPRO ROR WINDOWS 高级成程序设计技术.zip

    10. **程序部署与打包**:在实际应用中,源码可能还包括了程序打包和安装脚本,以便于用户安装和使用。 这个压缩包对于学习和研究FOXPRO编程,特别是在Windows环境下的高级应用,具有很高的价值。通过对这些源码的...

    Bug管理工具-Redmine手把手部署实施

    Redmine是一款基于Web的项目管理工具,由Ruby on Rails(简称ROR)框架构建,支持跨平台使用。它主要用于管理项目中的各种任务,包括Bug管理,涵盖了从新建、跟踪、解决到关闭的完整流程。本篇文章将详述如何在...

    Shopify:这是我本地的 RoR 应用程序

    自述 此自述文件通常会记录启动和运行应用程序所需的任何步骤。 您可能想要涵盖的内容: Ruby版 系统依赖 配置 数据库创建 ... 部署说明 … 如果您不打算运行rake doc:app请随意使用不同的标记语言。

    简历制作人决赛:TOP React + RoR API

    【React + Ruby on Rails (RoR):简历制作平台的核心技术】 在“简历制作人决赛:TOP React + RoR API”项目中,开发者利用了React和Ruby on Rails这两种强大的技术来构建一个高效的在线简历制作平台。这个项目的...

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

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

    ROR_shopping_microservice:用Sinatra制成

    总的来说,"ROR_shopping_microservice"项目展示了如何利用Ruby和Sinatra框架构建一个微服务,该服务可能包含了完整的购物功能,如商品展示、购物车管理、订单处理等,并且通过微服务架构实现了模块化和独立部署。

Global site tag (gtag.js) - Google Analytics