sentinel—流量卫兵

  • 一. Sentinel介绍
  • 二. Sentinel使用
    • ①. sentinel dashboard的安装
      • 1.下载
      • 2.启动
      • 3.访问web界面
      • 4.登录
    • ②. sentinel 实时监控服务
      • 1.创建项目引入依赖
      • 2.配置
      • 3.启动服务
      • 4.访问dashboard界面查看服务监控
      • 5.开发服务
      • 6.启动进行调用
      • 7.查看监控界面
    • ③. sentinel 流量控制
      • QPS限流
        • 1.配置QPS流量控制
        • 2.测试
      • 线程数限流
        • 1.配置线程数限流
        • 2.访问测试
      • 流控模式
      • 流控效果
    • ④. 熔断降级
      • 降级策略
    • ⑤. SentinelResource注解

一. Sentinel介绍

  • 随着微服务的普及,服务调用的稳定性变得越来越重要。Sentinel以“流量”为突破口,在流量控制、断路、负载保护等多个领域进行工作,保障服务可靠性。
  • 用来在微服务系统中保护微服务对的作用 如何 服务雪崩 服务熔断 服务降级 就是用来替换hystrix

Sentinel哨兵使用文档传送门

  • https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_how_to_use_sentinel

GitHub哨兵介绍文档传送门

  • https://github.com/alibaba/Sentinel/wiki

二. Sentinel使用

  • sentinel提供了两个服务组件:
    一个是 sentinel 用来实现微服务系统中服务熔断、降级等功能。这点和hystrix 类似
    一个是 sentinel dashboard 用来监控微服务系统中流量调用等情况。这点和hystrix 类似

①. sentinel dashboard的安装

1.下载

  • https://github.com/alibaba/Sentinel/releases

2.启动

- 仪表盘是个jar包可以直接通过java命令启动 如: java -jar 方式运行 默认端口为 8080
- java -Dserver.port=9191 -jar  sentinel-dashboard-1.7.2.jar

3.访问web界面

  • http://localhost:9191/#/login

4.登录

  • 用户名和密码都是 sentinel

②. sentinel 实时监控服务

1.创建项目引入依赖

<!--引入nacos client依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--引入sentinel依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!-- 这个包是用做健康度监控的--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

2.配置

server.port=8789
spring.application.name=nacos_client#指定nacos服务地址
spring.cloud.nacos.server-addr=localhost:8848
#指定注册中心地址
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
#暴露所有web端点
management.endpoints.web.exposure.include=*# 开启sentinel 默认开启
spring.cloud.sentinel.enabled=true
# 连接dashboard
spring.cloud.sentinel.transport.dashboard=localhost:9191
# 与dashboard通信的端口
spring.cloud.sentinel.transport.port=8719

3.启动服务

@SpringBootApplication
@EnableDiscoveryClient  //开启注册与发现
public class NacosClient8789Application {public static void main(String[] args) {SpringApplication.run(NacosClient8789Application.class, args);}}

4.访问dashboard界面查看服务监控

  • 默认情况下sentiel为延迟加载,不会在启动之后立即创建服务监控,需要对服务进行调用时才会初始化

5.开发服务

    @GetMapping("/test/test")public String test(){log.info("进入test服务!!!");return "test服务调用成功!!!";}

6.启动进行调用

  • http://localhost:8789/sentinel/test

7.查看监控界面

③. sentinel 流量控制

  1. 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

  2. 同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历,直到有规则触发限流或者所有规则遍历完毕。

  3. 一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果:

     resource:资源名,即限流规则的作用对象count: 限流阈值grade: 限流阈值类型(QPS 或并发线程数)limitApp: 流控针对的调用来源,若为 default 则不区分调用来源strategy: 调用关系限流策略controlBehavior: 流量控制效果(直接拒绝、Warm Up、匀速排队)
  1. 流量控制主要有两种统计类型,一种是统计并发线程数,另外一种则是统计 QPS

流量控制官网文档传送门

QPS限流

1.配置QPS流量控制

2.测试

一直按刷新按钮就能看到效果

  • 每秒只能最大接收1个请求,超过1个报错

线程数限流

1.配置线程数限流

2.访问测试

使用Jmeter工具进行测试

流控模式

  1. 直接:标识流量控制规则到达阈值直接触发流量控制

  2. 关联: 当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢,举例来说,read_db 和 write_db 这两个资源分别代表数据库读写,我们可以给 read_db 设置限流规则来达到写优先的目的:设置 strategy 为 RuleConstant.STRATEGY_RELATE 同时设置 refResource 为 write_db。这样当写库操作过于频繁时,读数据的请求会被限流。

  3. 链路限流

流控效果

  • 直接拒绝:(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。

  • Warm Up:(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。

冷启动文档传送门

https://github.com/alibaba/Sentinel/wiki/%E9%99%90%E6%B5%81—%E5%86%B7%E5%90%AF%E5%8A%A8

  • 匀速排队:(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。 只能对请求进行排队等待

匀速排队文档传送门

https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6-%E5%8C%80%E9%80%9F%E6%8E%92%E9%98%9F%E6%A8%A1%E5%BC%8F


④. 熔断降级

熔断降级文档传送门

https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

  • 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

降级策略

  • 平均响应时间 (DEGRADE_GRADE_RT):当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位),那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。

  • 异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求量 >= N(可配置),并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

  • 异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。

⑤. SentinelResource注解

SentinelResource注解文档传送门

https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81

 @GetMapping("/sentinel/test1")@SentinelResource(value = "aa",blockHandler = "fallBack",fallback = "fall")public String test1(int id){log.info("sentinel test1");if(id<0){throw new RuntimeException("非法参数!!!");}return "sentinel test1 :"+id;}//降级异常处理public String fallBack(int id, BlockException e){if(e instanceof FlowException){return "当前服务已被流控! "+e.getClass().getCanonicalName();}return "当前服务已被降级处理! "+e.getClass().getCanonicalName();}//异常处理public String fall(int id){return "当前服务已不可用!";}



SpringCloud_Alibaba微服务学习---sentinel—流量卫兵相关推荐

  1. 四阶段:第24周 微服务下Sentinel流量防控卫兵 apollo相关配置 一般有用

  2. springcloud-alibaba-sentinel(1)sentinel流量卫兵介绍

    文章目录 前言 (1)什么是sentinel (2)sentinel的历史 (3)sentinel的特性 (4)核心概念 资源 规则 (5)sentinel的生态景观 (6)sentinel组成 前言 ...

  3. Alibaba微服务组件Sentinel

    Alibaba微服务组件Sentinel 1.分布式系统遇到的问题 服务的可用性问题 ​ 提供系统可用性的关键是在相关组件失效情况下,系统能多快恢复并继续正确提供服务.当服务器挂掉的时候首先想到什么原 ...

  4. 哨兵 双向 java_SpringCloud微服务:Sentinel哨兵组件,管理服务限流和降级

    一.基本简介 1.概念描述 Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性.包括核心的独立类库,监控台,丰富的使用场景验证.(这似乎是阿里开源组件的一贯 ...

  5. Java微服务学习笔记(一):微服务架构的概念理解

    Java微服务学习笔记 Tips:入门学习时粗略整理,仅供参考 (一):架构的基础理解 文章目录 Java微服务学习笔记 前言 一.微服务是什么? 二.常用开源微服务框架演化 1. Dubbo 2. ...

  6. Sentinel流量卫兵

    文章目录 1.什么是Sentinel 2.Sentinel的特性: 3.两个重要概念 3.1 资源 3.2 规则 4.Sentinel Dashboard使用 4.1 下载 4.2 启动 4.3 访问 ...

  7. springCloud sentinel 流量卫兵

    什么是sentinel 0.说明 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/en-us/index.html#_ ...

  8. .NET Core 微服务学习与实践系列文章目录索引(2019版)

    Photo :.NET Core 文 | Edison Zhou 2018年,我开始学习和实践.NET Core,并开始了微服务的学习,以及通过各种开源组件搭建服务治理技术方案,并在学习过程中总结了一 ...

  9. 微服务学习总结4(网关和consul结合)

    先上一张图片: 首先要启动consul服务,用于对三个日志服务的注册和发现.(默认端口8500) 然后启动三个日志服务,端口分别为5726.5727.5728. 最后启动网关服务,用于转发客户端请求, ...

最新文章

  1. 比特币现金众筹应用Lighthouse正式上线
  2. fedora desktop
  3. python 求反函数_逆累积分布函数,累积分布函数及python实现
  4. 【SpringBoot】使用Maven添加jQuery、bootstrap等依赖(WebJars)
  5. 梯度迭代树回归(GBDT)算法介绍及Spark MLlib调用实例(Scala/Java/python)
  6. 项目手札2---关于分页显示时地址栏的风格
  7. 兼容FF,IE的纯CSS下拉菜单
  8. weblogic创建域后启动不了_摩托车淋雨后启动不了什么原因?如何解决?
  9. linux文件操作相关函数
  10. 代理模式——HeadFirst设计模式学习笔记
  11. python 用if判断一个数是不是整数_Python基础教程07-函数和模块的使用
  12. laravel html转pdf和转图片 (laravel-snappy的使用记录)
  13. visio设置图片默认大小_visio怎么调整图片大小、间距-visio调整图片大小、间距的方法 - 河东软件园...
  14. java获取本机ip_java获取本机IP
  15. 谷歌最新版本浏览器如何兼容flash插件
  16. 数字转换成中文大写的经典方案
  17. python获取英文字母、英文标点符号、中文标点符号
  18. 八、Linux全套大总结
  19. 插入u盘有图标但计算机没盘,没插U盘却有U盘图标显示的原因和解决方法
  20. html5中三角函数,三角函数和角公式

热门文章

  1. 古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记
  2. 如何做到像百度云或者网易公开课一样动态更换APP启动图
  3. win10浏览器加载很慢_win10中的浏览器打开网速特别慢是怎么回事_win10浏览器打开慢如何处理...
  4. 抠像互动技术使人物与各种景物叠加,形成神奇的艺术效果
  5. EF 通用帮助类 含分页 Lambda 拼接表达式
  6. APP下载链接在微信内打不开显示已停止访问该网页怎么办?
  7. 【Linux】虚拟地址空间 --- 虚拟地址、空间布局、内存描述符、写时拷贝、页表…
  8. c语言中使用的字符常量其起止标记符是,2021国家开放大学电大本科《C语言程序设计》期末试题及答案(试卷号:1253)...
  9. visual studio 2019 mac 格式化代码快捷键
  10. Dockerfile构建Nginx镜像、镜像优化(多阶段构建,最小化镜像构建)