SpringCloudAlibaba读书日志第七章限流与熔断

微服务限流与熔断

计数器算法

指在指定周期内累加访问次数,访问次数达到一定阈值,触发限流策略,进入下一个时间周期时访问次数清零。

可以用在短信验证码
临界问题

在这里插入图片描述

滑动窗口算法

滑动窗口算法是为了解决临界问题。滑动窗口算法时一种流量控制技术,基于TCP的网络通信协议中,就采取了滑动窗口算法来解决网络拥塞的情况。

滑动窗口算法原理是在固定窗口中分割出多个小时间窗口,分别在每个小时间窗口中记录访问次数,然后根据时间将窗口期往前滑动并删除过期的小时间窗口。最终只需要统计滑动窗口范围内的所有小时间窗口总的计数。

在这里插入图片描述

令牌桶限流算法

令牌桶是网络流量整形(Traffic Shaping)和速度限制(Rate Limiting)中最常使用的一种算法。对于每一个请求,都需要从令牌桶中申请一个令牌,如果没有令牌,就会触发限流策略。
在这里插入图片描述

令牌桶 QPS=10 有以下情况
  1. 请求速度大于令牌生成速度:那么令牌会很快被取完,后续在进来的请求就会被限流。
  2. 请求速度等于令牌生成速度:此时流量处于平稳状态。
  3. 请求速度小于另外生成速度:说明此时系统的并发量不高,请求能被正常处理。

因为令牌桶的固定大小,当前请求数大于生成速度是,令牌桶会被填满,所以令牌桶可以处理突发流量,也就是在短时间内新增的流量系统能够正常处理,这是令牌桶的特性。

漏桶限流算法

漏桶限流算法的主要作用是控制数据注入网络的速度,平滑网络的突发流量。
在这里插入图片描述

特点

不管生产者的请求量有多大,消息的处理能力取决于消费者。常用在消息中间件。

存在的坑
  1. 请求速度大于漏桶流出的水滴速度:也就是请求数超出当前服务所能处理的极限,将会触发限流策略。
  2. 请求的速度小于或等于漏桶流出的水滴速度:也就是服务端的处理能力正好满足客户端的请求量。服务正常处理。

服务熔断与降级

说明是服务熔断

服务熔断是指在分布式框架下,一个完整的请求是需要经过多个服务器提供的服务,那么当中间某一个服务奔溃后,比如请求超时、服务异常等行为,为了防止整个系统出现雪崩效应,将暂时停止对该服务的调用,断开与外部服务的链接,当触发了熔断之后,对该服务的请求都会直接报错,知道服务恢复为止。

服务降级

服务降级常见方案

  1. 平均响应时常:比如1s内持续进入5个请求,对应是个的平均响应时间超过阈值,那么接下来在一个固定的时间窗口内,对这个方法请求就会自动熔断。
  2. 异常比例:当某个方法每秒调用所获的的异常总数的比例超过设定的阈值时,该资源会自动进入降级状态,也就是在接下来的一个固定时间窗口中,对这个方法的调用都会自动返回。
  3. 异常数量:和异常比例类似,总计的事固定时间窗口内异常出现的数量超过了阈值,就会触发自动降级。

分布式限流框架Sentinel

Sentinel特性

  1. 丰富的应用场景:几乎涵盖了所有的应用场景,如秒杀、削峰填谷、集群流量控制。
  2. 实时监控:Sentinel提供了实时监控功能,开发者可以在控制台中看到介入应用的带台机器秒级数据,设置500台一下规模的集群汇总运行情况。
  3. 开原生态支持:Sentinel提供开箱即用的与其他开源框架/库的整合,例如与Spring Cloud、Dubbo、gRPC的整合。
  4. SPI扩展支持:Sentinel提供了SPI扩展点支持,开发者可以通过扩展点来定制化限流规则,动态数据源适配等需求。

Sentinel 的组成

  1. 核心库:不依赖任何框架/库,他支持机器发现,以及将看情况管理、监控、规则管理和推送的功能。
  2. 控制台:基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

Sentinel的使用

基本使用步骤
  1. 定义资源
  2. 定义限流规则
  3. 检查规则是否生效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Alibaba 提供了多种服务限流的解决方案,其中比较常用的是通过使用 Sentinel 来实现服务限流。 Sentinel 是阿里巴巴开源的一款强大的流量控制组件,它提供了实时监控、熔断降级、系统保护等功能。下面简单介绍一下在 Spring Cloud Alibaba 中如何使用 Sentinel 进行服务限流。 首先,需要在项目的依赖中引入 Sentinel 相关的依赖,可以在 Maven 或者 Gradle 中添加如下配置: Maven: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> ``` Gradle: ``` implementation 'com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel' ``` 接下来,在启动类上添加 `@EnableSentinel` 注解,开启 Sentinel 功能。 然后,在需要进行限流的方法上添加 `@SentinelResource` 注解,并指定相应的限流规则。例如: ```java @SentinelResource(value = "hello", blockHandler = "blockHandler") public String hello() { return "Hello World"; } public String blockHandler(BlockException ex) { return "Blocked by Sentinel"; } ``` 上述代码中,`@SentinelResource` 注解中的 value 属性是资源名称,blockHandler 属性指定了限流或者熔断降级时的处理方法。 最后,可以通过 Sentinel 控制台进行限流规则的配置和查看实时监控数据。控制台的地址为:http://localhost:8080。 以上就是在 Spring Cloud Alibaba 中使用 Sentinel 进行服务限流的简单介绍,希望对你有所帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值