微服务保护- Sentinel流控

微服务保护- Sentinel流控
海林小盆友微服务保护- Sentinel流控
Sentinel 是阿里巴巴开源的一款微服务控制组件。官网地址:[[https://sentinelguard.io/zh-cn/index.html\]\]
启动准备好的sentinel jar包
1 | java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar |
用户密码默认是sentinel
整合到微服务
- 引入依赖
1 | <!--sentinel--> |
- 配置控制台
1 | spring: |
簇点链路
簇点链路就是单机调用链路。是一次请求进入服务后经过的每一个被Sentinel监控的资源链。默认Sentinel会监控SpringMVC的每一个Endpoint(http接口)。限流、熔断等都是针对簇点链路中的资源设置的。而资源名默认就是接口的请求路径。
Restful风格的API请求路径一般都相同,这会导致簇点资源名称重复。因此我们要修改配置,把请求方式+请求路径作为簇点资源名称:
1 | spring: |
请求限流
如图操作即可
线程隔离
当商品服务出现阻塞或故障时,调用商品服务的购物车服务可能因此而被拖慢,甚至资源耗尽。所以必须限制购物车服务中查询这个业务的可用线程数,实现线程隔离。
现在我们假设说这个商品服务出现了故障
它的故障我们不说是直接宕机这种啊,我们就说是他的业务不知道什么原因(可能是数据库问题或者网路原因)导致查询的特别慢,可能2~3秒才能处理一个请求,这时候查询购物车的这个业务就得等待商品服务返回的结果,
如果现在查询购物车的并发很高,就占用了Tomcat的资源,可能会导致整个购物车服务资源耗尽 别的业务1想查询别的业务就进不来了,然后购物车服务也发生类似慢的故障,那么调用购物车的服务的其他服务也有可能出现故障,这时候就会出现雪崩
所以用到了线程隔离 – 线程隔离也属于流量控制的一部分
如图操作即可
被隔离的这个资源直接就不可用了,就好比咱们查询购物车直接查不到了,这就很尴尬,我们怎么解决呢?
Fallback
- 将FeignClient作为Sentinel的簇点资源
1 | feign: |
- FeignClient 的 Fallback有两种配置方式:
方式一:
- FallbackFactory,可以对远程调用的异常做处理,永昌都会选择这种
方式二: - FallbackClass,无法对远程调用的异常做处理
服务熔断
仅仅做线程隔离是不够的,还要进行服务熔断,因为既然知道商品服务已经挂了,还去访问他,每次都是很久才返回,就很尴尬,所以用到了服务熔断,进一步节省资源
断路器熔断状态流转图:
























