简介
与其他语言的产品类似,使用Ruby开发的应用程序可以通过众多可用的Web服务器之一在万维网上公开。虽然它们每一个都具有独特的品质,并提供不同的可能性来设计完美的解决方案,但这些服务器有一个共同点:与您的应用程序对话的方式(界面)称为Rack 。
在这篇DigitalOcean文章中,我们将比较支持基于Ruby的Web应用程序的各种流行的Web服务器。然而,在深入讨论之前,我们将在熟悉机架specification和中间件集合的基础上,介绍上述过程背后的工作机制。
如果您对中间件这个有点令人困惑的术语的确切含义感到好奇,您可能会喜欢在Wikipedia.上阅读一些关于它的内容
♪机架
如今,在任何编程语言和框架中,给Web服务器与Web应用程序和其他技术混合搭配的机会是非常强大的、必要的,而且确实是按需进行的。一个非常基本的例子是development,测试和/或生产需要不同的环境。
为了实现这一目标,在2007年,Christian NeukirchenRubyRack推出了他当时所称的模块化[released](http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/251804)Web服务器接口
。如今,它被众多的Web服务器和Web应用程序开发框架所采用,如Espresso、Mack、Ruby on rails、Sinatra等。
尽管有跨[编程]语言和领域的命名约定和分类解释,但接口[应用程序]的规范即使不是同源的,也是非常相似的(尽管不像PythonRack--Rack和其他应用程序的灵感所在),Rack here不仅是一个规范,而且--可能有点混淆--也是一个中间件应用程序)。
Rack_Midleware_(gem),实现Rack规范 ,其工作原理是将传入的Http请求划分为不同的流水线阶段,并分片处理,直到从您的Web应用程序(控制器)发回响应。它有两个不同的组件:处理程序和适配器,分别用于与Web服务器和应用程序(框架)通信。
关于对比
在这个比较中,我们将讨论一些流行的和可用的Web应用程序服务器的选择。我们将讨论是什么让一个人脱颖而出,以及他们在某些方面与其他人有何不同。这里的目的是使您能够更好地全面了解,以便能够将服务器与应用程序的需求相匹配,从而制定所需的解决方案。
Web服务器(按字母顺序排列)
Phusion Passenger:FAST Web服务器&app服务器
Passenger Today已经成为Ruby on rails应用程序的推荐服务器。它是一个成熟的、功能丰富的产品,旨在满足应用程序部署的必要需求和领域,同时极大地简化设置和入门程序。通过直接集成在apache 和** nginx** (前台)web服务器中,省去了传统的中间服务器架构。出于这个原因,它在Ruby(Rails)社区中也被称为mod_rails/mod_ack。
注意事项
Passenger提供了使用_Same_服务器上托管的多个 应用程序的能力。
它能够处理慢客户端。Passenger的请求和响应被完全缓冲,使其自身免受以阻塞系统资源为目标的攻击。
Passenger非常受欢迎,并在许多[生产]场景中广泛使用。因此,可以联系并找到专家,也可以在在线社区中解决您的问题。它还拥有一家专门开发该产品的公司,为感兴趣的人提供高效的商业support]。
它的开源版本具有多进程单线程操作模式,而企业版可以配置为单线程或多线程工作。
对于企业用户,Passenger提供了一些更高级的功能,例如:并发和多线程、整体部署、资源控制和限制等。
欲了解更多乘客信息,可访问其官网https://www.phusionpassenger.com/.乘客企业号,请访问同一页面上的enterprise部分。
Puma:一种面向Ruby的现代并发Web服务器
Puma是一款机架专属的Ruby Web应用服务器。它的产生和诞生在很大程度上受到了遗留Mongrel Web server,]的启发,在它发布的那段时间里,它带来了很多革命性的变化,并影响了未来许多代(服务器)为Ruby应用程序提供服务的方式。彪马的开发人员埃文·菲尼克斯,决定向前推进)将Mongrel的操作结构转变为仅在Rack上操作(从而消除了导致性能下降的复杂性),并将应用程序设计为支持_真并行_,这允许并发(下面进一步解释)。
注意事项
无论是在大小还是执行资源消耗方面,该应用程序占用的空间都非常小。
Puma有几种工作模式:它允许您设置它可以用来执行其工作的最小和最大线程的数量,还可以在集群模式下工作,在这种模式下,您可以使用分叉进程来并发处理请求。
它基于Mongrel的解析器--以及对其代码库的大量重写。
尽管它被设计为Rubinius的首选服务器
,但它也能很好地与JRuby一起工作。
它带有一个简单但重要的配置选项集,可以在许多方面调整Web服务器以满足生产和开发需求。
尽管彪马不直接支持开箱即用的托管多个应用程序,但它有一个Jungle:(彪马即服务)工具来帮助满足多个应用程序的生产需求。
要了解彪马的更多信息,可以访问其位于https://github.com/puma/puma的官方代码库,在那里您还可以找到配置和入门的说明。
瘦:小巧、快速、有趣的HTTP服务器
_Thin_是一个非常流行的应用服务器,它自称是最安全、稳定、快速和可扩展的Ruby Web服务器
。它仍然在积极开发,它基于三个Decision Ruby库,因此也是它们的产品:
- Mongrel解析器
- Event Machine网络I/O库
- 机架中间件
注意事项
瘦HTTP服务器旨在与实现Rack规范的任何框架一起工作,该规范目前涵盖了大多数框架。它通过直接加载机架配置文件来实现这一点。
作为一种基于事件/机器的应用服务器,Thin能够处理长时间运行的请求,这与其他一些选择不同,它不需要面向前端的反向代理解决方案的帮助。
要了解更多关于Thin的信息,您可以访问其官方网站http://code.macournoyer.com/thin/。
Unicorn:支持快速客户端和Unix的机架式HTTP服务器
Unicorn是一个非常成熟的[Ruby]Web应用服务器,以至于它被改编成也可以与Python一起使用。然而,它功能齐全,它通过设计否认试图做所有事情:独角兽的主体正在做需要做的事情[由Web应用服务器],并将其余的责任委托给那些做得更好的人。
注意事项
独角兽的主进程根据您的要求生成工作进程来服务于请求。此过程还监视工作进程,以防止与内存和进程相关的交错问题。对于系统管理员来说,这意味着如果(例如)完成任务花费的时间太长或出现内存问题,它将终止一个进程。
如上所述,Unicorn委派任务的领域之一是使用操作系统进行负载平衡。这使得请求不会堆积起来,而不是针对产生的忙碌的工作人员。
与Nginx非常相似,使用Unicorn,您可以执行和部署您的应用程序(考虑更新/升级),而无需中断活动的连接和客户端。
它的一些其他高级功能:
- 所有工作人员在给定的隔离地址空间内运行,一次服务一个请求。
- BEFORE_FORK 和** AFTER_FORK** 钩子,用于处理派生进程。
- 能够与copy-on-write友好的内存管理配合使用,以节省内存。
- 能够监听多个接口。
要了解更多关于独角兽及其强大功能的信息,可以访问其官方网站http://unicorn.bogomips.org/.