笔记大纲
- 为什么需要流控
- Sentinel概念
- Sentinel控制台
- RPC框架集成Sentinel
1.分布式系统流量问题
在分布式环境下,多个服务之间会存在频繁的依赖调用,在流量洪峰面前可能会造成某一个节点的资源耗尽或者是由于调用链依赖关系导致全链路发生故障、不可用。
一般这样的解决方案有:
- 调用超时机制:一旦超过调用配置的最高超时时间则立马释放资源,防止发生资源耗尽。
- 限流:在大流量到来时进行流量的控制。
- 熔断:类似于电路的保险丝,当调用链在一段时间内失败or超时次数达到一定的阈值就会触发`跳闸`一样的熔断逻辑,因为大概率情况下这次调用也会继续失败,避免了资源的无谓消耗。
- 降级:降级和熔断是相辅相成的,当某个服务节点发生了熔断后,那么调用方必须对这一次调用逻辑采取一些兜底或者降级的处理。
2.Sentinel概念
Sentinel是阿里开源的一款分布式服务流控组件,主要以流量为切入点,从限流、流量塑形、熔断降级、负载保护、热点防护等多个维度来进行服务的稳定性保障。
Sentinel有两大核心概念:资源、规则;
资源
:Sentinel保护的对象目标统称为资源。
规则
:流控、熔断降级的具体执行规则策略,支持动态调整。
Sentinel组件和其它微服务组件一样,SpringBoot只需要引入一个sentinel的starter即可。在项目代码中有2种开启Sentinel支持的方式:
- 硬编码方式,通过配置FlowRule来设置保护的具体资源和规则方式。
- 注解方式,@SentinelResource注解可以加在方法上面,表名这个方法就是一个被调用保护的资源,通过AOP技术就可以对该资源进行调用的流量保护。在@SentinelResource注解中需要指定
blockHandler和fallback
,其中blockFhandler是处理Sentinel抛出的异常处理,foallback代表正常的业务异常。
3.Sentinel控制台
Sentinel提供了一个可视化的UI控制台界面,在上面可以直观的看到微服务的状态和配置信息。Sentinel dashboard同样需要引入POM依赖。
Sentinel控制台可以进行一系列的监控和规则配置:
- 实时监控:监控接口调用的QPS和拒绝服务的流量等。
- 簇点链路:汇总显示微服务所监控的API列表。
- 流控规则:流量切入点有:QPS、线程数。流控模式有:直接、关联、链路。流控效果有:快速失败、Warm Up、排队等待。
- 热点参数限流:对调用频繁的接口资源进行流控。
4.RPC框架整合Sentinel
4.1 RestTemplate整合Sentinel
RestTemplate整合Sentinel熔断器支持只需要在构造RestTemplate的Bean方法上面加上@SentinelRestTemplate
注解即可,在注解里面可以配置指定具体的限流和降级配置。
4.2 Feign整合Sentinel
首先需要在yml配置文件中把feign.sentinel.enabled=true打开,然后在@FeignClient注解上面配置fallback处理降级方法。