作者:屿山
Sentinel 是阿里巴巴集团开源的,面向分布式、多语言异构化服务架构的流量治理组件,承接了阿里巴巴近 15 年的双十一大促流量的核心场景,例如秒杀、冷启动、消息削峰填谷、集群流量控制、实时熔断下游不可用服务等,是保障微服务高可用的利器。开源以来也被众多企业广泛应用于生产实践。
在功能上主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。同时 Sentinel 将会在未来的 2.0 系列版本中,进一步支持流量路由、流量染色与标透传、异常流量调度、预热调权等能力。在生态对接以及使用方式上也会更加贴近云原生。由流量防护升级为流量治理与自愈,扩大场景边界,从原来的只覆盖运行时稳定性,增加了变更态稳定性治理,覆盖服务全生命周期的稳定性,为业界提供统一的流量治理能力与标准化的治理方式。
近期 Sentinel 1.8.7 正式发布,该版本基于 1.8.6 新增了多项特性和改进。主要新特性及改进如下:
详情请参考 Release Notes [ 1] 。感谢为该版本付出的所有贡献者:@sczyh30, @wuwen5, @xiaozzzi, @EzrealOf, @wilsonwu, @kirklin, @garroshh, @JosephZhang3, @LiYangSir, @Yan1025, @wenshao, @pandaapo, @frank-zsy, @z521598, @LearningGp, @robberphex, @clara0, @karl-sy, @SaaiVenkat。
Sentinel 一直以来支持资源名称的规则配置,但在实际的生产时间中,会存在对某一组的接口进行批量配置的需求,因此在 1.8.7 版本中,我们引入了资源名称支持正则匹配的新特性来支持更加灵活的资源匹配,提高配置效率。
下面是一个简单的示例(代码详见 sentinel-demo-basic 的 FlowQpsRegexDemo 类),首先我们构建正则匹配的流控规则。
//匹配以 /A/ 为前缀的资源名
private static final String KEY = "/A/.*";
private static void initFlowQpsRule() {
List rules = new ArrayList();
FlowRule rule1 = new FlowRule();
rule1.setResource(KEY);
// set limit qps to 20
rule1.setCount(20);
rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule1.setRegex(true);
rule1.setLimitApp("default");
rules.add(rule1);
FlowRuleManager.loadRules(rules);
}
然后我们对 /A/a , /A/c,/B/a 三种资源分别发起请求,从输出中随机截取一部分可以看到 /A/a 资源以及 /A/c 资源匹配正则表达式,因此限流规则生效 pass qps 为 20,而 /B/a 资源由于不匹配正则表达式 pass qps 等于 total qps,符合预期,功能生效。
90 /A/a send qps is: 375
1703753361846, total:375, pass:20, block:355
90 /A/c send qps is: 370
1703753361846, total:370, pass:20, block:350
90 /B/a send qps is: 383
1703753361846, total:383, pass:383, block:0
89 /A/a send qps is: 366
1703753362850, total:366, pass:20, block:346
89 /A/c send qps is: 392
1703753362850, total:392, pass:20, block:372
89 /B/a send qps is: 357
1703753362850, total:357, pass:357, block:0
在之前的版本中,Sentinel 的指标只能够通过日志或是控制台查看,但是存在诸多弊端,因此在 1.8.7 版本中我们对接了 Prometheus 这一云原生时代下流行的可观测组件,通过扩展的方式将指标暴露给 Prometheus。
下面是一个简单的示例(详见 sentinel-prometheus-metric-exporter 的 README.md 文件 )。
com.alibaba.csp
sentinel-prometheus-metric-exporter
1.8.7
io.prometheus
simpleclient
0.3.0
io.prometheus
simpleclient_httpserver
0.3.0
scrape_configs:
- job_name: 'sentinelMetrics'
static_configs:
- targets: ['localhost:9092']
# Note: the port needs to be the same as the value in the configuration (csp.sentinel.prometheus.fetch.port)
最终的效果如下:
在将来的一段时间内,1.8.x 系列和 2.0 系列将保持并行演进,欢迎社区积极参与到新版本的建设中。可以使用钉钉搜索群号加入 Sentinel 社区群,钉钉群号:21977771。
1.8.x 版本自发布以来,持续深耕流量防护领域,后续还会在流量防护领域保持持续演进,并对一些基础结构、机制以及模型进行优化和重构,在提供更加完善的流量防护能力的同时,向 Sentinel 2.0 版本平稳过渡。
Sentinel 2.0 品牌由流量防护升级为流量治理与自愈,扩大场景边界,为业界提供统一的流量治理能力与标准化的治理方式,同时更加贴近云原生。Sentinel 2.0 新的能力包括但不限于:流量路由、流量染色与标透传、异常流量调度、预热调权等,从原来的只覆盖运行时稳定性,增加了变更态稳定性治理,覆盖服务全生命周期的稳定性,为业界提供统一的流量治理能力与标准化的治理方式。
相关链接:
[1] Release Notes
https://github.com/alibaba/Sentinel/releases/tag/1.8.7