东东
发布于 2024-12-17 / 0 阅读 / 0 评论 / 0 点赞

限流、降级、熔断

基础

限流,就是降低流量。

流量可以分为同时刻提交的请求数量,或者一个时间段内提交的请求数量。

当服务承受的流量超过阈值后,后续的请求就会持续堆积等待无法返回,最终导致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 框架

框架提供了可视化的配置平台,可以更清晰的进行流控、熔断降级规则配置

注意:页面中的配置随着每次的重启就会消失,需要重新进行配置,也可以通过代码进行规则编码。另外还可以引入配置中心

框架中的基本单位是资源,资源的定义可以是一段代码、一个接口、一个服务等等。

在定义资源的同时,可以为资源定义限流处理操作和降级处理操作。