本文共 2054 字,大约阅读时间需要 6 分钟。
近日,我在整理代码仓库时意外发现了被尘封接近两年之久的Sentinel源码库。这次机会让我有机会再次深入了解这是一款阿里开源的流量治理组件。
Sentinel的定义是分布式、多语言异构化服务架构的流量治理组件。它以流量为切入点,提供了从路由、控制、整形、熔断降级到系统自适应保护等多维度功能,帮助开发者保障微服务的稳定性。
在Sentinel中,资源是保护的对象,通常以接口为单元。资源名称默认为接口路径,Sentinel通过API定义规则,每个规则对应一个资源。
规则分为流量控制、熔断降级和系统保护三类,实现不同的流量管理效果。规则的灵活性是Sentinel的一大优势,允许开发者根据实际需求进行精细化配置。
Sentinel的实现基于责任链模式,每个资源有且仅有一个处理链。核心是ProcessorSlot接口的实现类,默认有8个处理器Slot:
默认处理顺序如下:
在实际项目中,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
创建控制器:
@RestControllerpublic class SentinelDemoController { @GetMapping("/sayHello") public String sayHello() throws InterruptedException { return "hello"; }} 配置文件:
server.port: 9527spring.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,测试接口被限流效果:
限流处理默认使用BlockException,可以通过自定义BlockExceptionHandler实现个性化处理。
Sentinel提供Dashboard控制台,支持动态修改规则。配置控制台IP和端口:
spring.cloud.sentinel.transport.dashboard: localhost:8080
访问控制台登录,默认用户名密码为sentinel,添加规则后即可实时看到效果。
通过上述实践,Sentinel展现了其强大流量治理能力。从简单的qps限流到复杂的熔断降级,Sentinel为开发者提供了全方位的流量管理解决方案。
Sentinel的源码和示例项目可通过以下仓库获取:
欢迎加入我的技术交流群,一起探讨更多技术内容!
转载地址:http://csqfk.baihongyu.com/