了解Sentinel的一些概念
在本节中,我们将了解何为资源、何为规则、何为资源的指标数据,了解调用链、调用树及调用链与调用树的关系,了解处理器插槽及处理器插槽过滤器链。
资源、规则、资源指标数据
在Sentinel中,资源、规则和资源指标数据这几个概念是密切相关的。规则需要围绕资源和资源的实时指标数据设置;限流、熔断等需要依据资源的实时指标数据判断是否达到规则设置的阈值,从而根据规则控制流量。
资源:资源可以是一个方法、一段代码、一个Servlet接口、一个RPC接口,通常用于指代一个接口。
规则:围绕资源的实时指标数据设置的规则,包括流量控制规则、熔断降级规则、系统自我保护规则和自定义的规则。
资源指标数据:Sentinel以资源为维度统计指标数据,资源的实时指标数据反映了资源的实时状态,这些指标包括每秒请求数、请求平均耗时、每秒异常总数等。
调用链与调用树
将按过程调用方式处理一次请求时所用到的方法串联起来就是一条调用链。在Sentinel中,只是将一次调用所经过的资源串联起来。在同一条调用链上的资源可以共享一些变量。
假设调用订单支付接口完成订单支付需要调用某宝的支付接口,并且在支付完成后调用内部的其他服务接口,代码如下:
其中,orderPay、aliPay、other这3个方法都是被Sentinel保护的资源。那么,此案例中共有两条调用链,这两条调用链有相同的入口资源节点——POST:/orderPay,如图2.1和图2.2所示:
图2.1 调用链1
图2.2 调用链2
调用树是由整个应用的所有调用链构造而成的一棵N叉树。从根节点到每一个叶子节点所形成的路径都是一条完整的资源调用链,这些调用链都有一个共同的根节点——ROOT,如图2.3所示:
其中,根节点(ROOT)和入口节点(sentinel_spring_web_context)是调用链上的非资源节点,而POST:/orderPay节点、POST:/aliPay节点和POST:/other节点都是资源节点。
除根节点(ROOT)外,调用树上的每条调用链都可能与其他调用链有着共同的入口节点,因此,入口相同的调用链并不代表它们就是同一条调用链。
图2.3 调用树
在图2.3中,对于资源节点POST:/aliPay与资源节点POST:/other所在的调用链,它们都有着共同的根节点ROOT、共同的入口(非资源)节点
sentinel_spring_web_context和共同的入口资源节点POST:/orderPay。
处理器插槽
处理器插槽(ProcessorSlot)是Sentinel提供的插件,资源指标数据的统计、限流、熔断降级、系统自适应保护等都需要通过处理器插槽实现。
Sentinel以流量为切入点,拦截资源对应方法/代码块的执行。Sentinel按顺序将注册的处理器插槽构造成有序的处理器插槽链表(ProcessorSlotChain),并在执行方法之前根据ProcessorSlotChain调度处理器插槽完成资源指标数据的统计、限流、熔断降级等。
ProcessorSlotChain是一个单向链表,其示意图如图2.4所示:
图2.4 ProcessorSlotChain示意图
处理器插槽可以在处理请求之前和完成请求处理之后进行各种资源指标数据的统计,也可以在处理请求之前决定是否放行请求并控制请求的实际通过时间。
另外,处理器插槽可以通过抛出异常来拒绝请求,也可以通过将线程休眠来控制请求的实际通过时间。
本文给大家讲解的内容是深度解析微服务高并发概念与核心类:了解Sentinel的一些概念
下篇文章给大家讲解的内容是深度解析微服务高并发概念与核心类:资源指标数据统计相关类
感谢大家的支持!
领取专属 10元无门槛券
私享最新 技术干货