开发者学堂课程【Spring Cloud 微服务架构设计与开发实战 :3.6 Spring Cloud 实战集成 Sentinel 熔断限流】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/60/detail/1099
3.6 Spring Cloud 实战集成 Sentinel 熔断限流
内容介绍
一、阿里巴巴 Sentinel 熔断限流工具
二、阿里巴巴 Sentinel 分布式架构
三、阿里巴巴 Sentinel 实战 SpringCloud 下一节课
这节课主要讲的是比较重要的技术 sentinel 来解决熔断限流问题,就像早期的京东淘宝服务器,在双十一时候有时会出现卡死或者瘫痪的时候就需要升级服务器扩大集群,用限流的办法,或者是熔断的办法来保证服务器的正常操作是对于保护系统来说十分重要的策略。
一、阿里巴巴 Sentinel 熔断限流工具
1.Alibaba 微服务组件 Sentinel
(1)Sentinel:分布式系统的流量防卫兵(要能监控流量,监控错误,区于某个设置条件来做熔断)
(2)Sentinel:哨兵,流量控制、熔断降级、系统负载保护等多维
度保护服务的稳定性。
保护:保护系统的可控性。
2.Sentinel 新特性
(1)丰富的应用场景: Sentinel 承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。(这里是阿里项目最有说服力的一个地方)
(2)完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至500台以下规模的集群的汇总运行情况。
(3)广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
(Sentinel 并不是只针对 spring cloud,他是针对整个 jar war 分布式的一个生态,服务于多种分布式的一个场景)
(4)完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
3.Sentinel 对比 Hystrix
对比内容 |
Sentinel |
Hystrix
|
隔离策略 |
信号量隔离 |
线程池隔离/信号量隔离 |
熔断降级策略 |
基于响应时间或失败比率 |
基于失败比率 |
实时指标实现 |
滑动窗口 |
滑动窗口(基RxJava) |
规则配置 |
支持多种数据源 |
支持多种数据源 |
扩展性 |
多个扩展点 |
插件的形式 |
基于注解的支持 |
支持 |
支持 |
限流 |
基于QPS,支持基于调用关 |
不支持 |
流量整形 |
支持慢启动、匀速器模式 |
不支持 |
系统负载保护 |
支持 |
不支持 |
控制台 |
开箱即用,可配置规则、查看秒级监控、机器发现等 |
不完善 |
常见框架的适配 |
Servlet、Spring Cloud、Dubbo、gRPC等 |
Servlet、Spring Cloud Netflix |
二、阿里巴巴 Sentinel 分布式架构
1. Sentinel 的逻辑架
实时监控 (熔断限流的基础,监控指标才能判断他是否是熔断) |
机器发现
|
规则配置 Sentinel控 制台 |
SpringCloud |
|
流量控制 |
线程数隔离
|
慢调用降级
|
调用链路
|
Dubbo
|
速率控制 |
集群限流
|
异常熔断
|
系统自适应保护
|
gRPC
|
调用关系限流
|
热点限流
|
削峰填谷
|
来源访问控制 |
ServiceMesh (它的工作层次更偏向底层的网络调度,与其他的不太一样) |
动态规则配置(ZooKeeper,Nacos,Apollo) |
2. Sentinel 的开源生态
他的生态较为完善,对接了各种不同的分布式场景,nginx 也可以集成,基本对接了所有的技术。
三、阿里巴巴 Sentinel 实战 SpringCloud 下一节课
首先,如果想熔断微服务,将 Sentinel 的调度端先改造一下。首先 Sentinel 的依赖包,
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artif<version>2.2.3.RELEASE</ version>
</ dependency>
这里对应的依赖要加进来,其次看制作中心,首先采集数据
#监控数据源要暴露地址
management.endpoints.web.exposure.include=*
其次要配 Sentinel 的地址,
#sentinel
spring.cloud.sentinel.transport.dashboard=127.0.0.1:8080feign.sentinel.enabled=true
指的是可以单独和 sentinel 集成没有可以单独去搜 sentinel,去下载。其次是找到 quick start,找到并加入它的包:
之后在E盘启动他的 jar 包找到他的监控面板,之后在浏览器8080登录,此时还没有实现监控,接下来调用微服务,来触发一次监控、数据采集,这个程序是9001 8087。熔断主要是和 sentinel 来对接起来,之后用改造过的9002启动,通过9002端口结合熔断的一个配置来实现熔断操作,9002与9001区别是9001的点熔端没有启用熔断。此时就有一些程序了比如实时监控等,包括请求次数等。流控规则:里面主要是有熔断限流等。此时用 hello java.调用,此时就在实时监控看到两个地方在调用并且变化是不一样的。此时如果触发熔断,在hi的上面加一个流控,阈值类型选择 QPS,单机阈值达到一个时就触发,这个只对 hi 起作用。此时这个 hi,此时就实现熔断最高就是一次。Hello 还是正常的。所以说 sentinel 控制台1.8.0是十分强大的工具,有监控,有降级,有热点,有授权等一系列工具,
和 spring cloud 也是十分支持。