多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 一、雪崩问题及解决方案 ## 1)什么是雪崩效应 微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。 ![](https://img.kancloud.cn/15/f1/15f17a4d262514e305dbf0614312354b_1892x726.png) ![](https://img.kancloud.cn/e5/0f/e50f34ca57cf73f998064eac069ebdff_2460x786.png) ![](https://img.kancloud.cn/aa/57/aa576f354ed7bf8c7918d3a1069fb2c8_2466x694.png) ## 2)雪崩原因 导致服务雪崩的原因有如下三种: * 由于服务自身的原因,比如缓存击穿大量的请求,程序bug,硬件故障等导致服务不可用,导致雪崩 * 由于用户或者代码逻辑重试,加大了流量,导致服务雪崩 * 由于资源耗尽,导致服务调用者不可用,就是下面的雪崩效应的情况。 ## 3)解决方案 解决雪崩问题的常见方式有四种: ### 1、超时处理: 设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待 ![](https://img.kancloud.cn/a5/29/a5298baff20f03aba5ae70d51ac2c4d0_1612x840.png) ###  2、舱壁模式: 限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离。 ![](https://img.kancloud.cn/81/6f/816fa09adc97c4fbbd98473379188c7b_1264x728.png) ### 3、熔断降级: 由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。 ![](https://img.kancloud.cn/fa/f9/faf9b89807a9fb3efe38112d0670b52a_2506x800.png) ###4、流量控制: 限制业务访问的QPS,避免服务因流量的突增而故障。 ![](https://img.kancloud.cn/9a/d3/9ad34610fbcb5b85c912c260cda14070_2426x606.png) # 二、服务保护技术对比 ![](https://img.kancloud.cn/c6/e1/c6e175d7d79aa1115ed4fc17ac66ed91_1001x526.png) # 三、Sentinel介绍和安装 ## 1)认识Sentinel Sentinel是阿里巴巴开源的一款微服务流量控制组件。 Sentinel 具有以下特征: * 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。 * 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。 * 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。 * 完善的 SPI 扩展 * 点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。 ## 2)安装Sentinel控制台 ### 1、下载jar包 sentinel官方提供了UI控制台,方便我们对系统做限流设置。 ``` java -jar sentinel-dashboard-1.8.1.jar ``` ### 2、访问控制台页面 localhost:8080 即可看到控制台页面,默认的账户和密码都是sentinel ![](https://img.kancloud.cn/27/fc/27fc326b92bb88928c13d7114ba288bd_2560x1251.png) ### 3、修改配置 如果要修改Sentinel的默认端口、账户、密码,可以通过下列配置: ![](https://img.kancloud.cn/0a/97/0a974996d509ea2746476f9542bd0f14_993x216.png)  例如:如果8080端口占用了,可用8090端口 ~~~ java -jar sentinel-dashboard-1.8.1.jar -Dserver.port=8090 ~~~ # 四、微服务整合Sentinel 我们在order-service中整合Sentinel,并且连接Sentinel的控制台,步骤如下: ## 1)引入sentinel依赖: ``` <!--sentinel--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> ``` ## 2)配置控制台地址: ``` cloud: nacos: server-addr: localhost:10086 #nacos地址 sentinel: transport: dashboard: localhost:8080 #sentinel 控制台地址 ``` ## 3)访问微服务的任意端点,触发sentinel监控 ![](https://img.kancloud.cn/38/e7/38e788d4be529d1eb1f8db5b7071cd41_2836x1386.png)