1、熔断、降级、限流
概念 |
目的 |
触发方 |
触发场景 |
解决方 |
处理方案 |
所有用户表现一致 |
用户表现 |
---|---|---|---|---|---|---|---|
熔断 | 从可用性可靠性着想,为防止系统的整体缓慢甚至崩溃 | 某个服务(下游服务)不可用 | 当失败的调用到一定阈值,如缺省是5秒内20次调用失败,就会启动熔断机制,自动触发 | 调用方 | 开启熔断之后,如何实现自动恢复?每隔一段时间,释放一个请求到服务端进行探测,如果后端服务已经恢复,则自动恢复 | 不一致 | 用户体验到的是某些功能暂时不可达或不可用 |
降级 | 为防止系统的整体缓慢甚至崩溃 | 服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉 | 整体负荷比较大,进行人工干预 | 调用方 | 取消降级 | 一致 | 用户体验到的是某些功能暂时不可达或不可用 |
限流 | 通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统 | 通过对进行限速来保护系统 | 超出了服务每分钟的调用量或服务的某个方法调用量 | 如果是由于当时压测并发数较高引起;视具体情况而定 | 调大阈值 | 一致 | 一旦达到限制速率则可以拒绝服务或 |
具体示例
熔断:
A -> B -> C,如果C出现问题了,那么B熔断了,则A就不用熔断了。
降级:
A -> B -> C,C服务存在C1、C2、C3、C4
1,如果C4优先级较低,一定是先降级优先级地的接口C4
2,如果服务链路整体没有性能特别差的点,比如就是外部流量突然激增,那么就从外到内开始降级。
3,如果某个服务能检测到自身负载上升,那么可以从这个服务自身做降级。
限流:
B只允许A以QPS<=5的流量请求,而C却只允许B以QPS<=3的qps请求,那么B给A的设定就有点大,上游的设置依赖下游。而且限流对QPS的配置,可能会随着服务加减机器而变化,最好是能在集群层面配置,自动根据集群大小调整。
2、QPS 与并发数 与响应时间
每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
QPS ( Query Per Second ):每秒钟request/事务 数量
并发数: 系统同时处理的request/事务数
并发主要是针对服务器而言,是否并发的关键是看用户操作是否对服务器产生了影响。因此,并发用户数量的正确理解为:在同一时刻与服务器进行了交互的在线用户数量。这些用户的最大特征是和服务器产生了交互,这种交互既可以是单向的传输数据,也可以是双向的传送数据。
响应时间: 一般取平均响应时间
QPS(TPS)= 并发数/平均响应时间 或者 并发数 = QPS*平均响应时间
上图横坐标是并发用户数。绿线是CPU使用率;紫线是吞吐量,即QPS;蓝线是时延。
开始,系统只有一个用户,CPU工作肯定是不饱合的。一方面该服务器可能有多个cpu,但是只处理单个进程,另一方面,在处理一个进程中,有些阶段可能是IO阶段,这个时候会造成CPU等待,但是有没有其他请 求进程可以被处理)。随着并发用户数的增加,CPU利用率上升,QPS相应也增加(公式为QPS=并发用户数/平均响应时间。)随着并发用户数的增加,平均响应时间也在增加,而且平均响应时间的增加是一个指数增加曲线。而当并发数增加到很大时,每秒钟都会有很多请求需要处理,会造成进程(线程)频繁切换,反正真正用于处理请求的时间变少,每秒能够处 理的请求数反而变少,同时用户的请求等待时间也会变大,甚至超过用户的心理底线。
3、TPS:Transactions Per Second
(每秒传输的事务处理个数),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。(业务TPS = CAPS × 每个呼叫平均TPS)
TPS是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值。
4、PV UV 区别
PV(访问量):即Page View, 具体是指网站的是页面浏览量或者点击量,页面被刷新一次就计算一次。如果网站被刷新了1000次,那么流量统计工具显示的PV就是1000 。
UV(独立访客):即Unique Visitor,访问您网站的一台电脑客户端为一个访客。00:00-24:00内相同的客户端只被计算一次。
一个UV可以用很多PV,一个PV也只能对应一个IP。比如,今天访问了一次你的网站,你的UV就加了1,我这次访问浏览了两个页面,你的PV就加2,我访问同一个页面,但刷新了一次,PV也是2.
5、cpu、内存、磁盘IO之间的关系
CPU:工人,干活的,判断以及逻辑处理
内存:车间,工人干活的地方,车间中加工原料,当车间中没有原料了,在从仓库中取原料,对原料进行加工 内存本身有一定的存储空间,对内存中的数据进行处理的速度比从硬盘取数据再处理的速度快很多
硬盘:仓库,原料,数据存储
CPU对数据进行判断以及逻辑处理,本身不能存储数据,这时cpu从内存取数据进行逻辑计算,如果内存没有数据,才会从硬盘读数据到内存,再对数据进行处理
就像人吃饭一样,cpu就是人,内存就是碗,硬盘就是饭锅!!
当cpu进程等待,会造成内存开销的增加,内存不够用的时候会用到虚拟内存,导致虚拟内存的增加,这时磁盘IO开销就会增加,系统态sy%提升,cpu开销增加,内存里数据不够用,才用磁盘中取数据.
原文地址:https://www.cnblogs.com/echoqi/p/10274620.html