【转】 SpringCloudAlibaba之Sentinel流量控制 SpringCloudAlibaba微服务实战教程系列

摘要:
SpringCloudAlibaba之Sentinel流量控制SpringCloudAlibaba微服务实战教程系列一、认识下SentinelSentinel使用流程:微服务会集成Sentinel客户端,从官方下载jar启动作为服务端,在有配置变更和添加的时候Sentinel会发送消息给客户端,进行变更应用。完备的实时监控:Sentinel同时提供实时的监控功能。

【转】 SpringCloudAlibaba之Sentinel流量控制

SpringCloudAlibaba微服务实战教程系列

一、认识下Sentinel

Sentinel使用流程:微服务会集成Sentinel客户端,从官方下载jar启动作为服务端,在有配置变更和添加的时候Sentinel会发送消息给客户端,进行变更应用。

Sentinel 分为两个部分:

核⼼库:(Java 客户端)不依赖任何框架/库,能够运⾏于所有 Java 运⾏时环境,同时对 Dubbo /Spring Cloud 等框架也有较好的⽀持。
控制台:(Dashboard)基于 Spring Boot 开发,打包后可以直接运⾏,不需要额外的 Tomcat 等应⽤容器。
Sentinel 具有以下特征:
丰富的应⽤场景:Sentinel 承接了阿⾥巴巴近 10年的双⼗⼀⼤促流量的核⼼场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填⾕、集群流量控制、实时熔断下游不可⽤应⽤等。
完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接⼊应⽤的单台机器秒级数据,甚⾄ 500台以下规模的集群的汇总运⾏情况。
⼴泛的开源⽣态:Sentinel 提供开箱即⽤的与其它开源框架/库的整合模块,例如与 SpringCloud、Dubbo的整合。您只需要引⼊相应的依赖并进⾏简单的配置即可快速地接⼊ Sentinel。
完善的 SPI 扩展点:Sentinel 提供简单易⽤、完善的 SPI 扩展接⼝。您可以通过实现扩展接⼝来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
二、Sentinel简单实战

Sentinel官方版本下载地址: https://github.com/alibaba/Sentinel/releases 

快速下载启动开发环境:国内朋友可以考虑使用docker配置国内镜像源
直接执行:docker run --name sentinel -p 8858:8858 -d bladex/sentinel-dashboard

【转】 SpringCloudAlibaba之Sentinel流量控制 SpringCloudAlibaba微服务实战教程系列第1张

  1、搭建Sentinel服务端

如下下载的jar包直接执行以下命令即可启动服务。

 java -jar sentinel-dashboard-1.7.1.jar &

jar命令启动完成,登录地址http://localhost:8080,⽤户名/密码:sentinel/sentinel

docker启动完成,登录地址http://localhost:8858,⽤户名/密码:sentinel/sentinel

  2、搭建Sentinel客户端

   第一步、先引入pom文件,注意没有使用maven统一管理版本号的,需要指定version字段

        <!--借用监控开放端口-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--sentinel 核⼼环境 依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

   第二步、修改配置文件

注意:dashboard 为sentinel服务的客户端,port为客户端自己开发端口,用于接收服务端发送的限流数据,port可以随意更改。

spring:
    sentinel:
      transport:
        #sentinel dashboard/console 地址
        dashboard: 127.0.0.1:8858# sentinel会在该端⼝启动http server,那么这样的话,控制台定义的⼀些限流等规则才能发送传递过来,
        port: 8719
#暴露出来健康检查和检测的接口
management:
  endpoints:
    web:
      exposure:
        include: "*"endpoint:
    health:
      show-details: always

    第三步、启动项目访问Sentenl即可生效

【转】 SpringCloudAlibaba之Sentinel流量控制 SpringCloudAlibaba微服务实战教程系列第2张

三、Sentinel高级应用

  1、流控规则

在Sentinel服务的管理台,会列出服务的菜单,点击服务-->簇点链路-->流控,出现下图页面。 

【转】 SpringCloudAlibaba之Sentinel流量控制 SpringCloudAlibaba微服务实战教程系列第3张

重点属性介绍

资源名:
  默认请求路径
针对来源:
  Sentinel可以针对调⽤者进⾏限流,填写微服务名称,默认default(不区分来源)
阈值类型/单机阈值
  QPS:(每秒钟请求数量)当调⽤该资源的QPS达到阈值时进⾏限流
  线程数:当调⽤该资源的线程数达到阈值的时候进⾏限流(线程处理请求的时候,如果说业务逻辑执⾏时间很⻓,流量洪峰来临时,会耗费很多线程资源,这些线程资源会堆积,最终可能造成服务不可⽤,进⼀步上游服务不可⽤,最终可能服务雪崩)
是否集群:
  是否集群限流
流控模式:
  直接:资源调⽤达到限流条件时,直接限流
  关联:关联的资源调⽤达到阈值时候限流⾃⼰
  链路:只记录指定链路上的流量
流控效果:
  快速失败:直接失败,抛出异常
  Warm Up:根据冷加载因⼦(默认3)的值,从阈值/冷加载因⼦,经过预热时⻓,才达到设置的QPS阈值
  排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为QPS,否则⽆效
流控模式之关联限流
关联的资源调⽤达到阈值时候限流⾃⼰,⽐如⽤户注册接⼝,需要调⽤身份证校验接⼝(往往身份证校验接⼝),如果身份证校验接⼝请求达到阈值,使⽤关联,可以对⽤户注册接⼝进⾏限流。
流控模式之链路限流
链路指的是请求链路(调⽤链)
链路模式下会控制该资源所在的调⽤链路⼊⼝的流量。需要在规则中配置⼊⼝资源,即该调⽤链路⼊⼝的上下⽂名称。
Warm Up 模式(预热模式)
预热让通过的流量缓慢n秒内增加,经过设置的预热时间以后,到达系统处理请求速率的设定值。Warm Up 模式默认会从设置的 QPS 阈值的 1/3 开始慢慢往上增加⾄ QPS 设置值。
流控效果之排队等待
排队等待模式下会严格控制请求通过的间隔时间,即请求会匀速通过,允许部分请求排队等待,通常⽤于消息队列削峰填⾕等场景。需设置具体的超时时间,当计算的等待时间超过超时时间时请求就会被拒绝。

 2、Sentinel 降级规则模块

【转】 SpringCloudAlibaba之Sentinel流量控制 SpringCloudAlibaba微服务实战教程系列第4张

RT(平均响应时间 )
  当 1s 内持续进⼊ >=5 个请求,平均响应时间超过阈值(RT以 ms 为单位),那么在接下的时间窗⼝(以 s 为单位)之内,对这个⽅法的调⽤都会⾃动地熔断(抛出 DegradeException)。注意Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。
异常⽐例
  当资源的每秒请求量 >= 5,并且每秒异常总数占通过量的⽐值超过阈值之后,资源进⼊降级状态,即在接下的时间窗⼝(以 s 为单位)之内,对这个⽅法的调⽤都会⾃动地返回。异常⽐率的阈值范围是 [0.0, 1.0] ,代表 0% - 100%。
异常数
  当资源近 1 分钟的异常数⽬超过阈值之后会进⾏熔断。注意由于统计时间窗⼝是分钟级别的,若timeWindow ⼩于 60s,则结束熔断状态后仍可能再进⼊熔断状态。

  3、Sentinel ⾃定义兜底逻辑

注意:兜底⽅法非本类需要为static静态⽅法,同时指定资源类,可以为当前类的非静态方法,blockHandler保持返回值与参数一致的同时在添加com.alibaba.csp.sentinel.slots.block.BlockException类型的参数,用于接收sentinel异常,fallback方法为java异常返回方法

@SentinelResource注解类似于Hystrix中的@HystrixCommand注解

@SentinelResource注解中有两个属性需要我们进⾏区分,blockHandler属性⽤来指定不满⾜Sentinel规则的降级兜底⽅法,fallback属性⽤于指定Java运⾏时异常兜底⽅法
@SentinelResource 注解常用属性
  value:定义资源名唯一或共享(针对接口级别线程池)
  blockHandlerClass:指定Sentinel规则异常兜底逻辑所在class类
  blockHandler:指定Sentinel规则异常兜底逻辑具体哪个⽅法
  fallbackClass:指定Java运⾏时异常兜底逻辑所在class类
  fallback:指定Java运⾏时异常兜底逻辑具体哪个⽅法

sentinel对接nacos持久话配置

https://www.jianshu.com/p/d36f55ef2688?utm_campaign=haruki

免责声明:文章转载自《【转】 SpringCloudAlibaba之Sentinel流量控制 SpringCloudAlibaba微服务实战教程系列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java 读CSV 和 Excel【反编译系列】二、反编译代码(jeb)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

javascript书籍集合

对于前端书籍的搜集,我是有强迫症的,就一个态度:我全都要! 下面是干货,关注公众号:撩撩前端,回复相应消息码,就可以获取对应电子书。 JavaScript.DOM高级程序设计 关注公众号"撩撩前端",回复消息:026557,获取电子书籍 JavaScript网页特效范例宝典 关注公众号"撩撩前端",回复消息:408289,获取电子书籍 JavaScript...

第18章-使用WebSocket和STOMP实现消息功能

Spring 4.0为WebSocket通信提供了支持,包括: 发送和接收消息的低层级API; 发送和接收消息的高级API; 用来发送消息的模板; 支持SockJS,用来解决浏览器端、服务器以及代理不支持WebSocket的问题。 1 使用Spring的低层级WebSocket API 按照其最简单的形式,WebSocket只是两个应用之间通信的通道。...

子线程更新UI界面的2种方法

一、一般我们都会在子线程完成一些耗时的操作。 1、Android中消息机制: 2、知识点: Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message m...

TCP/IP协议族基本知识

常见的网络拓扑 两台主机通信的过程:应用进程产生消息,经由主机的 TCP/IP 协议栈发送到局域网(LAN),最后经过广域网(目前最大的广域网的因特网)中的网络设备(路由器)传给目的主机所在的局域网(LAN),最后经过局域网(LAN)将报文传送个目的主机,经由主机 TCP/IP 协议栈处理,将消息递交给目的应用程序。网络拓扑如下: 图中路由器是网络中的架...

云原生时代消息中间件的演进路线

引言 本文以一张云进化历史图开场,来谈谈云原生时代消息中间件的演进路线,但本文绝对不是“开局一张图,内容全靠编”。 从虚拟化技术诞生以来,IaaS/PaaS/SaaS概念陆续被提了出来,各种容器技术层出不穷。到2015年,Cloud Native概念应运而生,一时间,各种云厂商,云服务以及云应用都加上了“云原生”前缀。 我们也一直在思考,传统的消息中间件...

snmptrap、snmpinform和snmptrapd的详细介绍及其用法

在snmpwalk介绍及其用法一文中,介绍过net-snmp的snmpwalk的用法,殊不知,net-snmp还有trap的命令程序,可以用来测试snmp的trap方法(包括inform方法)。这些命令程序是:snmptrap、snmpinform和snmptrapd。其中: snmptrap:可以模拟snmp agent发送一个trap到snmp管理端...