外观
一,初试 Sentinel
雪崩问题及解决⽅案
什么是雪崩效应:
在redis中 :雪崩就是指缓存中的数据集中过期失效 ( 或集群宕机- 扫地的⼜把我服务器的电源踢掉了 | 服务 器节点宕 机 | 服务器断⽹ )
在微服务中:微服务调⽤链路中的某个服务故障,引起整个链路中的所有微服务都不可⽤,这就是雪崩。

上图:此时所有请求 D 服务的都会被搁置,占⽤ tomcat 资源,当达到⼀定数量之后 tomcat 资源也随之耗尽

上图: 有 D 引发 A ,由 A ⼜引发其他⼀系列相关的服务出现故障,这就是微服务的雪崩。
解决雪崩问题的常⻅⼿段有四种:
⼿段 1 : 超时处理:设定超时时间,请求超过⼀定时间没有响应就返回错误信息,不会⽆休⽌等待

⼿段 2 :舱壁模式 ( 豪猪中的线程池隔离 ) :设置 tomcat 线程池限定每个业务能使⽤的线程数,避免耗尽整个 tomcat 的资源,因此也叫线程隔离。

⼿段 3 :熔断降级:由断路器统计业务执⾏的异常⽐例,如果超出阈值则会熔断该业务,拦截访问该业务的⼀切请求。

⼿段 4 :流量控制:限制业务访问的 QPS ,避免服务因流量的突增⽽故障。

** 总结: 什么是雪崩问题?**
微服务之间相互调⽤,因为调⽤链中的⼀个服务故障,引起整个链路都⽆法访问的情况。 如何避免因瞬间⾼并发流量⽽导致服务故障? 流量控制 如何避免因服务故障引起的雪崩问题? 超时处理 线程隔离 降级熔断
- ,为防止雪崩服务保护技术对⽐ (Sentinel与之前学习的Hystrix对比)

** 我们重点关注⼀下红⾊的部分:**
1 隔离策略 信号量隔离:当业务请求的时候 tomcat 不会直接创建线城池,⽽是去统计当前业务已经使⽤⼏个线程,如果超 时限制阈值,则不允许在开启线程。 线城池隔离 (Hystrix 默认 ) :上⾯的案例我们讲述的就是线城池隔离,当⼀个请求进⼊到 tomcat 之后, Hystrix 会给每⼀个独⽴的业务创建⼀个隔离的线城池,这样就会⽐ tomcat 直接处理业务多出成倍的线程,线 程⼀旦过多, CPU 压⼒也会随之增⻓,虽然隔离性⽐较好,但也是牺牲了服务的性能达到隔离的⽬的。
熔断降级策略 慢调⽤ / 异常⽐例:业务耗时久 / 出现异常 失败⽐例:也是基于异常⽅式,请求失败。
限流
流量整形:突发⾼并发⽀持预热排队使其匀速请求
控制台
, Sentinel介绍和安装 (由上述可以看出Sentinel的功能更加全面)
Sentinel 是阿⾥巴巴开源的⼀款微服务流量控制组件。官⽹地址: https://sentinelguard.io/zh-cn/index.html
** Sentinel 具有以下特征 😗*
丰富的应⽤场景: Sentinel 承接了阿⾥巴巴近 10 年的双⼗⼀⼤促流量的核⼼场景,例如秒杀(即突发流量控制 在系统容量可以承受的范围)、消息削峰填⾕、集群流量控制、实时熔断下游不可⽤应⽤等。
完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接⼊应⽤的单台机器秒级数据,甚⾄ 500 台以下规模的集群的汇总运⾏情况。
⼴泛的开源⽣态: Sentinel 提供开箱即⽤的与其它开源框架 / 库的整合模块,例如与 Spring Cloud 、 Dubbo 、gRPC 的整合。您只需要引⼊相应的依赖并进⾏简单的配置即可快速地接⼊ Sentinel 。
完善的 SPI 扩展点: Sentinel 提供简单易⽤、完善的 SPI (Java 扩展接⼝ ) 扩展接⼝。您可以通过实现扩展接 ⼝来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
** sentinel 官⽅提供了 UI 控制台,⽅便我们对系统做限流设置。⼤家可以在 GitHub 下载。课前资料提供了下载好的jar **

将其 copy 到⼀个⾮中⽂⽬录,⽬录下输⼊命令: (cmd到命令提示符窗口)
java -jar sentinel-dashboard-1.8.1.jar

然后访问: localhost:8080 即可看到控制台⻚⾯,默认的账⼾和密码都是 sentinel

- , **微服务整合Sentinel 引⼊ cloud-demo 要使⽤ Sentinel 肯定要结合微服务,这⾥我们使⽤ SpringCloud 实⽤篇中的 cloud-demo ⼯程。没有的⼩伙伴可以 在课前资料中找到: **

我们在 order-service 中整合 Sentinel ,并且连接 Sentinel 的控制台,步骤如下: 引⼊ sentinel 依赖:

修改 application.yaml ⽂件,添加下⾯内容:

访问 order-service 的任意端点 打开浏览器,访问 http://localhost:9000/order/101 ,这样才能触发 sentinel 的监控。

然后使用 Jmeter 压力侧式工具进行测试访问就会可以在sentinel网址http://localhost:8080/看到访问记录
然后对当前服务进行一系列防止雪崩效应进行设置(如下图具体不在列出来)
