大白话高并发(三)

背景

高并发得第三篇,讲一讲压测吧,因为我的目的是模拟100万人同时来秒杀。

是不是真的要找100万个人

没必要 ,你就算100万人掐着表在同一毫秒内把请求请求某一台机器,服务器也不可能在同一时间处理那么多请求,因为服务器的io模型大多是多路复用,网络模型是reactor,都是排队一个一个来处理的,而且单台服务器能不能承受100万并发也是个问题,所以针对短链接来说,测出来单台机器的最大qps才是关键,比如我得并发量是100万单台机器的最大qps是2万那么我就需要50台机器,(注意我这里说的是短链接,如果你是长连接肯定是要模拟100万个端,每个机器有大概6万个端口,因此需要16台机器作为客户端,服务端通过参数调整服务器的最大文件数为100万)

压测的思路

在这里插入图片描述

我觉得这张图特别的好,
在“并发连接与吞吐量”的图中,吞吐量的峰顶处对应的并发连接数,就是系统能处理的极限并发连接数了。
而在“延迟与吞吐量”的图中,在吞吐量颓势未显时达到设定的最大延迟处,就是系统的最大吞吐量了。

在这里插入图片描述

也就是说你先逐步增大并发找到qps最大那个点,比如刚开始并发100qps10000,然后并发200qps20000,并发300qps下降到19000了,并发400qps18000了,那么我们说20000qps就是这台机器最大的吞吐量了,然后我们设置一个请求响应延迟的阈值,比如我要求我们团队的接口不能超过200毫秒,那么我就看一下,虽然最大qps是20000但是每个接口的延迟是300毫秒,所以这不是我想要的,那就降低并发量,发现15000qps的时候延迟为200毫秒,所以我们就可以说每台机器的qps为15000,那么我们要是想支持100万人秒杀,就需要100/1.5大约70台机器。

还有我们常说的28定律 百分之80的用户在每天百分之20的时间来访问,假设平台用户是300万,一天24小时

(30000000.8) / (2460600.2)= 173
也就说你只要保证你的接口qps能做到173就可以应付大部分日常场景了,但是我们说的是秒杀场景,还是要求高一点

go-stress-testing

在这里插入图片描述

所以我们就看看github上用golang实现的压测软件,直接看源码。

main.go

在这里插入图片描述

dispose方法

在这里插入图片描述
其实就是for循环了需要多少个go携程去请求,真的没什么

http方法

在这里插入图片描述
一样,也只是循环了单个携程请求的数量。

总结

对于短链接来说:
规定好最大延迟,测出单台机器最大qps,再根据你预计的人数,就知道了需要多少台机器
对于长连接来说:
你确实需要模拟100万个客户端,所以大概需要16台机器(因为每台机器能提供大概6w个端口)来连接服务端,然后看一下服务端的内存,cpu情况,以及链接数就知道服务端是否能够支持100万链接,当然这里只是说的链接,如果还需要处理请求那么单机处理100万的链接就可能出现问题。
参考
https://zhuanlan.zhihu.com/p/85896572

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值