SpringCloud组件Sentinel/Hystrix原理介绍
SpringCloud实现方案包括:SpringCloud Netflix,SpringCloud Alibaba,SpringCloud Kubernetes等,最新方案已将以下多种功能进行了整合,变得更加简单易用,因此本文以上在最新的方案已被替换掉。这里不再展开。以下专题可供读者进一步研究学习:什么是云原生? 是在Docker,Kubernetes等容器化运维环境下的服务部署,特别是K8S的应
SpringCloud实现方案包括:SpringCloud Netflix,SpringCloud Alibaba,SpringCloud Kubernetes等,最新方案已将以下多种功能进行了整合,变得更加简单易用,因此本文以上在最新的方案已被替换掉。这里不再展开。
以下专题可供读者进一步研究学习:
什么是云原生? 是在Docker,Kubernetes等容器化运维环境下的服务部署,特别是K8S的应用。
如上所述,服务熔断组件Sentinel: 把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性,和Hystrix功能一致。
这里介绍下QPS和TPS的概念。
QPS (Queries Per Second) 是每秒查询率 ,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。
TPS (Transactions Per Second) 也就是事务数/秒。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
QPS和TPS区别:
TPS即每秒处理事务数,包括:1.用户请求服务器,2.服务器自己的内部处理,3.服务器返回给用户;这三个过程,每秒能够完成N个这三个过程,Tps也就是N;
QPS基本类似于TPS,但是不同的是,对于一个页面的一次访问,形成一个TPS;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“QPS”之中。
客户端访问服务,通过桶获得令牌,桶中包含QPS(即令牌个数),就像看医生,需要先挂号一样,需要获得令牌,而每天只有这么多个号,只有挂到号了才能看医生。
SpringCloud 中的Hystrix完整工作原理如下,打个比方,原本由controller通过Tomcat线程池对eat,run,job等方法进行线程池分配(比如分别为30,50,20个线程)。
引入Hystrix后,通过Hystrix对信号量进行计数,采用AOP面向切面编程对eat,run,job等方法进入+1,退出-1。
Hystrix通过新建线程池实现与Tomcat线程池的隔离,在Hystrix中新建的线程池(比如new eat 线程池=30)实现流量控制,熔断降级和负载保护等功能。
如前所述,Sentinel和Hystrix的功能一致,Hystrix当前已转维停止更新,但上述原理仍然与Sentinel通用。
更多推荐
所有评论(0)