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