Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量控制、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。
Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
Sentinel 提供简单易用、完善的 SPI(Service Provider Interface) 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCVvcbsr-1661432149712)(images/s1.png)]](https://1000bd.com/contentImg/2023/10/25/112946882.png)
流量控制是互联网应用非常重要的一个概念。Sentinel作为流量控制适配器可以把随机过来的流量调整成合适的形状。当超出服务器上限会丢弃部分请求。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ftGUZIz-1661432149716)(images/s2.png)]](https://1000bd.com/contentImg/2023/10/25/112946883.png)
灾难性雪崩效应是在服务链条中可能出现的问题。熔断降级是在服务链条中不可缺少的一部分。熔断降级就是Sentinel的一大功能。
Sentinel通过控制资源的并发数,来减少不稳定资源对其他资源的影响。当某个资源请求响应变长以后,就会逐渐累积线程数,当线程数到达一定的数量后就会拒绝其他的请求。这样不但没有线程切换的消耗,也不需要预先分配线程池的大小(或信号量的大小)。
Sentinel可以根据响应时间或异常等不稳定因素进行熔断。当调用的资源出现响应时间变长,就会拒绝访问,直到调用资源逐渐恢复。
无论是单机应用还是集群应用都会有一个负载上限,当超过负载上限就会导致单机或集群应用崩溃。Sentinel会自动监听整个单机或集群应用的入口,让入口流量达到负载均衡,保证系统在能力范围内处理最多请求。
docker pull bladex/sentinel-dashboard
docker run --name sentinel -d -p 8858:8858 --restart=always bladex/sentinel-dashboard
访问 http://192.168.8.128:8858 进入控制台,登录用户名和密码都是 sentinel 。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4nUpgoBx-1661432149719)(images/s3.png)]](https://1000bd.com/contentImg/2023/10/25/112946875.png)
新建工程 test_alibaba_sentinel 。
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.3.12.RELEASEversion>
parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Hoxton.SR12version>
<scope>importscope>
<type>pomtype>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>2.2.7.RELEASEversion>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>