6

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

 2 years ago
source link: https://www.v2ex.com/t/784806
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

V2EX  ›  程序员

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

  waibunleung · 14 小时 3 分钟前 · 2352 次点击

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

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

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

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

第 1 条附言  ·  12 小时 1 分钟前

看到有这么多人默默收藏了,就说明了其实还是有很多人关心这些问题的,看到这个问题的大佬们,有经验的希望还是能尽量分享下呀~ 求求了
37 条回复    2021-06-21 22:59:44 +08:00

tachikomachann

tachikomachann   13 小时 40 分钟前 via Android

之前看《 java performance definitive guide 》时,作者在第一章说过一句话。大概意思是很多人以为 java 调优就是这样一个按钮,我按下去了调优就完成了。实际上不是的,一个服务的性能瓶颈需要具体问题具体分析,需要结合业务场景,压测结果,profile 工具等一点一点地去分析。然后根据自己需要的性能目标和成本去得出一个折中方案。

lz 可以先看看相关的书籍,学习用一些基本工具(大厂甚至都有一整套自己的工具)和大牛们做性能分析的思路。然后在到自己项目里实践看看。

whcoding

whcoding   13 小时 38 分钟前

可以买阿里云的压测得到你想要的数据.

waibunleung

waibunleung   13 小时 32 分钟前

@tachikomachann 我知道肯定会有人说具体问题具体分析,但是问题都是是有分析方向的,就比如你怎么估计一个在服务首页下面增加一个功能入口,新业务增加多少 qps 呢?如果你通过接口监控,知道了这个首页的平均 qps 是 1000,运营告诉你,页面底部的点击率是 25%,那预计带来的 qps 就大约是 250qps,这个 qps 不算高,接口逻辑不复杂的话就能轻松扛过去等等

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

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

感谢回复啦~

waibunleung

waibunleung   13 小时 30 分钟前

@whcoding 公司自建机房

想要问题分析的思路和套路,阿里云并不能告诉我预计业务会增长多少 qps...

dream4ever

dream4ever   12 小时 33 分钟前

之前也思考过这个问题,在极客时间买了几门架构设计方面的课,有些课程会讲到这类数据,比如在硬件配置不是瓶颈的情况下,nginx 能扛住多少并发,redis 能扛住多少并发之类的数据,可以看看。

dream4ever

dream4ever   12 小时 32 分钟前

而且也会讲如何排查性能瓶颈的方法。

janxin

janxin   12 小时 13 分钟前

估算都不知道瓶颈在哪怎么估算 orz

所以先做压测找到瓶颈

waibunleung

waibunleung   12 小时 2 分钟前

@dream4ever 请问买的是哪几门课程呢?

chenqh

chenqh   11 小时 58 分钟前

能上 100QPS 都好事了,

waibunleung

waibunleung   11 小时 57 分钟前

@jmtung 卧槽,有这个 redis 的预估神器?它估算是怎么估算的?

Maboroshii

Maboroshii   11 小时 56 分钟前 via Android

如果不是那种用户量特别大的服务,就随便搞一个配置,先上线,再观察调整也来得及,就能慢慢积累经验了

waibunleung

waibunleung   11 小时 53 分钟前

@Maboroshii 就是那种用户量大的服务

zed1018

zed1018   11 小时 52 分钟前

jmeter 可以压测

Maboroshii

Maboroshii   11 小时 48 分钟前

@waibunleung #13 压测是一个方案,不过具体还是依赖运营数据和现有数据对比,再考虑配置问题。 总有一个人有经验,任何项目也不是一上线就用户量爆炸的。

iyaozhen

iyaozhen   11 小时 37 分钟前

这个问题比较复杂。
往往大家只是说做个压测,但压测最难的不是 jmeter 啥的使用,而是压测场景的分析。

这个之前内部写了个文档,需要再重新写个,可能能回答楼主部分问题

waibunleung

waibunleung   11 小时 26 分钟前

@Maboroshii 压测确实是一个方案,但是肯定有分析技巧和套路的

X0ray

X0ray   11 小时 15 分钟前

性能评估看压测,
性能排查要做好 metrics 监控,如果有异常了,一拉图标出来很快就能反映出实际情况。

fantastM

fantastM   11 小时 13 分钟前   ❤️ 1

1 和 2 应该都是先由产品 /运营给出一个预估的用户量,然后通过应用当前的部署情况(比如负载均衡了多少台机器,单台机器的配置,应用运行时的配置,接口的响应时间)估算出接口的 QPS 。
3 sizeof 可以算占用量,不过和具体缓存的数据有关,#8 提到的网站就挺不错。
4 单机的话,可以用 redis-benchmark 跑下看看。
7 压测时候看下各个调用链路里的耗时(或者更细一点的,可以自己打印 log ),还有外部依赖的监控指标等等,出现问题的话,总能看出一些端倪。

dream4ever

dream4ever   11 小时 6 分钟前

@waibunleung 《架构实战案例解析》,《许式伟的架构课》,《从 0 开始学架构》,但是上面说的内容具体在哪个专栏里现在印象不深了。

waibunleung

waibunleung   10 小时 54 分钟前

@iyaozhen 大佬可以简单回答一下,然后再把写好的文档分享一下~

waibunleung

waibunleung   10 小时 53 分钟前

@fantastM 太棒了,就是需要类似这样的回复!还有请问下,类似于 4k qps mysql 能不能扛得住,会不会报警这种问题,要怎么思考呢?

liudaolunhuibl

liudaolunhuibl   10 小时 29 分钟前

事实上你接口能承受住多少 QPS 大部分是你的服务器和中间件决定的,你的代码里能决定的只是 GC 频率、CPU 占用率、数据库链接等等

liudaolunhuibl

liudaolunhuibl   10 小时 27 分钟前

对了推荐一个 redis 的客户端——Another Redis Desktop Manager,github 开源的, 是一个 MIT 的国人大佬开发的,非常非常好用

Jooooooooo

Jooooooooo   10 小时 27 分钟前

靠压测是个工作中实践时候的正确答案

但是面试或者领导问你这个问题显然不能这么答

可以考虑从线程池模型,io 耗时,业务敏感度等等几个方面去回答

fantastM

fantastM   10 小时 24 分钟前

#22 先确定一些「能不能扛得住」的指标吧,不同场景对系统正常运行的指标是不同的(例如后台的统计 SQL 和用户的实时查询 SQL 对延迟的要求),然后跑基准测试看看。MySQL 的话,你可以看看《高性能 MySQL 》的第二章,或者搜关键字 mysql+benchmark

StrongNoodles

StrongNoodles   8 小时 54 分钟前

压测,虽然和实际还是有出入,但是已经很有参考价值了

qwerthhusn

qwerthhusn   8 小时 39 分钟前

@liudaolunhuibl 不好用,字体很丑,Win10 缩放也有问题,俺推荐 RedisInsight,也是免费

SorcererXW

SorcererXW   8 小时 29 分钟前

性能瓶颈可以使用 apm 、jaeger 这种 tracer,加上压测,看看整个链路上的性能瓶颈在哪里

fengpan567

fengpan567   4 小时 32 分钟前

jmeter 自己压一波

Rocketer

Rocketer   4 小时 28 分钟前 via iPhone

不同的应用类型,QPS 峰值分布也不一样。我们(电商)一般会把一天的访问量平均分到 10 小时里去,然后按平均值的 10 倍配置负载能力。比如一天 100 万的访问量,那么 QPS 能撑住 1000000/36000*10=278 就可以了

LeeReamond

LeeReamond   4 小时 18 分钟前

1 和 6 不是开发考虑的问题,2 和 4 的大概值估算是开发的基本功,写代码时候就知道大概是多少了,想知道具体值可以压测,5 的网关性能瓶颈几乎没见哪个业务遇到过,业务量大到这个份上还搞不清瓶颈在哪里比较玄学。7 多学习

LeeReamondLeeReamond   4 小时 18 分钟前

收藏数多大概是因为 LZ 问题问的不错,以后遇到初级开发可以让他挨个点考教

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK