部署 Rails 到底该选择什么 server

hxh1246996371 · 2015年08月10日 · 最后由 imwildcat 回复于 2015年10月10日 · 12510 次阅读
本帖已被管理员设置为精华贴

引发这个考虑的是因为我一直用的是 passenger+nginx,然后我想在 passenger 配置中加入 passenger_max_instances: 6 时,告诉我企业版才支持这个配置,说白了就是需要买吧

于是我又去搜了其它的一些 server,比如 pumaunicorn,想知道他们的性能和 passenger 比起来如何,本来想选择 puma 的,然后在 passenger 的官网看到了这个

然后我就陷入了沉思....

现在选 puma 吧,文档比较好看,社区氛围浓,比 unicorn 多了线程方式的并发。Heroku 把推荐 server 从 unicorn 改成 puma 了。

https://devcenter.heroku.com/changelog-items/594

#1 楼 @rei 我也感觉这应该是最好的选择了

选 Puma 又开了 Rails 的多线程支持,可能要额外注意一下线程安全问题。

我新项目都用 puma, 以前的老项目, 代码量大, 依赖版本低, 就还是用 unicorn.

这两个 Open Source 版本都支持啊?passenger_max_instances是新的标志?

http {
    passenger_max_pool_size 21;
    passenger_max_instances_per_app 6;
}

刚使用上 unicorn, 难道要转成 puma? 😪

unicorn 就挺好啊。如果你是企业用户,买一下 passenger 也无可厚非吧。不是企业用户没必要这么专注于性能。

我们用 rainbows

一直不认可 passenger 这种盈利模式,我就直接 unicorn 了

#10 楼 @fsword 纯好奇,不认可的理由是什么呢?

#11 楼 @lgn21st 太小家子气了,做不大,这种东西都该把主要功能开源,允许大家私搭乱建,然后自己直接用云提供托管服务,把专业技术通过运维能力展现出来

#12 楼 @fsword 那么产品和技术方面呢?因为听起来感觉是因为觉得对方不擅长商业运作,所以不选择这家的产品。

#13 楼 @lgn21st 其实我说的就是产品形态,技术服务就是应该以托管的形式,最好是 saas,不然容易增加学习成本。我觉得 passenger 就是个配置简化工具,如果我要学习,不如直接学习如何运维 unicorn 等等。

#6 楼 @ericguo 之前是可以,但是现在已经只能在企业版下使用了

#14 楼 @fsword 这样的话,Passenger 就会变成和 Heroku 竞争,但是 Passenger 团队很小,SaaS 是资本密集型 + 劳动力密集型的。

其实用 passenger_max_instances_per_app 就好了,免费版本够用的 大部分主流的 server 我都用过 rainbow/puma/thin/unicorn 但我上一个用的是 passenger,免费版本. 线程类的没有 server 没有想象中的那么好,可靠性不高. 经过压测,综合性能和可靠性,我选的是 passenger

现在的公司用的 unicorn,性能和可靠性还没有发现什么特别的问题,就是不能 touch ...

哈哈,那天也发现 passenger 的这功能要付费

#17 楼 @azhao passenger_max_instances_per_app这个貌似也行哈

感觉快要抵挡不住诱惑从 unicorn 改用 puma 了...

昨天折腾了一天的 puma 硬是没有跑起来

#20 楼 @flypiggys 我已然没有抵挡住的尝试了。

跟我昨天遇到的情形一样,纠结于三种app server。目前先用passenger

没啥问题的话,我也不想折腾了,暂时先用 passenger 吧

借道问,用 puma/unicorn 后,大家是怎么配置让其开机自动启动的?passenger 的话可以随着系统 nginx 服务起来。

#26 楼 @as181920 https://github.com/puma/puma/tree/master/tools/jungle/upstart 这里,不过我按照这种方式提示我启动成功,但是仍然打不开

#26 楼 @as181920 类似一个服务(server)也就是一个进程 其实简单来说就是启动一个进程

前几天正好看了一篇关于 Rails 服务器比较的文章,这里贴出来,你可以参考参考,虽然说的是 Heroku,但其实都差不多。 结论是推荐集群模式的 Puma 和 Passenger 5,当然 Nginx+Unicorn 也不错

@kgen 求问, 为啥 SaaS 是劳动力密集型~

#32 楼 @wppurking Ops + Support 现在国内外非一流的云平台,自动程度仍然不高,大量运维人工介入的。

我懒,所以我 Passenger + Apache 我以前的 Nginx + php-fpm 我都换 Apache 了 简单方便不折腾

个人是非常喜欢 Passenger. 部署简单,且性能强大。

给楼主贴一篇文章 Ruby Web 服务器:这十五年

希望对楼主的选择有所帮助,并引用一下其中的一段:

以最新的 Raptor(上文提到的 Phusion Passenger 5)为例,其在网络 I/O 模型的选择上融合了现有其它优秀产品的方案,包括 Unicorn 的多进程模型、内置基于多线程和事件 I/O 模型的反向代理缓冲(类似 Nginx 的功能,但对 Raptor 自身做了大量裁减和优化)、以及企业版具有的多线程模型(类似 Puma 和 TorqueBox);此外,Raptor 采用的 Node.js HTTP Parser(基于 Nginx 的 Parser)的性能超过了 Mongrel;更进一步,Raptor 甚至实现了 Zero-copy 和一般在大型游戏中使用的区域内存管理技术,使其对 CPU 和内存访问的优化达到了极致(感兴趣的话可以进一步查阅这里)。

#35 楼 @poshboytl :plus1: 我也用的 passenger,很不错,简单省心

Ruby China 是这样的:

Unicorn -> Puma -> Unicorn

Unicorn 感觉是一个老大哥,放心稳妥,其实两者实际用下来看,差别不大

#37 楼 @huacnlee 要不要试试看 Passenger 5.0?在生产环境一只在用,稳定,可靠,而且维护非常省心。

#38 楼 @lgn21st 可以啊,你来部署试一下

其实我是一直不喜欢 Passenger 就是要和 Nginx 一起编译,standalone 方式的还能接受。

#39 楼 @huacnlee 嗯,好。

现在可以直接使用 Passenger 的 APT Source,几行命令就部署了。Passenger 的 Source 里面自带的 Nginx 编译质量没有问题,版本更新速度比 Ubuntu 官方要快很多,最近两年用下来,我感觉无槽点。

#35 楼 @poshboytl 已经决定使用 passenger 了 省事

#41 楼 @hxh1246996371 passenger 省事了 但是负载均衡的时候就知道很苦逼了 。 但是每个服务器上都启 nginx 也无妨

我们也首选 Unicorn,但是现在在慢慢向 puma 过渡中。项目遇到一些问题就是,比如有些功能是依赖于第三方的服务,好比 Github 验证登陆。如果并发量大的话,多进程的服务器就会比较容易遇到瓶颈。

passenger 路过, 如 #39 大神所说, 已经不需要混合编译了

puma 能用非线程安全的 gem 吗?

#1 楼 @rei

Puma +1

  1. Puma 省内存。 Unicorn 一个进程 120M - 140M,Puma 一个进程 80M-120M。
  2. Puma 是多线程的 server,同样配置的机器干更多的活。

#46 楼 @xiaoronglv

In order to get the best throughput, it is highly recommended that you use a Ruby implementation with real threads like Rubinius or JRuby.

意思是 ruby 版本最好还是 RubiniusJRuby 是吧

有没有一种类似 uwsgi 的服务?

passenger5 不停机部署貌似也是收费的了? 另外,unicorn 的慢客户端的确是很困扰啊...

Apache + Passenger 感觉比较爽,很方便。 项目中也用过 Unicorn 和 Puma,后来都只用 Puma 了,感觉要省一点点内存

反正我现在还是回到 Passenger 了,以后有需求再考虑换成其它的吧

#37 楼 @huacnlee gitlab 也这么走过 Unicorn -> Puma -> Unicorn 可能当时 Puma 稳定性还不如 Unicorn

rails 的应用服务器处理静态资源的能力太弱了

#54 楼 @zouyu 资源文件一般单独撘一个 nginx 静态文件服务器吧

#55 楼 应该是通用做法,赞成!

#57 楼 @zouyu 不过我现在网站直接用的是阿里云的 OSS,不拖慢自己低配的服务器了,呵呵

复用而不重复造轮子正是 ROR 的核心思想

#54 楼 @zouyu 靜態的直接放 CDN 比較好。我的一個 App 就是這麼設計的。

#37 楼 @huacnlee 能否问下现在 Ruby China 的内存占用为多少?MongoDB 用多少内存?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号