博客
关于我
Sentinel为什么这么强,我扒了扒背后的实现原理
阅读量:796 次
发布时间:2023-03-22

本文共 2054 字,大约阅读时间需要 6 分钟。

Sentinel源码解析:从流量治理到系统自适应

近日,我在整理代码仓库时意外发现了被尘封接近两年之久的Sentinel源码库。这次机会让我有机会再次深入了解这是一款阿里开源的流量治理组件。

Sentinel的定义是分布式、多语言异构化服务架构的流量治理组件。它以流量为切入点,提供了从路由、控制、整形、熔断降级到系统自适应保护等多维度功能,帮助开发者保障微服务的稳定性。

资源与规则:Sentinel的核心概念

在Sentinel中,资源是保护的对象,通常以接口为单元。资源名称默认为接口路径,Sentinel通过API定义规则,每个规则对应一个资源。

规则分为流量控制、熔断降级和系统保护三类,实现不同的流量管理效果。规则的灵活性是Sentinel的一大优势,允许开发者根据实际需求进行精细化配置。

从简单到复杂:Sentinel的核心原理

Sentinel的实现基于责任链模式,每个资源有且仅有一个处理链。核心是ProcessorSlot接口的实现类,默认有8个处理器Slot:

  • NodeSelectorSlot:选择统计Node,根据入口名和调用方。
  • ClusterBuilderSlot:统计资源的总入口和调用者。
  • LogSlot:记录访问日志。
  • StatisticSlot:统计资源访问数据。
  • AuthoritySlot:黑白名单控制。
  • SystemSlot:系统级别的流量控制。
  • FlowSlot:根据统计数据限流。
  • DegradeSlot:熔断降级处理。
  • 默认处理顺序如下:

  • NodeSelectorSlot
  • ClusterBuilderSlot
  • LogSlot
  • StatisticSlot
  • AuthoritySlot
  • SystemSlot
  • FlowSlot
  • DegradeSlot
  • 代码实战:Sentinel的简单使用

    在实际项目中,Sentinel通常集成在Spring环境中。以下是基本的使用步骤:

  • 引入依赖

    org.springframework.boot
    spring-boot-starter-web
    2.2.5.RELEASE
    com.alibaba.cloud
    spring-cloud-starter-alibaba-sentinel
    2.2.5.RELEASE
  • 创建控制器

    @RestController
    public class SentinelDemoController {
    @GetMapping("/sayHello")
    public String sayHello() throws InterruptedException {
    return "hello";
    }
    }
  • 配置文件

    server.port: 9527
    spring.application.name: SentinelDemo
  • 加载规则

    static {
    List
    rules = new ArrayList<>();
    FlowRule rule = new FlowRule();
    rule.setResource("/sayHello");
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setCount(2);
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
    }
  • 测试与效果

    启动项目后,访问http://localhost:9527/sayHello,测试接口被限流效果:

  • 初始访问成功。
  • 快速多次访问达到qps阈值后,触发限流。
  • 限流处理默认使用BlockException,可以通过自定义BlockExceptionHandler实现个性化处理。

    动态规则管理

    Sentinel提供Dashboard控制台,支持动态修改规则。配置控制台IP和端口:

    spring.cloud.sentinel.transport.dashboard: localhost:8080

    访问控制台登录,默认用户名密码为sentinel,添加规则后即可实时看到效果。

    结语

    通过上述实践,Sentinel展现了其强大流量治理能力。从简单的qps限流到复杂的熔断降级,Sentinel为开发者提供了全方位的流量管理解决方案。

    Sentinel的源码和示例项目可通过以下仓库获取:

    欢迎加入我的技术交流群,一起探讨更多技术内容!

    转载地址:http://csqfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现多组输入(附完整源码)
    查看>>
    Objective-C实现多项式函数在某个点的评估算法(附完整源码)
    查看>>
    Objective-C实现多项式哈希算法(附完整源码)
    查看>>
    Objective-C实现大位数乘法(附完整源码)
    查看>>
    Objective-C实现大根堆(附完整源码)
    查看>>
    Objective-C实现奇偶检验码(附完整源码)
    查看>>
    Objective-C实现奇偶转置排序算法(附完整源码)
    查看>>
    Objective-C实现奇异值分解SVD(附完整源码)
    查看>>
    Objective-C实现子集总和算法(附完整源码)
    查看>>
    Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
    查看>>
    Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
    查看>>
    Objective-C实现字符串IP地址转DWORD地址(附完整源码)
    查看>>
    Objective-C实现字符串jaro winkler算法(附完整源码)
    查看>>
    Objective-C实现字符串manacher马拉车算法(附完整源码)
    查看>>
    Objective-C实现字符串wildcard pattern matching通配符模式匹配算法(附完整源码)
    查看>>
    Objective-C实现字符串word patterns单词模式算法(附完整源码)
    查看>>
    Objective-C实现字符串Z 函数或 Z 算法(附完整源码)
    查看>>
    Objective-C实现字符串加解密(附完整源码)
    查看>>
    Objective-C实现字符串复制功能(附完整源码)
    查看>>
    Objective-C实现字符串是否回文Palindrome算法 (附完整源码)
    查看>>