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

    文章

    258

    浏览量

    34381
  • Sentinel
    +关注

    关注

    0

    文章

    10

    浏览量

    7148
收藏 人收藏

    评论

    相关推荐

    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>研究

    为什么区块链扩展性如此困难

    扩展性的争论遍及整个数字货币社区。随着一些重大事件的发生,在短短几天时间内,就会导致整个以太网络的崩溃,比如CryptoKitties。正如大家所知道的,当前状态下最大的公共区块链不能处理过多的事务,因此需要扩展
    发表于 12-13 14:51 1260次阅读

    如何使用BPL和DLL进行程序的扩展性资料说明

    本文档的主要内容详细介绍的是如何使用BPL和DLL进行程序的扩展性资料说明。
    发表于 05-17 18:05 0次下载
    如何使用BPL和DLL进行程序的<b class='flag-5'>扩展性</b>资料说明

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

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

    如何提高比特币的可扩展性

    多年来,比特币社区就如何提高比特币的可扩展性提出了各种各样的建议,但总体上还没有能够达成全面共识。这就是为什么我们目前有几个类似比特币的网络从原始网络分支出来。
    发表于 03-07 08:54 1360次阅读

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

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

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

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

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

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

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

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

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

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