SpringCloudAlibaba-服务熔断和限流


在这里插入图片描述

响应时间(RT)🔥

​ 响应时间指系统处理请求并给予响应的过程所需要的时间,这是对系统性能的直观表现,不用的功能因业务逻辑不同,所以响应时间也不同,甚至说同一个功能在不同的参数条件下所需的响应时间也不同,数据表示,如果一个网页加载两秒以上就会有15%的用户关闭网页,如果加载3-4秒就会有50-80%的用户关闭网页,所以一个系统对请求的处理时间,直观的表现了这个系统的性能🏳‍🌈

吞吐量(Throughput)🔥

​ 吞吐量是指系统在单位时间内所能处理的请求数量,在非并发的应用系统中,吞吐量和响应时间成严格反比,但是在并发系统中,通常使用吞吐量作为性能指标

​ 吞吐量是一个比较通用的指标,两个具有不同用户数和用户使用模式的系统,如果其最大吞吐量基本一致,则可以判断两个系统的处理能力基本一致。🏁

并发用户数🔥

​ 并发用户数指的是系统可以同时承载多少用户进行正常的系统使用,并发用户数是一个更直观但是又比较笼统的性能指标,实际上,作为性能指标,并发用户数非常不准确,因为用户不同的使用模式会导致用户在单位时间里发出请求的数量不同,相比而言,在线用户作为性能指标更直观一些,而以同时发请求的用户数作为指标更准确一些🚩

QPS每秒查询率(Query Per Second)🔥

QPS每秒查询率是对一个特定服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。 (看来是类似于TPS,只是应用于特定场景的吞吐量)🏴‍☠️

什么是Sentinel?✨

Sentinel是阿里巴巴的开源项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保证服务之间的稳定性

官方网站:https://gitee.com/rmlb/Sentinel/

中文文档:https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D

阿里巴巴Sentinel官网介绍:

​ As distributed systems become increasingly popular, the reliability between services is becoming more important than ever before. Sentinel takes “flow” as breakthrough point, and works on multiple fields including flow control, traffic shaping, circuit breaking and system adaptive protection, to guarantee reliability and resilience for microservices.

随着分布式系统越来越受欢迎,服务之间的可靠性变得比以往任何时候都更加重要。 Sentinel以“流”为切入点,在流量控制、流量整形、断路、系统自适应保护等多个领域开展工作,确保微服务的可靠性和弹性。🙈

Sentinel的特征✨

  • 丰富的应用场景:Sentinel承接了近十年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统可承受范围内)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等😸
  • 完备的实时监控:Sentinel同时提供实时的监控功能。可以在控制台中看到接入应用的单台机器秒级程序,甚至500台以下规模的集群汇总运行情况👹
  • 广泛的开源生态:Sentinel提供开箱即用的与其他开源框架/库的整合模块,例如与SpringCloud、Apache Dubbo、gRPC、Quarkus的整合,只需要引入相对应的依赖并进行一些配置就可以快速接入Sentinel。同时Sentinel提供多种语言(Java/Go/C++等)的原生实现
  • 完善的SPI扩展机制:Sentinel 提供简单易用、完善的 SPI 扩展接口。可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。🐯
🌈Sentinel 的主要特性

在这里插入图片描述

🌈Sentinel 的开源生态

在这里插入图片描述

🌈Sentinel和Hystrix的区别

详情见:https://developer.aliyun.com/article/633786

Sentinel的使用✨

🌊Sentinel的使用可以分为两个部分
  • 控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等
  • 核心库(Java客户端):不依赖任何框架/库能够运行Java7及以上的版本的运行环境,同时对Dubbo/SpringCloud等框架也有较好的支持
🌊Sentinel中的管理控制台
获取Sentinel控制台💧

Jar包下载地址:https://github.com/alibaba/Sentinel/releases

在这里插入图片描述

也可以下载源码并使用mvn clean package打包成fat jar

打开Sentinel所在目录的CMD控制台

使用命令:

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.2.jar

在这里插入图片描述

启动成功之后网页输入http://localhost:8080,进行登录,默认用户名和密码都是sentinel 🌋☄

在这里插入图片描述

在这里插入图片描述

客户端接入控制台💧

在父工程中引入spring-cloud-alibaba-dependencies依赖🎄

<!--Spring-cloud-alibaba-dependencies-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>${spring.cloud.alibaba.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

在子工程引入spring-cloud-starter-alibaba-sentinel依赖🎄

<!--sentinel-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置启动参数,在yml文件中配置🎄

在这里插入图片描述

创建一个接口,并访问这个接口🎄

在这里插入图片描述

在这里插入图片描述

刷新Sentinel控制台,查看结果🎄

在这里插入图片描述

🌊使用Sentinel实现服务熔断与限流

Sentinel可以分为Sentinel核心库和Dashboard。核心库不依赖Dashboard,但是结合Dashboard会取得更好的效果

使用Sentinel实现服务熔断,主要分为三个步骤

  1. 定义资源
  2. 定义规则
  3. 检查规则是否生效

Sentinel的所有规则都可以在内存中动态查询修改,实时生效,先把可能需要保护的资源保护好,之后再配置规则

也可以理解为,只要有了资源,我们就可以在任何时候灵活地定义各种流量控制规则。在编码的时候,只需要考虑这个代码是否需要保护,如果需要保护,就将之定义为一个资源。

什么是服务熔断🎊

在我们的微服务开发中,因为不同的模块由不同的人员或者项目组甚至公司负责开发,中间涉及到服务或者模块之间的调用,一些服务或者一些模块串成了一条业务线,那如果说其中的一个服务,或者是其中的一个模块出现了问题,那是不是就代表整条业务线都无法正常使用了,甚至过分的时候整个项目都会受到影响,这个时候怎么办呢?先看图

在这里插入图片描述

这是正常的调用链,如果我们的C服务出现了问题,请求得不到处理,积压了很多请求,AB无法得到响应,线程资源耗尽,使得整个调用链路故障,会成什么样子呢?

在这里插入图片描述

像这种调用链路的连锁故障,叫做雪崩,由一个原因引起的连锁反应,这个时候,我们就需要服务熔断机制来进行挽救

在这里插入图片描述

开启熔断:

​ 在固定的时间内,如果接口的调用超时率达到一个阈值,就会开启熔断,熔断状态中,后面所有对这个服务的接口的调用都不会再经过网络,直接执行本地的默认方法,达到服务降级的效果

熔断恢复:

​ 当过了规定时间之后,服务会从熔断状态恢复成正常的状态,可以再次接收调用放的远程调用

什么是限流🎊

在这里插入图片描述

限流一般用在突然间的访问量增大的时候,比如商城做活动,有抢购,秒杀等,一瞬间的请求量非常大,可能会在一瞬间冲垮服务器,这个时候我们就要对这些请求做限流措施,保证服务器的安全

在这里插入图片描述

限流在生活中直接映照的例子就是水坝,限制了水的流速,才不会造成不可逆的后果

定义资源🎊

资源是Sentinel的关键概念。它可以是Java应用程序中的任何内容,例如,由应用程序提供的服务,或者由应用程序调用的其他应用的服务,RPC接口方法,甚至可以是一段代码

只要通过SentinelAPI定义的代码,就是资源,能够被Sentinel保护起来,大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标识资源

用法:使用@SentinelResource注解

在这里插入图片描述

属性:

  • value:定义资源名,定义过后可以在Sentinel控制台看到
  • blockHandler:定义流控方法,值为定义的流控方法的方法名,意思是如果这个资源触发流量控制,则调用自定义的流控方法
  • fallback:定义熔断降级方法,值为定义的方法名,意思是如果这个资源在调用过程中出现异常,则调用自定义的熔断降级方法

这样定义资源过后,重启服务,请求接口,刷新Sentinel控制台,就可以看到定义的资源名,可以为资源添加流控和熔断降级规则

在这里插入图片描述

添加流控规则并测试🎊

点击+流控按钮添加为资源添加流控规则

在这里插入图片描述

  • QPS:单位时间内的请求数
  • 单机阈值 2:可以自己设置,设置成几都可以,意思是每秒如果请求数量超过2次就触发流控规则
  • 流控模式——直接:是默认选中的,意思就是如果资源的每秒请求数超过两次直接进行流量控制,关联和链路后面说
  • 流控效果——快速失败:直接返回失败信息,或返回自定义流量控制方法中的返回,其他的两种后面说

在这里插入图片描述

这里可以看到定义好的流控规则,然后在代码中添加流量控制处理方法

在这里插入图片描述

重启服务、请求接口、刷新Sentinel控制台之后,再次定义一下规则,可以事先把这个写好

测试:快速访问调用getName资源的接口,查看效果

这是正常速度(1次/s),结果也是正常的

在这里插入图片描述

这是快速请求(2+次/s),返回了自定义流控处理方法中的数据

在这里插入图片描述

服务自动熔断降级🎊

服务熔断降级的前提是资源调用时出现了异常或者故障,就会触发服务熔断降级,这里我们先不配置熔断规则,我们只写一个熔断降级处理方法,也是可以的

在这里插入图片描述

在这里插入图片描述

我们不捕获异常,直接fallback添加熔断降级处理方法,定义流控规则,并快速请求,查看效果

在这里插入图片描述
)]

自定义熔断降级规则🎊

在这里插入图片描述

  • 熔断策略
    • 慢调用比例:可以理解为请求超时的超时时间,
      • 最大RT:最大超时事件,
      • 比例阈值:在一定时间内超时请求数跟总请求数的比例
      • 熔断时长:因为服务熔断之后需要恢复的,要从熔断状态恢复到正常的状态,所以这里设置熔断多久恢复到正常状态
    • 异常比例:当异常请求跟正常请求达到一定的比例
    • 异常数:当异常请求到达一定的数量

简单理解,简单使用

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LBK.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值