开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第二阶段:Sentinel 概念和功能】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/684/detail/11872
Sentinel 概念和功能
内容介绍:
一、基本概念
二、重要功能
一、基本概念
1.资源
资源就是 Sentinel 要保护的东西。
资源是 Sentinel 的关键概念。它可以是Java应用程序中的任何内容,可以是一个服务,也可以是一个方法甚至可以是一段代码。我们入门案例中的 message1 方法就可以认为是个资源。
2.规则
规则就是用来定义如何进行保护资源的。
作用在资源之上,定义以什么样的方式保护资源,主要包括流最控制规测、熔断降级规对以及系统保护规则。
我们入门案例中就是为 message1 资源设置了一种流控规则,限制了进入 message1 的流量。
二、重要功能
如上图所示,图片上的 CPU 资源和内存资源都可以看作是服务器的外界环境。
以中间的为核心作为研究象,其余两个称为上游和下游服务。上游服务调用核心服务,核心服务调用下游服务,等待下游服务返回响,经过处理,再把响应丢回去,这就是调用关系的过程。
容错的三个核心思想(也是 Sentinel 的三个重要功能):
1.保证自己不被上游服务压垮。
比如作为核心服务来讲,每一次可以接收三个请求。但是从上游服务过来五个请求,就会导致核心服务被压垮掉。
那么此时的核心措施就是限流。比如规定每次只能接收三个请求,多余的两个,要么排队等待要么直接丢弃,不要进入核心服务即可。
2.保证自己不被下游服务拖垮。
核心服务要调用下游服务,下游服务如果经常不给核心服务响应或者给异常响应。那么下游服务可能此时已经出问题,这时可以采用设置超时时间或者熔断降级,不适用这个下游服务或者使用备用的下游服务。
3.保证外界环境良好。
外界环境受到影响,比如cpu负载过高、内存不够,所以必须要保证外界环境充足。
Sentinel 的主要功能体现为下面这三个:
1.流量控制
流量控制在网络传输中是一个常用的概念,它用于调整网络包的数据,任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel作为一个调配器,可以根据需要把随机的请求调整成合适的形状。
2.熔断降级
当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级取故障
Sentinel 对这个问题采取了两种手段:
(1)通过并发线程数进行限制
Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。
当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。
(2)通过响应时间对资源进行降级
除了对并发线程数进行控制以外,Sentinel还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。
Sentinel 和 Hystrix 的区别
两者的原则是一致的,都是当一个资源出现问题时,让其快速失败,不要波及到其它服务。但是在限制的手段上, 却采取了完全不一样的方法:
Hystrx 采用的是线程池隔离的方式,优点是做到了资源之间的隔离,缺点是增加了线程切换的成本。
Sentinel 采用的是通过并发线程的数量和响应时间来对资源做限制。
3.系统负载保护
Sentinel 同时提供系统维度的自适应保护能力。当系统负载较高的时候,如里还持续让请求进入可能会导致系统扇溃,无法响应。
在集群环境下,会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边像状态的时候,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保让系统在能力范围之内处理最多的请求。
总之,我们需要做的事情,就是在 Sentinel 的资源上配置各种各样的规则,来实现各种容错的功能。