
Apache vs Nginx
他们都是web办事器,都能伺服静态文件。Apache加倍风行,拥有更多的功能;Nginx则相对功能少、小巧、快速。
Apache 和 Nginx都能在盒子外(out-of-the-box)伺服Ruby办事器,为此你须要应用别的的插件来组合他们。
Apache 和 Nginx都能作为反向代劳,就是说他们可以或许把进来的HTTP请求转发给其他办事器,接着把该办事器的响应转给客户端。
Mongrel以及其他production模式的办事器vs WEBrick
1,在本身的过程空间中加载Ruby app.
2, 创建一个TCP socket,许可它可以和外部世界(例如Internet)通信。Mongrel在这个socket上监听HTTP请求,并把请求数据转发给Ruby app。
然后Mongrel已经不再保护了,其他替代办事器是:
- Phusion Passenger
- Unicorn
- Thin
- Puma
- Trinidad (JRuby only)
- TorqueBox (JRuby only)
接下来我会讲一讲他们和Mongrel的差别
WEBrick和Mongrel很像,差别如下:
- webrick不合实用于production模式。WEBrick美满是用ruby写的,Mongrel以及其他ruby app 办事器,部分ruby部分C,主如果ruby,但它的HTTP 解析器为了机能是用C写的
- WEBrick比较慢且不敷强健,有广泛知道的内存泄漏问题,以及HTTP解析问题。
- 因为WEBrick是ruby默认自带的,所以WEBrick经常用于development模式下作为默认办事器,而其他办事器则须要别的安装。不建议在production模式下是用WEBrick办事器,固然因为某些原因,Heroku选择了WEBrick作为默认办事器,他们以前是应用的Thin,但我不知道他们为什么换到了WEBrick
app办事器世界
- 当前所有的Ruby app 办事器都是http类型的,一些办事器直接将80端口裸露到internet中,另一些则没有
- 裸露80端口的:Phusion Passenger, Rainbows
- 没有直接裸露的:Mongrel, Unicorn, Thin, Puma. 这些办事器必发兵须置于反向代劳办事器之后,比如Apache and Nginx。
- 我不懂得Trinidad and TorqueBox,,所以就忽视了
Mongrel是ruby实现的应用办事器,具体来说:
3,Ruby app返回一个描述HTTP响应的对象,Mongrel将其转换为真正的HTTP响应字节,并发还到socket中。
为什么竽暌剐些办事器必须置于反向代劳之后呢?
- 一些办事器的一个过程在同一时光只能处理一个请求,如不雅你想同时处理两个请求,你就须要启动多个办事器实例,都伺服同一个Ruby app。这种多过程app 办事器称为app办事器集群(比如Mongrel Cluster, Thin Cluster)。你必须启动Apache 或者 Nginx,给集群做反向代劳,Apache/Nginx会处理好集群中不合应用实例间的分发工作。(更多内容拜见章节 "I/O并发模型").
- web 办事器可以缓存要乞降响应。有些客户端的发送数据、吸法术据的速度迟缓,web办事器可以隔离app server和慢客户端。你当然不欲望app server 在等待客户端收发数据时什么也不干。Apache 和 Nginx 善于同时很多工作,因为他们是多线程或者基于事宜的。
- 大年夜多半的app server可以伺服静态文件,但不是很善于。Apache 和 Nginx的速度更快。
- 人们经常直接应用 Apache 或者 Nginx伺服静态文件,而不会处理前向请求( forward requests ),这是比较安然的策略。 Apache 和Nginx足够聪慧,可以保护app server远离恶意请求。
为什么竽暌剐些办事器可以直接裸露在Internet中?
- Phusion Passenger和其他app server不一样,个一一个比较特点是可以融入其他办事器。
- Rainbows的作者公开指出,Rainbows可以直接裸露在internet中。他十分不会在解析HTTP过程中遭受进击。still, the author provides no warranty and says that usage is at own risk.
Application 办事器比较
在这一章中,我会比较我提到的大年夜多半办事器,但不包含Phusion Passenger。Phusion Passenger和其他的不一样,我会零丁开出一章。我还会忽视Trinidad 和 TorqueBox,因为我对他们不是很懂得。只有你用到JRuby的时刻才会涉及到他们。
- Mongrel 是块裸露的石头。像之前提到的,Mongrel仅仅是单线程、多过程,所以它只用于集群(cluster)中。没有过程监控,意味着如不雅集群一一个过程崩溃了,则须要手动重启。人们须要应用额外的过程来照看Mongrel,比如Monit 和 God。
- Unicorn 是大年夜Mongrel中fork出来的。支撑监控必定命量的的过程:如不雅一个过程崩溃了,则会被主过程主动重启。它能让所有过程都监听同一个共享的socket,而不是每个过程独自应用零丁的socket。这会简化反向代劳的设备。像Mongrel一样,也是单线程、多过程。
- Thin 应用EventMachine库,实现基于事宜的 I/O model。它并不是应用Mongrel的HTTP解析器,没有基于Mongrel。它的集群节点没有过程监控,所以你须要去监控过程是否崩溃。每个过程监听独自的socket,不像Unicorn一样共享socket。理论上来说,Thin的I/O模式许可高并发,这也是Thin被应用的大年夜部分场合。一个Thin的过程只能处理一个并发请求,所以你还须要集群。关于这个古怪的性质,更多内容拜见“I/O并发模型”。
- Puma 也是大年夜Mongrel中fork出来的,但和Unicorn不一样的是,Puma被设计成多过程的。今朝不支撑集群。你须要特别确认的是你能实现多核( You need to take special care to ensure that you can utilize multiple cores )。 更多内容拜见“I/O并发模型”。
推荐阅读
【编辑推荐】Android源码下载:QQ第三方登录demoAndroid源码:浏览器应用 adnroid webview demoAndroid源码下载:屏幕画笔Demo一个Demo展示Storyboard的强大年夜小Demo大年夜常识-经由过程控制Button仪羁啻进修Andro>>>详细阅读
本文标题:ruby rails相关的常见服务器
地址:http://www.17bianji.com/lsqh/39878.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示