欢迎光临外链推广平台,一个优秀的外链推广平台,为你解决获客难题!

阿里Sentinel源码解析责任链模式的应用

作者:jcmp      发布时间:2021-05-18      浏览量:0
1、设为“ 星标 ”,好文章不错过

1、设为“ 星标 ”,好文章不错过!

2、NodeSelectorSlot

NodeSelectorSlot:链中处理的第一个节点

责任链实例和 resource name 相关,和线程无关,所以当处理同一个resource 时,会进入同一 NodeSelectorSlot 实例。 所以该节点代码主要处理:不同的 context name,同一 resource name 的场景。

如下它们都处理同一 resource(“getUserInfo” resource),但它们入口 context 不一。

3、结合前面的那棵树,可得如下树

清楚 NodeSelectorSlot 实例和 resource 一一对应即可。

4、ClusterBuilderSlot

5、主要创建 ClusterNode

6、该类处理后

每个 resource 对应一个 ClusterNode 实例,若不存在,就创建一个新实例。

7、统计意义

数据统计的。比如 getUserInfo 接口,由于从不同的 context name 开启调用链,它有多个 DefaultNode 实例,但只有一个 ClusterNode,通过该实例,即可知道该接口的 QPS。

此类还处理了 origin 不是默认值场景: origin 代表调用方标识,如 application-a, application-b。

当设置了 origin,会生成一个 StatisticsNode 实例,挂在 ClusterNode。

8、改下案例代码

getUserInfo 接收到来自 application-a 和 application-b 两个应用的请求,那么树会变成下面这样:

它的作用是用来统计从 application-a 过来的访问 getUserInfo 这个接口的信息。目前该信息在 dashboard 不展示,毕竟没啥用。

9、LogSlot

直接 fire 出去了,即先处理责任链后面的节点,若它们抛 BlockException,才处理。

10、StatisticSlot

11、数据统计。

12、原理

先 fire,等后面的节点处理完毕后,再进行统计数据。

为何这样设计? 因为后面节点是做控制,执行时可能正常通过,也可能抛 BlockException。

QPS 统计 使用滑动窗口 线程并发的统计 使用 LongAdder 接下来几个 Slot 需要通过 dashboard 进行开启,因为需要配置规则。

也可以硬编码规则到代码中。但是要调整数值就比较麻烦,每次都要改代码。