首页 > 其他分享 >sentinel(阿里巴巴开源的一款微服务流量控制组件)

sentinel(阿里巴巴开源的一款微服务流量控制组件)

时间:2023-05-23 19:55:04浏览次数:34  
标签:调用 请求 阈值 熔断 组件 开源 限流 sentinel

sentinel:分布式系统的流量防卫兵:以流量为切入点,从流量控制、熔断降级、系统负载均衡保护等多个维度保护服务的稳定性
sentinel 分为两部分:

  • 核心库:不依赖任何框架/库,可以运行在所有的java环境,且对Dubbo/springcloud等框架也有较好支持
  • 控制台:基于springboot开发,打包后可以直接运行,不需要额外tomcat等容器

雪崩问题:微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。
限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施
超时处理线程隔离降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。

安装使用sentinel

  • 下载控制台 jar 包(github下载), sentinel-dashboard-1.8.1.jar
  • 直接在 jar包 cmd 执行 java -jar 即可启动。 例: java -jar sentinel-dashboard-1.8.1.jar
  • 直接访问 http://localhost:8080 进入控制台登录页面。 sentinel 默认访问端口是 8080 , 默认用户名和地址都是 sentinel

微服务接入sentinel

  • 引依赖 spring-cloud-starter-alibaba-sentinel
  • 配置文件
点击查看代码
spring:
  cloud:
    sentinel:
      transport:
        dashborad: localhost:8080
* 然后访问该微服务的任意端点, 即可触发 sentinel的监控,此时可在sentinel控制台进行对该微服务的各种监控操作

簇点链路:微服务的每个接入端点都是一个 簇点链路。与之同行的有 流控降级热点授权,分别可添加该簇点对应的规则(都可添加多个)
流控模式

  1. 直接(对当前资源限流):统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
  2. 关联(高优先级资源触发阈值,对低优先级资源限流):统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流(当关联资源访问量触发阈值时,会对当前资源限流,以免影响对关联资源的影响)
  • 关联模式使用场景:两个有竞争关系的资源,一个优先级较高(更新操作),一个优先级较低(查询操作)。 例如当更新操作来不及时,就应该对查询操作进行限流
  • 链路模式中,是对不同来源的两个链路做监控。但是sentinel默认会给进入SpringMVC的所有请求设置同一个root资源,会导致链路模式失效。(设置关闭, ...sentinel.web-context-unify:false)
  1. 链路(对请求来源限流):统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流 (即只统计从指定的 入口资源 访问到 本资源 的请求)

流控效果

  • 快速失败(QPS超过阈值时,拒绝新的请求):达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。
  • warm up(QPS超过阈值时,拒绝新的请求;QPS阈值是逐渐提升的,可以避免冷启动时高并发导致服务宕机):预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。
  • 排队等待(请求会进入队列,按照阈值允许的时间间隔依次执行请求;如果请求预期等待时长大于
    超时时间,直接拒绝):让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长。(当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝)

热点参数限流:之前的限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值。
热点参数限流对默认的SpringMVC资源无效,需要利用@SentinelResource注解标记资源,要在该服务接入端点加注解@SentinelResource("hot")

隔离和降级限流是一种预防措施,虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。而要将这些故障控制在一定范围,避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了
线程隔离之前讲到过:调用者在调用服务提供者时,给每个调用的请求分配独立线程池,出现故障时,最多消耗这个线程池内资源,避免把调用者的所有资源耗尽
熔断降级:是在调用方这边加入断路器,统计对服务提供者的调用,如果调用的失败比例过高,则熔断该业务,不允许访问该服务的提供者了
不管是线程隔离还是熔断降级,都是对客户端(调用方)的保护。需要在调用方 发起远程调用时做线程隔离、或者服务熔断。
而我们的微服务远程调用都是基于Feign来完成的,因此我们需要将Feign与Sentinel整合,在Feign里面实现线程隔离和服务熔断。

FeignClient整合Sentinel

  1. 配置文件:feign.sentinel.enable: true
  2. 编写失败降级逻辑。(业务失败后,不能直接报错,而应该返回用户一个友好提示或者默认结果,这个就是失败降级逻辑。)
    • 实现FallbackFactory,实现该接口可对远程调用的异常做处理
      1. 定义类实现FallbackFactory接口并给泛型指明是哪个FeignClient的fallbackFactory
      2. 按要求重写fallbackFactory<泛型>指定feignClient泛型的 create 方法,返回一个指定泛型的 feignClient。然后可对 指定 feign端点进行异常后的兜底操作。 并在配置文件中注入 spring
      3. 在feignClient接口的 @FeignClient注解 加属性 fallbackFactory = XXXFallbackFactory.class

熔断降级

  1. 慢调用:业务的响应时长(RT)大于指定时长的请求认定为慢调用请求。 在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定的阈值,则触发熔断、
  2. 异常比例、异常数:统计指定时间内的调用,如果调用次数超过指定请求数,并且出现异常的比例达到设定的比例阈值(或超过指定异常数),则触发熔断。

标签:调用,请求,阈值,熔断,组件,开源,限流,sentinel
From: https://www.cnblogs.com/mryd/p/17422213.html

相关文章

  • element-plus 组件样式修改
    el-form-item间距.el-form-item{margin-bottom:3px;}Elmessage消息换行/*失败消息*/.el-message--error{white-space:pre-line}/*成功消息*/.el-message--success{white-space:pre-line}......
  • 我的第一个项目(十三) :组件间传值的一些方案(vuex,eventbus,localStorage)
    好家伙, 先说一下我的需求,我要组件间传值 1.eventBus前端兄弟组件传值eventbus无法使用不报错也不触发,就很奇怪//eventBus.jsimportVuefrom"vue";exportdefaultnewVue();//Mylogin.vue<buttontype="button"class="btnbtn-primary"@click="login&quo......
  • vue3.0组件封装
    组件全局祖册1.建立公共文件夹my-ui2.index.js文件导出全局祖册组件的install方法3.main.js中impotindex.js导入install方法使用并useimportmyUifrom'./components/my-ui'createApp(App).use(myUi).mount('#app')......
  • Kubernetes 控制平面组件:etcd
    Kubernetes控制平面组件:etcd¶etcd¶Etcd是CoreOS基于Raft开发的分布式key-value存储,可用于服务发现、共享配置以及一致性保障(如数据库选主、分布式锁等)。在分布式系统中,如何管理节点间的状态一直是一个难题,etcd像是专门为集群环境的服务发现和注册而设计,它提供了数据TTL失......
  • 即时通讯(IM)开源项目OpenIM对WebAssembly支持,提升web端体验
    WebAssembly是什么?2019年12月,W3C标准批准了第四种官方语言:WebAssembly(Wasm)。这种语言在结构、使用和功能方面与以前的语言有很大不同。WebAssembly是一种新的编码方式,可以在现代的Web浏览器中运行-它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并......
  • 开源协议&版权
      免费自由开源GPL开源协议:个人企业组织等可免费使用、拥有源代码,二次开发衍生模块需开源,且只可开源发布、不能销售。LGPL开源协议:个人企业组织等可免费使用、拥有源代码,二次开发衍生模块无需开源,且还可自主发布、销售。BSD开源协议:个人企业组......
  • 中国将运营自己的开源基金会
    java4all原创,欢迎关注摘要:中国将运营自己的开源基金会,由华为主导。8月10日,华为消费者业务软件部总裁王成录透露:未来的一两个月,中国的开源基金会将正式运营起来,但是正式名称尚未确定。这个开源基金会将借鉴国外的运作模式:根据大家在社区的贡献来确定大家的排名。前不久,屡次爆出GitH......
  • linux 离线安装yum组件
    以Centos7.x为例。执行如下命令查看是否有安装yum,若返回为空,则表示没安装rpm-qa|grepyum解决方法1:(适合Centos7.x)1、下载阿里云的yum安装包安装:wgethttps://mirrors.aliyun.com/centos-vault/7.4.1708/os/x86_64/Packages/yum-3.4.3-154.el7.centos.noarch.rpmwget......
  • Vue 单组件入门
    Vue基础入门一、Vue脚手架1.简介Vue的脚手架(VueCLI:CommandLineInterface)是Vue官方提供的标准化开发平台。它可以将我们.vue的代码进行编译生成htmlcssjs代码,并且可以将这些代码自动发布到它自带的服务器上,为我们Vue的开发提供了一条龙服务。脚手架官网地址:ht......
  • 【DSP视频教程】DSP视频教程第12期:TI开源分享IQmath DSP源码,适用于所有Cortex-M内核,本
    视频教程汇总帖:https://www.armbbs.cn/forum.php?mod=viewthread&tid=110519 今年TI推出MSPM0系列产品配套的SDK软件包里面将此库开源了,之前的时候也移植过IQmatb,不过只有库版本,这次竟然开源了,确实是不可多得的好资源。这个是定点库,非常适合用于M0,  M0+,  M3和不带硬件F......