服务保护
雪崩问题/级联失败问题
某个服务出现异常导致众多服务请求阻塞,导致集群不可用
解决方案:
-
请求限流:限制或控制接口访问的并发流量,避免服务因流量激增而出现故障。
-
线程隔离:将不同服务的请求分给不同的线程池,限制每个线程池的线程数量
-
服务熔断:在线程隔离的基础上,避免大量请求在线程池前等待导致故障
-
编写服务降级逻辑:就是服务调用失败后的处理逻辑,根据业务场景,可以抛出异常,也可以返回友好提示或默认数据。
-
异常统计和熔断:统计服务提供方的异常比例,当比例过高表明该接口会影响到其它服务,应该拒绝调用该接口,而是直接走降级逻辑。
-
可由断路器同级服务调用的异常比例、慢请求比例,若超出阈值则会熔断该服务。断路器仅开启一段时间,到达时间后进行一次放行测试,如果依然超出阈值,则继续熔断

-
-
服务保护技术
| Sentinel | Hystrix | |
|---|---|---|
| 线程隔离 | 信号量隔离 | 线程池隔离/信号量隔离 |
| 熔断策略 | 基于慢调用比例或异常比例 | 基于异常比例 |
| 限流 | 基于QPS,支持流量整形 | 有限的支持 |
| Fallback | 支持 | 支持 |
| 控制台 | 开箱即用,可配置规则、查看秒级监控、机器发现等 | 不完善 |
| 配置方式 | 基于控制台,重启后失效 | 基于注解或配置文件,永久生效 |
Sentinel
阿里巴巴开源的一款服务保护框架
Sentinel 的使用可以分为两个部分:
-
核心库(
Jar包):不依赖任何框架/库,能够运行于Java 8及以上的版本的运行时环境,同时对Dubbo / Spring Cloud等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。 -
控制台(
Dashboard):Dashboard主要负责管理推送规则、监控、管理机器信息等。
使用:
-
放在任意纯英文路径下 ,启动
shell控制台,运行:java '-Dserver.port=8090' '-Dcsp.sentinel.dashboard.server=localhost:8090' '-Dproject.name=sentinel-dashboard' '-jar' sentinel-dashboard-1.8.6.jar其它启动时可配置参数可参考官方文档:https://b11et3un53m.feishu.cn/wiki/QfVrw3sZvihmnPkmALYcUHIDnff#AlXcdXIfQotaH9xDR32crYg5nyf
-
访问 http://localhost:8090 页面,就可以看到
sentinel的控制台账号密码都是
sentinel,登录后默认监控sentinel-dashboard本身