RubyWeb应用程序的(机架)Web服务器比较

来自菜鸟教程
跳转至:导航、​搜索

介绍


与其他语言的产品类似,使用 Ruby 开发的应用程序可以通过许多可用的 Web 服务器之一向万维网公开。 虽然它们中的每一个都具有独特的品质,并为设计完美解决方案提供了不同的可能性,但这些服务器有一个共同点:一种与您的应用程序通信的方式(接口),称为 Rack

在这篇 DigitalOcean 文章中,我们将比较各种支持基于 Ruby 的 Web 应用程序的流行 Web 服务器。 然而,在深入研究之前,我们将介绍上述过程背后的机制,因为我们熟悉了 Rack 规范 和中间件集合。

如果您对中间件这个有点令人困惑的术语的确切含义感到好奇,您可能会喜欢在 Wikipedia 上阅读一些关于它的内容。

架子


如今,为 [给开发人员] 提供将 Web 服务器与 Web 应用程序和其他技术混合搭配的机会是任何编程语言和框架的一个非常强大、必要且确实需要的方面。 一个非常基本的例子是开发、测试和/或生产需要不同的环境。

为了实现这一目标,2007 年 Christian Neukirchen 发布了 Rack,当时他称之为“模块化 Ruby 网络服务器接口”。 如今,它已被众多 Web 服务器和 Web 应用程序开发框架所采用,例如 Espresso、Mack、Ruby on Rails、Sinatra 等。

尽管跨 [programming] 语言和领域的命名约定和各种解释,接口 [applications] 的规范非常相似,即使不是同源的(尽管与 Python 的 WSGI 不同——Rack 和其他人的灵感,Rack 这里是不仅是一个规范,而且——也许有点令人困惑——还有一个中间件应用程序)。

Rack middleware (gem),实现了 Rack 规范,工作原理是将传入的 HTTP 请求分成不同的流水线阶段,并分段处理它们,直到它发回响应来自您的 Web 应用程序(控制器)。 它有两个不同的组件:处理程序和适配器,分别用于与 Web 服务器和应用程序(框架)进行通信。

关于比较


在这个比较中,我们将讨论一些当今流行且可用的 Web 应用程序服务器选择。 我们将讨论是什么让一个与另一个脱颖而出,以及它们在某些方面与其他方面有何不同。 此处的目的是让您有更好的整体理解,以便能够将服务器与您的应用程序的需求相匹配,以制定您需要的解决方案。

Web 服务器(按字母顺序)


Phusion Passenger:快速的网络服务器和应用服务器


如今,Passenger 已成为 Ruby on Rails 应用程序的推荐服务器。 它是一款成熟、功能丰富的产品,旨在满足应用程序部署的必要需求和领域,同时大大简化设置和启动程序。 它通过直接集成在 ApacheNGINX(前端)Web 服务器中消除了传统的中间人服务器设置架构。 由于这个原因,它在 Ruby (Rails) 社区中也被称为 mod_rails / mod_rack。

笔记


乘客提供了使用托管在 相同 服务器上的 多个 应用程序的能力。

它能够处理慢速客户端。 对Passenger 的请求和响应是完全缓冲的,使其自身免受这种针对阻塞系统资源的 攻击 的影响。

乘客在许多[生产]场景中非常受欢迎并广泛使用。 因此,可以联系并找到专家,并在在线社区中解决您的问题。 它还有一个专门的公司开发该产品,为有兴趣的人提供高效的商业支持

它的开源版本具有多进程单线程操作模式,而企业版可以配置为单线程或多线程工作。

对于企业用户,Passenger 提供了一些更“高级”的特性,例如:并发和多线程、大规模部署、资源控制和限制等。

如需了解Passenger的更多信息,您可以访问其官网https://www.phusionpassenger.com/。 对于客运企业,请访问同一页面上的企业部分。

Puma:Ruby 的现代并发 Web 服务器


Puma 是 Rack 独有的 Ruby Web 应用服务器。 它的创建和诞生深受传统 Mongrel Web 服务器 的启发,它在发布期间发生了很大变化,并影响了 Ruby 应用程序在未来几代(服务器)中的服务方式。 Puma 的开发人员 Evan Phoenix 决定向前推进,将 Mongrel 的操作结构转变为仅在 Rack 上操作(从而消除导致性能下降的复杂性)并设计应用程序以支持 真正的并行性 ,它允许并发(下面进一步解释)。

笔记


该应用程序的占用空间非常小,无论是在大小上还是在执行资源消耗方面。

Puma 有几种工作模式:它允许您设置它可以用来完成其工作的最小和最大线程的数量,并且还可以在集群模式下工作,您可以使用分叉进程同时处理请求。

它基于 Mongrel 的解析器——并对其代码库进行了大量重写。

尽管被设计为 Rubinius 的“首选服务器”,但它也适用于 JRuby。

它带有一个简单但重要的配置选项集,可以以多种方式使 Web 服务器适应生产和开发需求。

尽管 Puma 不直接支持开箱即用地托管多个应用程序,但它具有 Jungle:一种(Puma 即服务)工具,可帮助满足多个应用程序的生产需求。

要了解有关 Puma 的更多信息,您可以访问位于 https://github.com/puma/puma 的官方代码存储库,您还可以在其中找到配置和入门说明。

Thin:小巧、快速、有趣的 HTTP 服务器


Thin 是一个非常流行的应用服务器,它声称自己是最“安全、稳定、快速和可扩展的 Ruby Web 服务器”。 它仍在积极开发中,基于三个决定性的 Ruby 库,因此是其产品:

  • Mongrel 的解析器
  • 事件机器网络 I/O 库
  • 机架中间件

笔记


瘦 HTTP 服务器旨在与任何实现 Rack 规范的框架一起工作,该规范涵盖了当今的大多数。 它通过直接加载机架配置文件来做到这一点。

作为基于事件/机器的应用程序服务器,Thin 能够处理长时间运行的请求,这与其他一些选择不同,无需前端反向代理解决方案的帮助。

要了解有关 Thin 的更多信息,您可以访问位于 http://code.macournoyer.com/thin/ 的官方网站。

Unicorn:用于快速客户端和 Unix 的 Rack HTTP 服务器


Unicorn 是一个非常成熟的 [Ruby] Web 应用程序服务器,以至于它也适用于 Python。 它功能齐全,但是,它拒绝通过设计尝试做所有事情:Unicorn 的负责人正在做需要做的事情 [由 Web 应用程序服务器],并将其余的职责委托给那些做得更好的人。

笔记


Unicorn 的主进程会根据您的要求生成工作人员来服务请求。 此过程还监视工作人员,以防止与内存和进程相关的惊人问题。 对于系统管理员来说,这意味着如果(例如)完成任务需要太多时间或发生内存问题,它将终止进程。

如上所述,Unicorn 委派任务的领域之一是使用操作系统进行负载平衡。 这允许请求不会堆积在产生的忙碌工作人员上。

与 NGINX 非常相似,使用 Unicorn,您可以执行和部署您的应用程序(考虑更新/升级),而不会丢失活动连接和客户端。

它的一些其他高级功能:

  • 所有工作人员都在给定的隔离地址空间内运行,一次服务一个请求。
  • before_forkafter_fork 钩子用于处理分叉进程。
  • 能够与 copy-on-write 友好的内存管理一起使用以节省内存。
  • 能够监听多个接口。

要了解更多关于 Unicorn 及其强大功能的信息,您可以访问位于 http://unicorn.bogomips.org/ 的官方网站。

提交人: [[“%3Ca|https]] ://twitter.com/ostezer [[“%3C/a|”>操作系统]] 泰泽