0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Sentinel扩展性设计机制分析

电子设计 2018-10-26 10:03 次阅读

Sentinel 提供多样的 SPI 接口用于提供扩展的能力。用户可以在用同一个 sentinel-core 的基础上自行扩展接口实现,从而可以方便地给 Sentinel 添加自定义的逻辑。 初始化逻辑扩展机制 为了统一初始化的流程,我们抽象出了 InitFunc 接口代表 Sentinel 的一些初始化逻辑,如: 注册动态规则源(示例) 注册 StatisticSlot 回调函数(示例) 启动 Command Center 初始化心跳发送 我们可以通过注解设置 InitFunc 执行的优先级。

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:

然后实现一个 SlotChainBuilder,可以在 DefaultSlotChainBuilder 的基础上将我们新的 slot 添加到链的尾部(当然也可以不用 DefaultSlotChainBuilder,自由组合现有的 slot):

最后在 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 添加自定义的命令。

作者:云栖社区 中间件小哥

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SPI接口
    +关注

    关注

    0

    文章

    251

    浏览量

    33934
  • Sentinel
    +关注

    关注

    0

    文章

    8

    浏览量

    7109
收藏 人收藏

    评论

    相关推荐

    扩展性的优点:从彼得·帕克(Peter Parker)到引脚复用

    通常情况下,蜘蛛侠在寻找可攀附的建筑物时,可扩展性是考量的重要因素。虽然供电设计并非典型的超级英雄配备,但设计的可扩展性往往与满足设计的需求同样重要。
    发表于 06-12 15:17 1458次阅读
    可<b class='flag-5'>扩展性</b>的优点:从彼得·帕克(Peter Parker)到引脚复用

    Facebook的扩展性挑战讨论

    今天我们一起来了解Facebook背后的软件,看看作为当今世界上访问量最大的网站之一,Facebook是如何保证5亿用户的系统一直稳定可靠的运行。 Facebook的扩展性挑战
    发表于 07-17 07:22

    支持多内核可扩展性的网关,不看肯定后悔

    支持多内核可扩展性的网关,不看肯定后悔
    发表于 05-25 06:49

    请问处理器扩展性有什么重要之处?

    处理器扩展性有什么重要之处?
    发表于 06-17 09:51

    多机飞行仿真系统扩展性研究

    针对以往多机飞行仿真系统中存在扩展性差的问题,在利用新一代分布式仿真技术框架结构开发该系统的基础上,采用时间同步和数据过滤的方式来提高系统的扩展性。从基于HLA 协议开
    发表于 05-12 17:06 22次下载
    多机飞行仿真系统<b class='flag-5'>扩展性</b>研究

    OpenStack 企业私有云需大规模扩展性支持

    扩展性(Scalability)是云的基本要素之一,因此对 OpenStack 云也不例外。 一方面,和已经非常成熟的公有云和私有云方案相比,目前的 OpenStack 在扩展性方面还有很多的不足
    发表于 10-11 10:25 0次下载
    OpenStack 企业私有云需大规模<b class='flag-5'>扩展性</b>支持

    基于软件定义网络控制可扩展性研究

    问题,对SDN控制平面可扩展性相关工作进行综述.首先分析控制平面可扩展性的影响因素并给出改善思路:在此基础上,从数据平面缓存优化、高性能控制器、分布式控制平面和控制资源优化分配4种技术路线出发,论述了主要的解决方案和研究进展,最
    发表于 12-19 18:07 0次下载
    基于软件定义网络控制可<b class='flag-5'>扩展性</b>研究

    如何解决区块链的可扩展性问题

    “可扩展性三难困境”是由以太坊联合创始人维塔利克·布特林创造的一个术语。假设区块链系统只能具有以下三种属性中的两种: · 去中心化——系统中的每个参与者只能访问O(c)资源 · 可扩展性
    发表于 03-20 10:30 1976次阅读

    区块链可扩展性的要点分别是什么

    大多数关于可扩展性的讨论都围绕着各种平台每秒可以处理的交易数量。
    发表于 10-31 09:31 2335次阅读

    区块链可扩展性有怎样的要点

    很难说谁的可扩展性方法最终会更可行。然而,如果每个参与者都认识到存在的选择比表面上的要多,那就更好了。
    发表于 03-07 14:40 708次阅读

    影响软件高可扩展性的六大因素

    软件可扩展性是一个有趣的话题。实现软件可扩展性涉及很多因素,我们在本文将讨论一些与开发和运维方面相关的因素。
    的头像 发表于 02-17 16:13 8408次阅读
    影响软件高可<b class='flag-5'>扩展性</b>的六大因素

    什么是可扩展性,为什么它很重要

    扩展性是按需轻松扩展或升级的能力。它是产品、系统、团队或公司提供满足不断增长的需求的服务的能力。提供足够的基础设施来满足更苛刻的IT要求,例如增加存储和安全性,同时保持低成本,是数据中心运营商的日常斗争。
    的头像 发表于 04-21 10:36 3589次阅读
    什么是可<b class='flag-5'>扩展性</b>,为什么它很重要

    SD-WAN组网的可扩展性怎么样?

    SD-WAN组网具有很好的可扩展性,能够轻松满足企业网络不断扩张和增长的需求,同时保持网络的高效和可管理性,这使得SD-WAN组网能够随着企业的快速发展而快速调整规模,变更拓扑,采取不同的接入方式
    的头像 发表于 08-18 11:29 313次阅读

    扩展性对物联网管理系统有哪些影响?

    扩展性对于物联网管理系统的设计和开发非常重要,它直接影响着系统的性能、可靠性和能耗等方面,是评估一个系统优劣的重要因素之一。可扩展性对物联网管理系统的影响主要体现在以下几个方面:    设备兼容性
    的头像 发表于 09-19 11:23 324次阅读

    扩展性对物联网管理系统有哪些影响?

    扩展性对于物联网管理系统的设计和开发非常重要,它直接影响着系统的性能、可靠性和能耗等方面,是评估一个系统优劣的重要因素之一。可扩展性对物联网管理系统的影响主要体现在以下几个方面:
    的头像 发表于 10-11 15:15 249次阅读