Rails 部署程序如何能达到一定并发量?

love323 · 2018年09月02日 · 最后由 love323 回复于 2018年11月14日 · 1481 次阅读

目前情况是这样的:centos7阿里云,1核cpu,1g内存,1m带宽,用的mysql8.0,占了300m内存,大概剩700m内存空间,然后使用的nginx和puma做后台服务器?如何能把并发最大化?比如100并发。有没有大神从rails角度,nginx角度,puma角度和数据库优化角度详细讲讲,小弟真的搞了好久,都没弄好,比如缓存啥的,数据库优化啥的,Linux配置啥的,nginx配置啥的?不准备再投钱了,毕竟穷学生一枚。有哪位大神给讲讲,真心谢谢了!!!!!

共收到 47 条回复

虽然可以讲一本书... 不过有几个情况你先介绍下更好:

Rails 是用 production 模式开的吗? 你知道慢在哪里了吗? 有没有测过?

内存太小, 缓存基本作用不大...

现在启用的是production模式,但是想用缓存技术,现在真心不知道慢在哪里,用腾讯云测试是application.scss每次加载几乎为零

先加内存吧

有性能瓶颈吗

测试过aws 40 core 120g ram开40个docker大概能达到1w rpm

空谈误国。搞起来,压测...

luikore 回复

求出书

压测做了没,现在能到多少?

没有场景谈优化都是散吹,按你目前的机器,不换语言的情况下,干掉 Rails 只用 Rack 应该还能提升一些,but 你愿意么

nouse 回复

99美刀啊,可以考虑,你看过吗?

adamshen 回复

我看过作者的一些tweet和演讲,内容质量很高,书还没有看过

查询缓存,跟页面可以做起来。

舍命陪大腿了,这是我在腾讯云上测试的结果,跪求大腿给讲讲,让我这等菜鸡学习学习,到底哪里是瓶颈

接入 https://newrelic.com/ 再跑压测,看 NewRelic 分析。

adamshen 回复

我开好头了,你们继续讲一本书……

love323 回复

从图上看来,你的 css 文件响应很慢,可能:

  • 没走 nginx,得把你的 nginx 配置发出来看看
  • 或者这个文件非常大,吃满了带宽
  • Rails 进程开太多了, 挤满内存导致整个系统都响应缓慢

这个机器配置, puma 单进程, 几个线程就足够了。

application.js 的平均响应时间 4s 最高 9s, 你直接把 js 请求交给 Rails 处理了么?

生产环境要 assets:precompile 预编译,然后用 nginx 托管静态文件

昨天比较忙,忘记看了,我把nginx的配置、puma的配置、还有production的配置给大家看一看,可能配置的有错误的地方,感谢大家帮忙

还差了一个

IChou 回复

我预编译了,应该托管给了nginx

luikore 回复

我也很纳闷,为什么响应这么慢,都让我怀疑人生了

luikore 回复

这个是application.js和application.scss的大小,感觉是有点大,但是不是因为包含了jQuery和bootstrap?

你nginx代理静态资源写的是这个:

location ~*^/app/assets/{

}

有这个路径吗?换下下面这个试试:

location ^~ /assets/{

}

顺便建议在 config/environments/production.rb 加上:

config.serve_static_files = false # 不让后端处理静态资源请求,可以检测你nginx是否真的代理的静态资源

怎么感觉只是 fonts.googleapi.com 慢,删掉试试

nty 回复

怎么会 压测显示 fonts.googleapi.com 明明很快的很稳定呀

@early 已经给出正确答案了

另外在补充一下,Rails 编译静态资源的时候,默认就生成了 gzip(.gz)格式的文件,所以对 assets 下的资源 Nginx 可以启用

gzip_static     on;

另外你的 puma 配置里面,你只有一个核,开 3 个 worker 也没什么用,线程锁定 6 个也没什么意义,平时访问量很低的话 1, 6 应该会更合理

吐个槽:问题可以改成 Rails 应用如何正确的部署 production,并发量问题对它而言太笼统了

IChou 回复

开 3 个 worker 没用? 为啥?

IChou 回复

不知道你想说什么...

xiaox 回复
# How many worker processes to run.  Typically this is set to
# to the number of available cores.
#
# The default is "0".
#
# workers 2

puma 自己对 worker 这个参数的解释,你每 new 一个 Rails 项目都能看到这段话

IChou 回复

请教一下,puma worker的数量 等于 cpu的核的数量? 这样理解?

xiaox 回复

好的,以后提问题尽量说的明白清楚一点,我试一下

early 回复

好点,我试一下

early 回复

按照你说的,界面确实变乱了,jquery也没有了,但是能找到html,代表后台处理静态资源?那应该在nginx加什么实现nginx代理静态资源,感谢大佬了

IChou 回复

按照你改了一下nginx,nginx报错 nginx版本1.13好像

early 回复

nginx那个改成我自己的就正确了, 使用config.serve_static_files = false也加载资源了,所以应该nginx代处理静态资源,配的应该正确

Repeat after me: I will not optimize anything in my application until my metrics tell me so.

nginx 的 root 目录应该指向 public 而不是根目录

原则上 app 目录下的资源是不允许直接被 nginx 访问的,不需要 assets pipeline 管理的静态文件应该直接放到 public 目录下面去

IChou 回复

了解

adamshen 回复

收到

IChou 回复

吐个槽:问题可以改成 Rails 应用如何正确的部署 production,并发量问题对它而言太笼统了

这让我想到一个问题, 会不会是 Ruby Rails 部署太过复杂? ( 我知道你会说 Heroku....但真的太昂贵了 )

ksec 回复

passenger挺方便的

ksec 回复

这不只是 Rails 的问题吧,现在的『全栈框架』部署起来差不多都这个样子,毕竟涉及的东西就有这么多

其实也没有多复杂,只是楼主可能没有仔细去看 Rails 部署相关的文章,走了很多弯路

社区缺一篇相关的 Wiki 倒是真的

等你访问量上去以后,你会发现……

1m带宽才是最大的瓶颈。

100QPS动态页面通常需要远远不止1m的带宽。

行,谢谢大家指点了,我自己再搞一搞

欢迎大家关注我的公众号“资源和福利”,里面有你需要的ruby资料

love323 关闭了讨论 11月14日 13:39
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册