Sentinel:阿里的微服务流量治理方案

正文顶部截图

阿里巴巴开源的 Sentinel,累计 Star 23k+,专注于微服务架构下的流量治理和容错。

在分布式系统中,服务之间的依赖关系越来越复杂。一个服务出问题,可能拖垮整个调用链。Sentinel 要解决的就是这个问题:怎么在流量暴增时保护系统,怎么在下游服务故障时快速止损。

Sentinel 以"流量"为切入点,覆盖了流量控制、流量整形、并发限制、熔断降级和系统自适应保护这几个方向。

README区域截图

实际场景

Sentinel 在阿里内部已经跑了十多年,每年双 11 的核心场景都有它的身影。

典型的场景包括:秒杀活动的突发流量限制,削峰填谷,下游服务不可用时的熔断,以及集群维度的流量控制。

这些不是理论上的功能,而是经过真实大流量验证过的方案。

核心能力

Sentinel 提供了实时监控能力。单机维度可以看到实时的运行状态,集群维度支持 500 节点以内的聚合监控数据。

在框架适配方面,Sentinel 和主流的微服务框架做了集成,包括 Spring Cloud、gRPC、Apache Dubbo、Quarkus 等。使用时只需要引入对应的适配依赖就行。

语言支持上,除了 Java,Sentinel 还提供了 Go、C++ 和 Rust 的原生实现。

Sentinel 也提供了 SPI 扩展接口,用户可以自定义规则管理、数据源适配等逻辑。

快速上手

Sentinel 要求 JDK 1.8 以上版本。

第一步,添加 Maven 依赖:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-core</artifactId>
    <version>1.8.10</version>
</dependency>

第二步,定义资源。用 Sentinel 的 API 把需要保护的代码包起来:

try (Entry entry = SphU.entry("HelloWorld")) {
    System.out.println("hello world");
} catch (BlockException e) {
    e.printStackTrace();
}

第三步,配置规则。比如限制某个资源每秒最多处理 20 个请求:

List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
rule.setResource("HelloWorld");
rule.setCount(20);
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rules.add(rule);
FlowRuleManager.loadRules(rules);

运行后,日志会记录每个时间窗口的通过请求数、被拦截数、异常数和平均响应时间。

控制台

Sentinel 附带了一个控制台应用,可以实时查看客户端的运行状态,也可以动态调整规则。控制台需要 Java 8 环境来构建和运行。

总结

Sentinel 解决的是微服务架构中一个很实际的问题:如何在复杂的分布式环境下保证系统的稳定性。它不是概念性的框架,而是从阿里的真实业务场景中沉淀出来的工具。如果你的系统面临流量治理或服务容错的需求,Sentinel 是一个值得考虑的选项。

定性。它不是概念性的框架,而是从阿里的真实业务场景中沉淀出来的工具。如果你的系统面临流量治理或服务容错的需求,Sentinel 是一个值得考虑的选项。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐