- NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
- ClusterBuilderSlot 则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
- StatistcSlot 则用于记录,统计不同纬度的 runtime 信息;
- FlowSlot 则用于根据预设的限流规则,以及前面 slot 统计的状态,来进行限流;
- AuthorizationSlot 则根据黑白名单,来做黑白名单控制;
- DegradeSlot 则通过统计信息,以及预设的规则,来做熔断降级;
总体的框架如下:
NodeSelectorSlot
这个 slot 主要负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级。
上述代码通过 创建了一个名为 entrance1
的上下文,同时指定调用发起者为 appA
;接着通过 SphU.entry()
请求一个 token,如果该方法顺利执行没有抛 BlockException
,表明 token 请求成功。
machine-root
/
/
EntranceNode1
/
DefaultNode(nodeA)
注意:每个 DefaultNode
由资源 ID 和输入名称来标识。换句话说,一个资源 ID 可以有多个不同入口的 DefaultNode。
以上代码将在内存中生成以下结构:
machine-root
/ \
/ \
EntranceNode1 EntranceNode2
/ \
DefaultNode(nodeA) DefaultNode(nodeA)
上面的结构可以通过调用 curl
来显示:
id: nodeA
idx origin threadNum passedQps blockedQps totalQps aRt 1m-passed 1m-blocked 1m-total
1 caller1 0 0 0 0 0 0 0 0
StatisticSlot
- clusterNode:资源唯一标识的 ClusterNode 的 runtime 统计
- origin:根据来自不同调用者的统计信息
- defaultnode: 根据上下文条目名称和资源 ID 的 runtime 统计
- 入口的统计
这个 slot 主要根据预设的资源的统计信息,按照固定的次序,依次生效。如果一个资源对应两条或者多条规则,则会根据如下次序依次检验,直到全部通过或者有一个规则生效为止:
- 指定应用生效的规则,即针对调用方限流的;
- 调用方为 other 的规则;
- 调用方为 default 的规则。
DegradeSlot
这个 slot 主要针对资源的运行 RT 以及预设规则(平均 RT 模式或异常比率模式),来决定资源是否在接下来的时间被自动降级掉。
这个 slot 会根据对于当前系统的整体情况,对入口的资源进行调配。其原理是让入口的 API 和当前系统的 API 达到一个动态平衡。
- 只在 Unix-like 的操作系统上生效