国务院建设主管部门网站适合员工的培训课程
文章目录
- 上万的并发需要多少台web服务器
- 一般单机能处理200请求,为何redis单机却能处理上万请求
- 单线程每秒能处理(发送/响应)的http请求数
- 三高的定义
- 高并发的解决方案
- 高性能的解决方案
- 高可用的解决方案
- 参考文章
上万的并发需要多少台web服务器
Tomcat默认配置的最大请求数是150(简单记作200),也就是说同时支持150个并发,当然了,也可以将其改大。 当某个应用拥有250个以上并发的时候,应考虑应用服务器的集群
一般单机能处理200请求,为何redis单机却能处理上万请求
-
一般的单机是你要么请求mysql,要么进行磁盘io,这样每个操作至少100ms可是redis全内存操作,所以上万没问题
-
客户端单机能有100并发的发压都相当不错了,因为客户端发请求,还要等服务端的响应,至少200ms,而服务端只需要一个线程不断监听客户端的连接就好,服务端响应也不需要等客户端的回应,所以相比起来就自然性能高了200倍
单线程每秒能处理(发送/响应)的http请求数
一个线程1秒能处理10个请求,4C8G的机器一般起20个线程就差不多了(),所以单机大约能处理200并发就已经相当不错了。
下面是我们在线上经过了大量系统优化后的生产经验总结:
假设你的服务A,每秒钟会接收30个请求,同时会向服务B发起30个请求,然后每个请求的响应时长经验值大概在200ms,那么你的hystrix线程池需要多少个线程呢?
qps和最佳线程数的关系计算公式是:30(每秒请求数量) * 0.2(每个请求的处理秒数) + 4(给点缓冲buffer) = 10(线程数量)。
如果对上述公式存在疑问,不妨反过来推算一下,为什么10个线程可以轻松抗住每秒30个请求?
一个线程200毫秒可以执行完一个请求,那么一个线程1秒可以执行5个请求,理论上,只要6个线程,每秒就可以执行30个请求。
也就是说,线程里的10个线程中,就6个线程足以抗住每秒30个请求了。剩下4个线程都在玩儿,空闲着。
那为啥要多搞4个线程呢?很简单,因为你要留一点buffer空间。
万一在系统高峰期,系统性能略有下降,此时不少请求都耗费了300多毫秒才执行完,那么一个线程每秒只能处理3个请求了,10个线程刚刚好勉强可以hold住每秒30个请求。所以你必须多考虑留几个线程。
三高的定义
高并发方面要求QPS 大于 10万;
高性能方面要求请求延迟小于 100 ms;
高可用方面要求系统可用性高于 99.99%。
高并发的解决方案
- 负载均衡
- 池化技术(连接复用)
- 流量漏斗(WAF防火墙,防黑客攻击、恶意爬虫、黄牛等)
复用单个连接无法承载高并发,如果每次请求都新建连接、关闭连接,考虑到TCP的三次握手、四次挥手,有时间开销浪费。池化技术的核心是资源的“预分配”和“循环使用”,常用的池化技术有线程池、进程池、对象池、内存池、连接池、协程池。
连接池的几个重要参数:最小连接数、空闲连接数、最大连接数
上面讲的是正向方式提升系统QPS,我们也可以逆向思维,做减法,拦截非法请求,将核心能力留给正常业务!
互联网高并发流量并不都是纯净的,也有很多恶意流量(比如黑客攻击、恶意爬虫、黄牛、秒杀器等),我们需要设计流量拦截器,将那些非法的、无资格的、优先级低的流量过滤掉,减轻系统的并发压力。
高性能的解决方案
一般来说:5秒界面没有响应,用户就会离开
那么有哪些因素会影响系统的性能呢?
-
用户网络环境
-
请求/响应的数据包大小
-
业务系统 CPU、内存、磁盘等性能
-
业务链路的长度
-
下游系统的性能
-
算法实现是否高效
加缓存
高可用的解决方案
异地多活、主备切换进行容灾
通过熔断、限流、降级,解决流量过载问题,提供过载保护
参考文章
微服务高可用的两个关键技巧,你一定用得上