初级后端的疑惑,如何估算接口 qps,以及 redis 占用多少容量, nginx 能抗多少并发

2021-06-21 13:14:30 +08:00
 waibunleung

如题,参与公司业务开发中,经常会遇到这样的问题:

  1. 这个业务入口会为接口带来多少的 qps 增长?
  2. 这个接口能抗住多少 qps ?
  3. 这个业务要上缓存的话,预计会带来多少缓存占用?
  4. 现有的 redis 能抗多少并发?内存占用是否过高?是否需要增加机器?
  5. 现有的 nginx 集群,能抗住多少并发?是否需要增加机器?
  6. 业务上线预计会带来 1000qps 的增长,服务器资源(接口,缓存,数据库)是否能扛得住?
  7. 这个业务的性能瓶颈在哪里?怎么查出来? 等等

总结的问题就是,大佬们是如何进行业务的容量评估,性能评估,性能排查的?

希望能有大大能逐点解答一下上面的 7 个问题你们在工作中是怎么去分析的,身为菜鸟的我每次遇到这种问题,都头痛半天,然后还是去问大佬怎么怎么弄,但是几次下来也没有总结到套路,都快怀疑自己适不适合干下去了.... 所以想向各位请教下,学习一下大家都是怎么评估和排查问题的,想在这方面有点成长,万分感谢!

6971 次点击
所在节点    程序员
52 条回复
tachikomachann
2021-06-21 13:37:29 +08:00
之前看《 java performance definitive guide 》时,作者在第一章说过一句话。大概意思是很多人以为 java 调优就是这样一个按钮,我按下去了调优就完成了。实际上不是的,一个服务的性能瓶颈需要具体问题具体分析,需要结合业务场景,压测结果,profile 工具等一点一点地去分析。然后根据自己需要的性能目标和成本去得出一个折中方案。

lz 可以先看看相关的书籍,学习用一些基本工具(大厂甚至都有一整套自己的工具)和大牛们做性能分析的思路。然后在到自己项目里实践看看。
whcoding
2021-06-21 13:39:37 +08:00
可以买阿里云的压测得到你想要的数据.
waibunleung
2021-06-21 13:45:30 +08:00
@tachikomachann 我知道肯定会有人说具体问题具体分析,但是问题都是是有分析方向的,就比如你怎么估计一个在服务首页下面增加一个功能入口,新业务增加多少 qps 呢?如果你通过接口监控,知道了这个首页的平均 qps 是 1000,运营告诉你,页面底部的点击率是 25%,那预计带来的 qps 就大约是 250qps,这个 qps 不算高,接口逻辑不复杂的话就能轻松扛过去等等

上面说的 转化率就是一个评估 qps 的方向。
导致性能瓶颈的问题有很多,但是排查瓶颈肯定是有套路的

至于你说学习大牛们做性能分析的思路,提出这个问题的我,就是希望能再这里收获一点思路。

感谢回复啦~
waibunleung
2021-06-21 13:47:15 +08:00
@whcoding 公司自建机房

想要问题分析的思路和套路,阿里云并不能告诉我预计业务会增长多少 qps...
dream4ever
2021-06-21 14:44:28 +08:00
之前也思考过这个问题,在极客时间买了几门架构设计方面的课,有些课程会讲到这类数据,比如在硬件配置不是瓶颈的情况下,nginx 能扛住多少并发,redis 能扛住多少并发之类的数据,可以看看。
dream4ever
2021-06-21 14:44:51 +08:00
而且也会讲如何排查性能瓶颈的方法。
janxin
2021-06-21 15:04:41 +08:00
估算都不知道瓶颈在哪怎么估算 orz

所以先做压测找到瓶颈
jmtung
2021-06-21 15:11:52 +08:00
1 、性能:压测
2 、redis 内存占用: http://www.redis.cn/redis_memory
waibunleung
2021-06-21 15:15:24 +08:00
@dream4ever 请问买的是哪几门课程呢?
chenqh
2021-06-21 15:19:01 +08:00
能上 100QPS 都好事了,
waibunleung
2021-06-21 15:20:31 +08:00
@jmtung 卧槽,有这个 redis 的预估神器?它估算是怎么估算的?
Maboroshii
2021-06-21 15:21:39 +08:00
如果不是那种用户量特别大的服务,就随便搞一个配置,先上线,再观察调整也来得及,就能慢慢积累经验了
waibunleung
2021-06-21 15:24:07 +08:00
@Maboroshii 就是那种用户量大的服务
zed1018
2021-06-21 15:25:45 +08:00
jmeter 可以压测
Maboroshii
2021-06-21 15:29:26 +08:00
@waibunleung #13 压测是一个方案,不过具体还是依赖运营数据和现有数据对比,再考虑配置问题。 总有一个人有经验,任何项目也不是一上线就用户量爆炸的。
iyaozhen
2021-06-21 15:40:23 +08:00
这个问题比较复杂。
往往大家只是说做个压测,但压测最难的不是 jmeter 啥的使用,而是压测场景的分析。

这个之前内部写了个文档,需要再重新写个,可能能回答楼主部分问题
waibunleung
2021-06-21 15:51:05 +08:00
@Maboroshii 压测确实是一个方案,但是肯定有分析技巧和套路的
X0ray
2021-06-21 16:02:43 +08:00
性能评估看压测,
性能排查要做好 metrics 监控,如果有异常了,一拉图标出来很快就能反映出实际情况。
fantastM
2021-06-21 16:03:53 +08:00
1 和 2 应该都是先由产品 /运营给出一个预估的用户量,然后通过应用当前的部署情况(比如负载均衡了多少台机器,单台机器的配置,应用运行时的配置,接口的响应时间)估算出接口的 QPS 。
3 sizeof 可以算占用量,不过和具体缓存的数据有关,#8 提到的网站就挺不错。
4 单机的话,可以用 redis-benchmark 跑下看看。
7 压测时候看下各个调用链路里的耗时(或者更细一点的,可以自己打印 log ),还有外部依赖的监控指标等等,出现问题的话,总能看出一些端倪。
dream4ever
2021-06-21 16:11:32 +08:00
@waibunleung 《架构实战案例解析》,《许式伟的架构课》,《从 0 开始学架构》,但是上面说的内容具体在哪个专栏里现在印象不深了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/784806

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX