Sentinel概述
Sentinel简介
背景:随着微服务的流行,服务和服务之间的稳定性变得越来越重要
Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制。流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性
Github项目:https://github.com/alibaba/sentinel
官方站点:https://sentinelguard.io/zh-cn/
官方文档:https://sentinelguard.io/zh-cn/docs/introduction.html
Sentinel中的基本概念
1.资源:被 Sentinel保护的对象就是资源
- 资源可以是应用程序中的任何内容。比如:一段代码、一个方法、或者一个服务
- 需要使用Sentinel提供的相关方式来标记一个资源
2.规则:围绕资源的实时状态设定的规则,定义了如何去保护资源方
Sentinel的核心功能
1.流量控制
问题背景:
从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究,因为任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制
流量控制有以下几个角度:
- 资源的调用关系,例如资源的调用链路,资源和资源之间的关系
- 运行指标,例如 QPS、线程池、系统负载等
- 控制的效果,例如直接限流、冷启动、排队等
Sentinel支持用户自由选择控制的角度,并进行灵活组合从而达到想要的效果
2.熔断降级
问题背景:
由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积
如何解决:
降低调用链路中的不稳定资源也是 Sentinel的使命之现为 timeout,异常比例升高的时候,则对资源的调用进行限制,并让请求快速失败【熔断降级】,避免影响到其它的资源,最终产生雪崩的效果
3.系统负载保护
问题背景:
当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应
如何解决:
Sentinel同时提供系统维度的自适应保护能力,防止雪崩,能够让系统的入口流量和系统的负载达到个平衡,保证系统在能力范围之内处理最多的请求,系统防护中重要的一环
Sentinel的组成
1.核心库(SDK):比如java客户端,不依赖任何框架/库,能够运行于所有Java 运行时环境,同时对Dubbo/SpringCloud等市面常见主流框架进行了友好适配
2.控制台(Dashboard):基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器
Sentinel社区正在将流量治理相关标准抽出到OpenSergo标准中,Sentinel作为流量治理标准实现。有关Sentinel流控降级与容错spec的最新进展,请参考opensergo-specification
Sentinel的特征
1.丰富的应用场景:Sentinel承接了阿里巴巴近 10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时断下游不可用应用等
2.完备的实时监控:Sentinel同时提供实时的监控功能。可以在控制台中看到接入应用的单台机器秒级数据,以及一定规模下的集群汇总运行情况
3.广泛的开源生态:Sentinel提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、ApacheDubbo、gRPC、Quarkus 的整合,并提供Java/Go/C++等多语言的原生实现
4.完善的SPI扩展机制:Sentinel提供简单易用、完善的SPI扩展接口。您可以通过实现扩展接口来快速地定制逻辑
Sentinel的主要特性
Sentinel的开原生态
Sentinel的工作
1.对主流框架提供适配或者显示的API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析
2.根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel提供开放的接口,方便您定义及改变规则
3.Sentinel提供实时的监控系统,方便您快速了解目前系统的状态
总结:
Sentinel的核心就是定义资源和为资源设置规则