RoR布署方案深度分析澳门美高梅手机网站

二、Mongrel可以独自作为Web服务器运行,开发环境和布局环境统一 

  互联网扫描仪基本上是和打印机一体机上带的,一般都有批量围观成效,可是第三遍用总会为哪面朝上纠结。扫面结果的存放一般有那两种:存到U盘,发送邮件,共享文件夹,也有长途连接到扫描仪直接保存到地面的。个人认为发送邮件比较便于安全。

Lighttpd并不对准应用服务器的种种连接分配一定的Buffer,而是尽量的把应用服务器再次来到的数码两次性收到下来,由此无论是应用服务器再次回到多大的数据量,Lighttpd都是照单全收,胃口尤其震惊。 

选型:打印机可以说是各样办公室必备的设施。选取打印机的根本从作用上是还是不是持有网络连接,双面打印,彩色打印,复印,扫描,权限决定作用,以及耗材价格等地点。

3、Lighttpd 

使得:如若问我除了例行工作以外做的最多的是怎么样,这自然就是安装打印机驱动了。因为各类人都要设置,而且有人不断连接一台打印机,更别提现长逝障重新安装了。过去安装互连网打印机要先创设IP端口,找驱动路径在甄选型号。现在都是打开驱动安装程序一路下一步就行了。需求专注的是同一个网段内有不断一台型号一样的打印机安装时就要接纳一下了。连接多台打印机的安装好后最好根据岗位功效重命名一下,以方便使用者选取。

若是页面数据相比大,超过8KB,会怎么着?
FastCGI进度被挂在render方法上!必须等到Web服务器的缓冲区清空,把页面数据总体接收下来以后,法斯特CGI进度才能截至本次Rails调用,处理下一个呼吁!所以千万别用Apache/Nginx搭配法斯特CGI应用服务器,否则你的RoR应用会死的很丢脸。根据本人个人的测试数据注明,同样的测试负载,Apache搭配70个法斯特CGI进度挂掉,可是Lighttpd搭配30个法斯特CGI进度轻松跑完! 

六、复印机

此时此刻遭到关心的Passenger的陈设形式在本案中并不曾显得出专门的特性上的优势,然则只要将并发链接数放在300以内,则
Apache2.2/Prefork +
Passenger的配备形式的平均每秒响应数上涨为204.03,那样看来,假如为Apache举行局地优化布署,如故不失为一种高效的配置方案。而同时Passenger又是最不难配置的一种方案,能达标那种成效已经尤其令人满足。 

  单机设备基本上插到USB后装置驱动,打开扫描软件设置好清晰度,格式就行了。

即使自己那儿首先次搭建Lighttpd+法斯特CGI环境没费什么周折,不过本人阅览到特别多的Ruby程序员很难成功搭建一个Lighttpd+法斯特CGI的条件出来,很两人连Lighttpd都无法儿独立的运转起来。那恐怕是因为众多程序员习惯了Windows开发条件,对于Unix上边通过源代码编译安装的主意过于陌生造成的。而自我从97年起首应用Unix,至今已有10年历史,因而搭建这样简单的体系,对本身来说不造成怎样阻碍。 

  投影仪的接口一般都很丰盛,但奇迹为了美观吊顶的投影仪会从墙体里钢针,但受制于管线直径一般就只引出一种接口,VGA和HDMI居多,而现在台式机电脑上的接口VGA,HDMI,DP三种都有,就要求预备好种种各类的中转设备,以备不时之需。还有的简直用有线,需求在总结机上安装连接程序。外来人士带的记录本五花八门,系统也应有尽有,像苹果系统就进一步多,要通晓各样系统显示屏克隆和壮大的安装。

Litespeed是一个商业收费的Web服务器,静态资源处理能力据它和谐的评测数据比Lighttpd略高。Litespeed也同时扶助HTTP
Proxy连接Mongrel和法斯特CGI连接应用服务器。其余Litespeed专门为单机运行的RoR开发了一个lsapi协议,号称品质最好的RoR通信协议,比HTTP
Proxy和法斯特CGI都要好。不过lsapi的运作方式有很大毛病:因为lsapi不是web
server启动的时候启动固定数目的ruby进度,而是按照请求繁忙程度,动态创设和销毁ruby进度,貌似节省资源,实则留下很大的黑客攻击漏洞。只要黑客眨眼之间时发起大批量动态请求,就会让服务器忙于创设ruby进程而导致CPU资源耗尽,失去响应。 

五、电话会议

Lighttpd的二种方案占据了前三位,Lighttpd+法斯特CGI是性质最高的配置形式。那种办法比另一种流行方案Nginx+Mongrel的法子品质升高了高达50%!法斯特CGI的补益在此反映出来: 

  有些电话会议设施就是个迈克风加扩音器,高级一点的可以拨号扩展会议人。其实手机拨号时有个伸张通话人就可以完结类似的功能。

从而,当大家应用Mongrel的时候,一般会在前端放置Web服务器,通过HTTP
Proxy方式把请求转载给后端的Mongrel应用服务器。在那种状态下,Mongrel只处理动态请求,在运行Rails框架生成页面数据之后,把数据重临给Web服务器就可以了。然则在那种布局方案下,有一个很重点的底细被我们忽视了,Mongrel运行Rails生成的页面数据是怎么再次来到给Web服务器的呢?通过精心钻研源代码大家可以搞明白Mongrel处理Rails请求的底细: 

维护:打印卡纸是司空见惯,切忌用蛮力,仔细察看,一般厂商都会在不难卡纸的地位设计一个舱门可以抽纸。点打印没影响,看看打印列表里是否选用了刹车打印,互联网是不是衔接,是或不是有权力和打印数量的界定。有时候驱动错误会导致打印乱码十分,如若原配驱动糟糕用可以转换包容性相比好的驱动型号。高级一点的一体机都会有web设置页,可以修改很多参数,不用再对着机器按来按去的。

  • Mongrel
    Cluster的章程来布置RoR应用,不可能不说是一个傻乎乎的方案。那种方案其实一定于把n个Mongrel应用服务器捆绑起来,直接充当Web服务器,而Mongrel毕竟是一个Ruby写的服务器,无论是网络IO能力,如故静态资源的处理速度,无法和确实的Web服务器同样器重,让Mongrel直接处理静态资源和调度网络IO,会招致服务器资源毫无必要的大幅度开支,由此HAProxy也不在大家的考虑之列。 

  基本和打印机一体了。

其余Lighttpd相对于Nginx的优势在于请求和响应的接收缓冲区很大,省去数次收受和发送的开发。 

二、扫描仪

过五人对法斯特CGI谈虎色变,就像法斯特CGI就是内存泄漏,品质故障的主谋祸首,又或者嫌弃法斯特CGI太古老了,已经被淘汰掉的技巧了,其实那是一个很大的误解。法斯特CGI本质上只是一种进度间通信的商谈,就算是一个相比较古老的商议,可是依旧比HTTP协议年轻多了,HTTP协议不是仍旧现在很盛可以吗? 

三、传真机

除非当大家运用服务器端程序控制大文件下载的时候,有可能造成Lighttpd内存暴涨,例如某个用户使用100个线程并发下载JavaEye圈子的共享文件,在一直不卓殊处理的图景下,Lighttpd将全体吃下100个法斯特CGI进度送过来的10MB数据,就会即刻暴涨1GB的内存。那种情景如何做呢?其实我们也有点子让Lighttpd一点内存都不吃,
请看自己写的别的一篇文章:RoR网站如何行使lighttpd的X-sendfile成效升级文件下载品质 

  目录:

Mongrel使用StringIO对象缓存输出结果,在少数特殊的事态下会带来很大的安全隐忧。大家如若使用服务器端程序控制带权限的文本下载,某用户下载的是一个100MB的公文,该用户使用了十二线程下载工具,他开了10个线程并发下载,那么每个线程Mongrel在响应之后,都会把全副文件读入到内存的StringIO对象当中,所以总共会创立出来10个StringIO对象保存10份文件内容,所以Mongrel的内存会一下猛涨到1GB以上。而且最骇人听闻的是,即便当用户下载截止将来,Mongrel的内存都不会很快下滑,而是径直维持如此高的内存占用,那是因为Ruby的GC机制不佳,不可见即时开展垃圾回收。 

一、打印机

当Mongrel仅仅作为应用服务器的时候,那么些StringIO照旧很重大,为何?我们前边提到过了,Apache/Nginx的接收缓冲区都只开了8KB,倘若页面比较大,Mongrel就平昔不艺术一次性把数据总体推给Web服务器,必须等到Web服务器把接收缓冲区的8K数据推到客户浏览器端将来,清空缓冲区,才能接到下一个8KB的数据。那种景况下,Mongrel必须和Web服务器之间进行很多次数额传输,才能到位全部Web响应的进程,鲜明并未两遍性把页面数据总体推给Web服务器快。如果Web服务器使用Lighttpd的话,景况会不平等。当Mongrel把StringIO的多少flush出去的时候,Lighttpd是四次性全体接收下来了,不须求反复并行,由此Lighttpd+Mongrel的RoR网站的实际上速度要快于Apache/Nginx+Mongel。 

  最应当被淘汰的配备,几乎连接会卡纸,以及种种信号错误。传输彩色扫描件加印花打印完全可以落成平等的功能。

RoR的布局方案可谓充足多彩,有Apache/法斯特cgi方式的,有Nginx/Mongrel格局的,还有lighttpd/法斯特cgi格局,也有人利用HAProxy/Mongrel,各种计划形式都是众说纷纷,令人搞不清楚哪一类方法更好一些。我的这篇小说就是愿意整合大家运营JavaEye网站一年多的话的经历(通过总括Rails的production.log,JavaEye网站如今每日处理超过70万200
OK状态的Ruby动态请求,应该是境内当下负载量最大的RoR应用了),为我们剖析RoR布置方案的上下,辅助我们接纳切合自己生产环境的RoR布署格局。 

  1. 序章
  2. 人际关系
  3. 工具准备
  4. 微机保安
  5. 网络序列
  6. 弱电系统
  7. 外设相关
  8. 音信连串
  9. 服务器相关
  10. 机房建设
  11. 其他

5、HAProxy 

四、投影仪

1、Apache
2.2 

耗材:原装正品肯定没难题,包容产品的身分就犬牙相制了看预算数据。

Nginx内置了赏心悦目的HTTP
Proxy和法斯特CGI帮助,由此即能够连接Mongrel,也得以连接法斯特CGI服务器,在那二种情景下,Nginx默许的拔取应用服务器再次来到数据的Buffer
Size也唯有区区的8KB,然而你可以活动设置更大Buffer Size。 

HAProxy并不是一个Web服务器,他既不可以处理静态资源,也不可能出任浏览器和应用服务器之间的缓冲桥梁,他只是担任了一个伸手分发的软件网关成效。ThoughtWorks公司的RubyWorks接纳采用HAProxy

唯恐过多少人看了自身的稿子,对结论认为很奇异,既然Lighttpd+法斯特CGI那样好,为啥那么多个人都尊重Mongrel,否定法斯特CGI呢?我想,不外乎多少个原因: 

HTTP协议要比FastCGI协议普及的多,因而通过HTTP方式的监控工具,群集管理工具,集成其余服务的工具都是一抓一大把。而援救法斯特CGI的第三方工具就少得很是了。你要玩很多花活出来,用法斯特CGI的话,就在所难免得温馨支付相应的工具,这自然不如使用Mongrel方便啦。 

二、分析应用服务器的处理方式 

稍微细心的同班也许会生出一个新的疑团?你究竟,之所以Lighttpd跑RoR品质最好,仍然在于Lighttpd接收数据不限定缓冲区的轻重,而Apache/Nginx限定了缓冲区大小所至。那怎么Nginx要限量呢?Lighttpd假若不限量以来,会不会招致Lighttpd内存爆掉? 

Lighttpd主要用途之一就是提供高品质的法斯特CGI帮衬的Web服务器,所以必须为法斯特CGI量身打造。Lighttpd端承担的载荷越高,就越能立竿见影的加速法斯特CGI执行进程。其实大家多少心算一下,假使Lighttpd前面挂1000个FastCGI进度,每个法斯特CGI进度同时送过来50KB的页面数据,Lighttpd就是成套吃下去,也可是只消耗50MB的内存而已,而实在1000个法斯特CGI进度足以扶助每一日上千万的大网站了。 

HAproxy +
Mongrel并限量链接数为1,则是一种祥和、保守的布署格局,就算在此处品质不出众,不过稳定性格外好。 

Apache/Nginx是针对每个应用服务器连接分配固定Size的Buffer,而且默认只开8KB,这一个Size对于明天网页动辄50-100KB的动静的话,显得过分保守,假设应用服务器的回来数据无法三遍填满Web服务器的Buffer,那么就会促成应用服务器和Web服务器之间多次数额传输,那对于RoR网站的特性会导致部分相关的熏陶,我们在背后会详细的辨析。 

 

Lighttpd是海内外网络排行第五的Web服务器,也是近两年来上升最快的Web服务器,更加是很受局部出名Web
2.0大网站的迎接,例如wikipedia的某些服务器,youtube的视频服务器,在境内,豆瓣网站和JavaEye网站都是Lighttpd的相对拥护者。在处理静态资源方面,Lighttpd质量远远领先Apache。 

Apache
2.2既援助HTTP
Proxy格局连接后端的Mongrel应用服务器,也足以由此mod_fastcgi/mod_fcgid来连接法斯特CGI应用服务器:当以HTTP
Proxy形式连接Mongrel的时候,Apache接收Mongrel重返的页面数据的buffer
size最大只可以开到8KB(默许是4KB或者8KB),因而当页面数据超越8KB的时候,可能须要Apache和Mongrel之间发生频繁相互;当以mod_fastcgi格局连接法斯特CGI应用服务器的时候,接收再次回到数据的Buffer
size依然只有8KB而已,要是应用mod_fcgid,那么buffer
size为64KB,有了很大的革新。 

当法斯特CGI搭配Lighttpd的时候,大家清楚Lighttpd会两遍性照单全收法斯特CGI送过来的页面数据,所以法斯特CGI进程并不会被挂住。如果大家相比较一下Lighttpd搭配Mongrel和法斯特CGI会发现,Lighttpd搭配法斯特CGI质量最好,为啥呢? 

Nginx限制Proxy
Buffer
Size其实也有道理,因为Nginx并不是为RoR量身打造的Web服务器,Nginx最常见的用处依旧高负载大访问量的代理服务器,在Nginx主要的运用场所,如若不做那样的限制,那Nginx端的资源消耗就杰出高了,有可能会拖累所代理的劳务进程。 

终极,与Nginx相关的三种方案都排在了该榜的最后,由于Nginx的反向代理负载均衡贫乏一些高档的性状以及Rails本身的特征而造成其不吻合单独接纳在Rails程序的布署上: 

浏览器的HTTP访问请求首先达到Web服务器,充当Web服务器的一般是Lighttpd/Apache/Nginx,即使访问请求包罗静态资源,那么Web服务器就会一直从本土硬盘读取静态资源文件,例如图片,JavaScript,CSS等等,再次来到给客户端浏览器;即使访问请求是动态请求,那么Web服务器把URL请求转载到后端的法斯特CGI/Mongrel来拍卖,等到法斯特CGI/Mongrel处理完请求,将扭转的页面数据再次来到给Web服务器,最终Web服务器把页面数据发送到客户端的浏览器。 

当大家以法斯特CGI方式运行Rails应用服务器的时候,每个法斯特CGI进度都是单线程运行的,考虑到Rails本身不是线程安全的,所以和Mongrel运行Rails的实际效果是一模一样的,都是每个进程只好跑一个Rails实例。但是法斯特CGI在Rails生成页面数据重临给Web服务器的不二法门和Mongrel截然差异: 

里头Lighttpd+法斯特CGI是性质最佳方案,而Apache+法斯特CGI是性质最差方案。 

而Swiftiply的章程也显示出了强大的习性,应该是得益于它的“让后端主动连接到Swiftiply”的那种特其他构造。 

4、Litespeed 

ShiningRay 写道

在谈论安插方案之前,先让我们看一下RoR网站计划的概括架构: 

  • 二进制协议,无需HTTP的解析
  • 与前者可以创制持久链接
  • 尚无锁和上下文切换的支出

而Mongrel就概括了,gem
install mongrel安装落成,mongrel_rails
start启动,何人不会?毕竟绝半数以上开发人士和安顿人士不是王牌,他们深谙哪一类形式,自然就会尊敬哪个种类方法。 

一、介绍Web服务器 
Web服务器的重点功用有两点:一是处理静态资源,二是将动态请求分发到后端应用服务器,然后接受后端应用服务器生成的页面数据,将其回到浏览器,充当了一个音信沟通的桥梁效用,在本文当中大家根本解析后者的效果。 

在PHP/ASP/JSP流行以前,法斯特CGI曾经格外普及,只但是那一个时期的法斯特CGI程序是用C语言编写的,写起来太费事,而PHP/ASP/JSP相比较之下,写起来就太简单了,所以法斯特CGI就慢慢被丢到了历史的故纸堆里面。但是近年来两年来,由于Ruby和Python的便捷Web开发框架的强势崛起,法斯特CGI就像是又咸鱼翻身了。 

1、Mongrel 

  • 缺乏到后台服务器端的链接数限制的力量,那致使了Mongrel在接受多量伸手时将时间消耗在上下文切换和锁的争用上。
  • 缺少建立到后台服务器端的恒久链接的能力,那造成了在链接的打开、建立、关闭上消费了附加的开发。

Apache是大地网络拔取最广泛的Web服务器,但在处理静态资源文件上却不是性质最理想的Web服务器,但是貌似景观下,静态资源的访问并不是RoR网站的瓶颈,因而也不必过度在意那或多或少。 

一般的话,程序员肯定是尽量有限支撑开发条件和布局环境的一致性,防止安顿到生育环境出现不测的结局。既然在支付条件精晓了Mongrel,当然更是愿意在生产环境使用Mongrel,而不乐意碰没有接触过的Lighttpd。 

2、Nginx 

Lighttpd+FastCGI  >  Lighttpd+Mongrel 
>  Nginx+Mongrel  >  Apache+Mongrel  >  Ngignx+FastCGI  > 
Apache+FastCGI

Mongrel使用了Ruby的用户线程机制来促成四线程并发,并且应用了一个fastthread补丁,革新了Ruby用户线程的一路互斥锁难点。可是Ruby并不是当地线程,大家也绝不对Mongrel的互连网IO负载能力抱有哪些不切实际的臆度。同时Rails本身也不是线程安全的,因而Mongrel在执行Rails代码的进度中,完全是加锁的状态,那和单进度其实也从没太大差别。 

澳门美高梅手机网站 1 

Mongrel本身可以一向充当Web服务器,但在那种气象下质量并不会好。因为Mongrel唯有HTTP协议的解析部分是用C语言编写的,其他所有代码都是纯Ruby的。在处理静态资源下载上边,Mongrel的贯彻格局非凡低功效,他只是简单的以16KB为单位,依次读入文件内容,再写出到互连网Socket端口,其性质远远比不上传统的Web服务器调用操作系统的read()和write()库已毕的静态文件下载速度,若是和现代Web服务器完结的sendfile格局的“零拷贝”下载相比较,大约就是自愧不如。 

引用

这些StringIO对象实际很重点!它充当了一个出口缓冲区的功用,我们着想一下,当Mongrel作为单身的Web服务器的时候,如果Rails生成的页面比较大,而客户端浏览器下载页面的速度又比较慢,假如没有那个StringIO对象,会生出哪些难点?
Rails线程在履行render方法的时候就会被挂住!同步互斥锁没有解锁,Mongrel再也不可能处理下一个动态请求了。 

不论Mongrel照旧法斯特CGI,都可以完美的运作Rails服务器,可是她们在和Web服务器之间的多少传输方式上设有一些差异,而正是这么些出入,对配置格局有重点的熏陶: 

Nginx是俄罗斯人出品的轻量级Web服务器,在拍卖静态资源方面,据说品质还多少当先Lighttpd的10%,而且资源消耗更小。 

鉴于Litespeed在运行RoR方面并不曾表现出比Lighttpd优越之处,而且依然收费软件,集团版本售价在双核CPU方面每年收费499比索,并且也不开源,因而大家就不再把关心点放在Litespeed上边。当然Litespeed收费也不是白收的,它提供了这么些好用的按照Web的服务器管理界面,以及尤其多的安全性方面的设置参数。 

Lighttpd既支持HTTP
Proxy连接Mongrel,也协助法斯特CGI格局,可是Lighttpd的法斯特CGI接济在享有流行的Web服务器当中或者是最理想的,所以用法斯特CGI的网站都很喜欢Lighttpd。Lighttpd在收取后端应用服务器重回数据的不二法门上和Apache/Nginx有越发大的分别: 

从RoR的布署形式来看,主要由前端的Web服务器和后端的应用服务器构成:前端的Web服务器可以应用Apache,Lighttpd,Nginx和Litespeed,后端的应用服务器可以利用法斯特CGI和Mongrel,上面大家分门别类的牵线和剖析: 

1) 
Mongrel接收到请求将来,启动一个ruby线程解析请求音讯 
2) 
加锁,调用Rails Dispatcher启动Rails框架 
3) 
Rails处理达成,创造一个StringIO对象,把Rails生成的页面数据写入到StringIO中 
4) 
解锁,把StringIO的数据flush到Web服务器 

眼前大家说到Mongrel自己开了出口缓冲区,而法斯特CGI则完全不开任何缓冲区,当Rails执行render方法的时候,法斯特CGI实际执行的是FCGI::Stream.write方法调用,直接把数据写给Web服务器了。此时如若Web服务器是Apache/Nginx,会发出哪些? 

2、FastCGI 

透过地点的解析,大家知道Mongrel在选用Lighttpd的时候,可以达标最快的RoR执行进程,不过Lighttpd当前的1.4.18版本的HTTP
Proxy的载荷均衡和故障切换成效有部分bug,因而一般很少有人会利用那种办法。大部分人都会接纳Mongrel搭配Apache2.2或者Nginx,不过相比大家地点做分析的那么,Apache/Nginx的Buffer
Size实在是一个很看不惯的界定,更加是Apache只可以最大开8KB的Buffer,由此我提出利用Nginx搭配Mongrel,并且把Nginx的Proxy
Buffer
Size设置的大一些,比如说设置为64KB,以确保大多数页面输出结果能够四遍性flush到Web服务器去。 

Mongrel首先自己会用StringIO缓冲页面数据,然后推送给Lighttpd未来,Lighttpd也在内存当中缓冲了一份页面数据,造成了永不须要的double
buffer的支出。那本来不如法斯特CGI不做任何缓冲,间接推给Lighttpd品质来得高,内存消耗少了。 

一、Lighttpd+法斯特CGI配置起来比较专业,而Mongrel配置不难 

三、Mongrel协理HTTP协议,因而无论是监控仍旧集成其余服务都相比较不难,不难玩出越来越多的花活。 

也许你会认为不太可能下载100MB那么大的附件,但是以JavaEye网站为例,圈子的共享文件最大允许10MB,只要用户在多台机械上边,每台机器开100个线程下载圈子共享文件,每个Mongrel的内存占用都会立马当先1GB,用持续几分钟,服务器的情理内存就会被耗尽,网站失去响应。那么些毛病非凡简单被别有用心的黑客利用,攻击网站。那也是JavaEye网站为何一直毫无mongrel的原委之一。 

只要我们利用mod_fastcgi模块,那么Apache的接收缓冲区就是8KB; 
设若大家使用mod_fcgid模块,那么Apache的接收缓冲区就是64KB;(mod_fcgid是中国人支付的替代mod_fastcgi的开源项目,在Apache社区很受欢迎,何人敢说中国人只是开源“消费”国?) 
一经大家使用Nginx服务器,那么默许的接收缓冲区就是8KB,可是足以改得更大; 

最终,假设您看了那篇文章,想摩拳擦掌的设置一把Lighttpd+法斯特CGI的话,那么自己的那篇文章就是最好的装置指南: 

在Linux平台上设置和配置Ruby on
Rails详解

Lighttpd+Thin的点子的性能列第四位,这点就像是出乎意想不到,但事实上是因为Lighttpd
1.5支撑对HTTP后端建立HTTP
KeepAlive链接。在对后端单独的测试中,小并发下的Thin的KeepAlive测试品质并不比法斯特CGI差,同时Thin完成了非阻塞
IO,而法斯特CGI则是阻塞式的。相反,HAproxy和Nginx则都不扶助HTTP
KeepAlive。 

我们的方案分析到那边,大家应该团结心中有结论了,Lighttpd+法斯特CGI是性质最佳,服务器资源消耗最少的RoR安插方案,事实上近日RoR网站安插使用最多最风靡的也是Lighttpd+法斯特CGI方式,而JavaEye网站,自然也是那种方法的陈设。因而我们得以对种种方案展开一个质量优劣的排队: 

发表评论

电子邮件地址不会被公开。 必填项已用*标注