16

有很多关于 Puma 以及它如何比 Unicorn 更快的讨论。但是,他们也提到它更适合 JRuby 和 Rubinius 的实例。

我的问题:带有 Ruby 1.9.3 的 Rails 3.2 应用程序怎么样?独角兽还是彪马?

4

1 回答 1

13

unicorn vs puma 有一篇很棒的文章

http://ylan.segal-family.com/blog/2013/05/20/unicorn-vs-puma-redux/

Unicorn 是一个 Rack HTTP 服务器,它使用分叉进程同时处理多个传入请求。

  1. 流程管理:独角兽将收获并重新启动因应用程序损坏而死亡的工人。无需自己管理多个进程或端口。Unicorn 可以生成和管理您选择扩展到后端的任意数量的工作进程。
  2. 负载平衡完全由操作系统内核完成。请求永远不会堆积在繁忙的工作进程后面。
  3. 不关心您的应用程序是否是线程安全的,工作人员都在自己的隔离地址空间中运行,并且一次只为一个客户端提供最大的健壮性。
  4. 通过 Rack 包装器支持所有 Rack 应用程序,以及 Ruby on Rails 的 pre-Rack 版本。
  5. 通过 USR1 信号内置重新打开应用程序中的所有日志文件。这允许 logrotate 通过重命名而不是活泼和缓慢的 copytruncate 方法自动快速地旋转文件。Unicorn 还采取措施确保来自一个请求的多行日志条目都保留在同一个文件中。
  6. nginx 风格的二进制升级而不会丢失连接。您可以升级 Unicorn、您的整个应用程序、库甚至您的 Ruby 解释器,而无需删除客户端。
  7. before_fork 和 after_fork 挂钩,以防您的应用程序在处理分叉进程时有特殊需求。当“preload_app”指令为假(默认)时,不需要这些。
  8. 可以与写时复制友好的内存管理一起使用以节省内存(通过将“preload_app”设置为true)。
  9. 能够监听包括 UNIX 套接字在内的多个接口,每个工作进程还可以通过 after_fork 挂钩绑定到一个私有端口,以便于调试。
  10. 简单易用的 Ruby DSL 进行配置

    1. 即时解码分块传输,从而允许实现上传进度通知,并能够通过 HTTP 传输任意基于流的协议。

对于 Puma(所谓的服务器杂种的较新版本)

Puma 是一个用于 Ruby Web 应用程序的简单、快速且高度并发的 HTTP 1.1 服务器。它可以与任何支持 Rack 的应用程序一起使用,并且被认为是 Webrick 和 Mongrel 的替代品。它被设计为 Rubinius 的首选服务器,但也适用于 JRuby 和 MRI。Puma 旨在用于开发和生产环境。

Puma 最喜欢速度和并行性

如果您想查看速度比较,那么 puma 是最好的。

有关更多信息,您可以查看http://puma.io/

谢谢

于 2013-07-31T08:52:28.173 回答