石家庄网站快速优化排名,国内做性视频网站有哪些,wordpress顶部栏,萨隆wordpressSentinel 提供多样的 SPI 接口用于提供扩展的能力。用户可以在用同一个 sentinel-core 的基础上自行扩展接口实现#xff0c;从而可以方便地给 Sentinel 添加自定义的逻辑。
初始化逻辑扩展机制
为了统一初始化的流程#xff0c;我们抽象出了 InitFunc 接口代表 Sentinel 的…Sentinel 提供多样的 SPI 接口用于提供扩展的能力。用户可以在用同一个 sentinel-core 的基础上自行扩展接口实现从而可以方便地给 Sentinel 添加自定义的逻辑。
初始化逻辑扩展机制
为了统一初始化的流程我们抽象出了 InitFunc 接口代表 Sentinel 的一些初始化逻辑如
注册动态规则源示例注册 StatisticSlot 回调函数示例启动 Command Center初始化心跳发送
我们可以通过注解设置 InitFunc 执行的优先级。当应用首次访问资源时注册的初始化函数会依次执行。若希望手动提前触发初始化可以在相应的位置如 Spring Bean调用 InitExecutor.doInit() 函数重复调用只会执行一次。
Slot Chain 扩展机制
Sentinel 内部是通过一系列的 slot 组成的 slot chain 来完成各种功能的包括构建调用链、调用数据统计、规则检查等。各个 slot 之间的顺序非常重要。Sentinel 将 SlotChainBuilder 作为 SPI 接口进行扩展使得 Slot Chain 具备了扩展的能力。用户可以自行加入自定义的 slot 并编排 slot 间的顺序从而可以给 Sentinel 添加自定义的功能。 比如我们想要在请求 pass 后记录当前的 context 和资源信息则可以实现一个简单的 slot
public class DemoSlot extends AbstractLinkedProcessorSlotDefaultNode {Overridepublic void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, Object... args)throws Throwable {System.out.println(Current context: context.getName());System.out.println(Current entry resource: context.getCurEntry().getResourceWrapper().getName());fireEntry(context, resourceWrapper, node, count, args);}Overridepublic void exit(Context context, ResourceWrapper resourceWrapper, int count, Object... args) {System.out.println(Exiting for entry on DemoSlot: context.getCurEntry().getResourceWrapper().getName());fireExit(context, resourceWrapper, count, args);}
}
然后实现一个 SlotChainBuilder可以在 DefaultSlotChainBuilder 的基础上将我们新的 slot 添加到链的尾部当然也可以不用 DefaultSlotChainBuilder自由组合现有的 slot
package com.alibaba.csp.sentinel.demo.slot;public class DemoSlotChainBuilder implements SlotChainBuilder {Overridepublic ProcessorSlotChain build() {ProcessorSlotChain chain new DefaultSlotChainBuilder().build();chain.addLast(new DemoSlot());return chain;}
}
最后在 resources/META-INF/services 目录下的 SPI 配置文件 com.alibaba.csp.sentinel.slotchain.SlotChainBuilder 中添加上实现的 SlotChainBuilder 的类名即可生效
# Custom slot chain builder
com.alibaba.csp.sentinel.demo.slot.DemoSlotChainBuilder
Sentinel 的热点限流模块就是利用了 Slot Chain 的扩展机制来将热点限流功能添加到原有的功能链中。
StatisticSlot Callback
之前 StatisticSlot 里面包含了太多的逻辑像普通 QPS 和 热点参数 QPS 的 addPass/addBlock 等逻辑统计都在 StatisticSlot 里面各个逻辑都杂糅在一起不利于扩展。因此有必要为 StatisticSlot 抽象出一系列的 callback从而使 StatisticSlot 具备基本的扩展能力并将一系列的逻辑从 StatisticSlot 解耦出来更为清晰。目前 Sentinel 提供了两种 callback
ProcessorSlotEntryCallback包含 onPass 和 onBlocked 两个回调函数分别对应请求通过 StatisticSlot 和请求被 blocked 的时候执行。ProcessorSlotExitCallback包含 onExit 回调函数当请求经 StatisticSlot exit 的时候执行。
用户只需将实现的 callback 注册到 StatisticSlotCallbackRegistry 即可生效。
动态规则源
Sentinel 的 动态规则数据源 用于从外部的存储中读取及写入规则。Sentinel 将动态规则数据源划分为两种类型读数据源ReadableDataSource和写数据源WritableDataSource从而使不同类型的数据源职责更加清晰
读数据源仅负责监听或轮询读取远程存储的变更。写数据源仅负责将规则变更写入到规则源中。
我们只需要自己实现动态规则源然后将其注册至对应的 RuleManager 上这样就可以实时地配置规则并进行拉取/推送了。注册动态规则源时可以借助 Sentinel 的 InitFunc SPI 在初始化时自动注册。
Transport 扩展机制
CommandCenter 可扩展用户可以用不同的网络协议或不同的库来实现 Transport API Server。HeartbeatSender 可扩展用户可以用不同的网络协议和心跳策略来实现心跳发送上报到控制台。CommandHandler 可扩展用户可以自行实现 CommandHandler 并注册到 SPI 配置文件中来为 CommandCenter 添加自定义的命令。
原文链接 本文为云栖社区原创内容未经允许不得转载。