文章目录
- Sentinel 是什么?
- Sentinel 基本概念
- 资源
- 规则
- Sentinel 功能和设计理念
- 流量控制
- 熔断降级
- 系统自适应保护
- Sentinel 是如何工作的
- Sentinel 控制台
- nacos 介绍与配置
- 实现效果
- 源码下载
- 参考文献
Sentinel 是什么?
Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来保障微服务的稳定性。
Sentinel 基本概念
资源
它可以是Java应用程序的任何内容,只要通过 Sentinel API 定义的代码,就是资源,能够被Sentinel保护起来。大部分情况下,可以使用方法签名、URL,甚至服务名称作为资源名来标识资源。
规则
围绕资源的实时状态设定规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。
Sentinel 功能和设计理念
流量控制
什么是流量控制
在网络传输中,流量控制用于调整网络包的发送数据。
Sentinel 作为调配器,可以根据系统的处理能力对流量进行控制。
流量控制的设计理念
流量控制有以下几个角度:
- 资源的调用关系,例如资源的调用链路、资源和资源之间的关系
- 运行指标,例如QPS、线程池、系统负载等。
- 控制的效果
Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活的组合、从而达到想要的效果。
熔断降级
什么是熔断降级
当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长、异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败,避免影响到其他的资源而导致级联故障。
熔断降级的设计理念
Sentinel 针对通过线程池隔离所产生的缺点采取以下解决方法:
- 通过并发线程数进行限制
Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其他资源的影响,当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积,当线程数在特定的资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。 - 通过响应时间对资源进行降级
Sentinel 还可以通过响应时间来快速降级不稳的资源,当依赖的资源出现响应时间过长之后,所有对该资源的访问都会被拒绝,直到过了指定的时间窗口之后才重新恢复。
系统自适应保护
Sentinel 同时提供系统维度的自适应保护能力。为了不使处于饱和边缘系统出现雪崩,Sentinel 提供了对应的额保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。
Sentinel 是如何工作的
Sentinel 的主要工作机制:
- 对主流框架提供适配或显示的API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
- 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
- Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。
Sentinel 控制台
- 安装 Sentinel
- 源码编译
git clone https://github.com/alibaba/Sentinel.git
cd Sentinel-1.8.0/sentinel-dashboard
mvn clean package
- 获取可执行 jar 包
点击下载 1.8.0 版本的jar包
- 启动 Sentinel
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
nacos 介绍与配置
点击查看 nacos教程
实现效果
源码下载
spring cloud alibaba 整合 sentinel 和 nacos 的源码
参考文献
Sentinel 官方教程