基础
限流,就是降低流量。
流量可以分为同时刻提交的请求数量,或者一个时间段内提交的请求数量。
当服务承受的流量超过阈值后,后续的请求就会持续堆积等待无法返回,最终导致Tomcat的连接数耗尽,导致服务异常。
降级,可以理解为降低执行要求。
当请求另一个服务出现异常或者无法请求的时候,并不是直接返回错误。而是在原有的执行标准上减低要求,返回一个基本可用的数据给前端
熔断,就是快速失败
熔断的条件可以有多种,可以是慢查询、查询异常、请求超时等等
通常来讲,降级和熔断会放在一起讨论。但是并不意味着降级就一定有熔断,或者熔断一定要降级。
限流技术
1、可以使用redisson 中的限流器来实现
// 初始化Redisson客户端
RedissonClient redisson = Redisson.create(config);
// 获取限流器对象
RRateLimiter rateLimiter = redisson.getRateLimiter("myRateLimiter");
// 初始化限流器,设置速率:每1秒钟最多3个请求
rateLimiter.trySetRate(RRateLimiter.RateType.OVERALL, 3, 1, RRateLimiter.IntervalUnit.SECONDS);
// 请求限流器获取许可
for (int i = 0; i < 10; i++) {
boolean acquired = rateLimiter.tryAcquire(1);
System.out.println("Request " + (i + 1) + " is allowed: " + acquired);
}
2、常用的框架是阿里提供的 sentinel 框架
框架提供了可视化的配置平台,可以更清晰的进行流控、熔断降级规则配置
注意:页面中的配置随着每次的重启就会消失,需要重新进行配置,也可以通过代码进行规则编码。另外还可以引入配置中心
框架中的基本单位是资源,资源的定义可以是一段代码、一个接口、一个服务等等。
在定义资源的同时,可以为资源定义限流处理操作和降级处理操作。