Java微服务金融项目智牛股-基础知识二(Sentinel简介)

news/2024/12/29 12:36:50/

Sentinel

背景

微服务架构设计由众多为服务组成,为保障高可用,通常会采用集群方式部署。由于服务自身原因或网络等其他问题,并不能保证100%可用性, 若单个服务出现问题, 会导致进入该服务的线程阻塞, 如果大量请求, 服务可能瘫痪, 服务与服务之间的依赖性, 故障会传播, 产生雪崩效应, 为解决和规避此问题, 业界提出熔断器模型, 衍生出了Sentinel,Hystrix和Resilience4j等组件。、
Sentinel地址

流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状。

在这里插入图片描述

熔断降级

与Hystrix熔断理念一致, 主要控制调用链中的不稳定资源, 针对这些不同场景进行限制, 避免影响整体系统的稳定性, 防止出现穿透、雪崩等灾难性问题。
在熔断实现上, Sentinel与Hystrix存在较大差异:

  1. Hystrix 是通过线程池隔离, 增加线程切换开销,侵入性较强, 且异步方式,不便主线程控制处理。
  2. Sentinel 前置处理, 限制请求线程并发数量来控制, 这样避免线程切换开销,侵入性低。
  3. Sentinel 还可以针对响应时间对资源进行降级, 当某个资源出现响应时间过长, 所有对该资源的访问都会被拒绝, 直到配置的指定时间窗口之后才重新恢复访问。

Sentinel的工作原理

主要特性视图

在这里插入图片描述

开源生态

在这里插入图片描述

工作原理

在这里插入图片描述
设计说明
在 Sentinel 里面,所有的资源都对应一个资源名称以及一个 Entry。Entry 可以通过对主流框架的适配自动创建,也可以通过注解的方式或调用 API 显式创建;每一个 Entry 创建的时候,同时也会创建一系列功能插槽(slot chain)。这些插槽有不同的职责,例如:

  • NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
  • ClusterBuilderSlot 则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
  • StatisticSlot 则用于记录、统计不同纬度的 runtime 指标监控信息;
  • FlowSlot 则用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制;
  • AuthoritySlot 则根据配置的黑白名单和调用来源信息,来做黑白名单控制;
  • DegradeSlot 则通过统计信息以及预设的规则,来做熔断降级;
  • SystemSlot 则通过系统的状态,例如 load1 等,来控制总的入口流量;

扩展机制

Sentinel 将 SlotChainBuilder 作为 SPI 接口进行扩展,使得 Slot Chain 具备了扩展的能力。您可以自行加入自定义的 slot 并编排 slot 间的顺序,从而可以给 Sentinel 添加自定义的功能。
在这里插入图片描述

Sentinel使用

Dashboard控制台

Sentinel 控制台包含功能:

  • 查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。
  • 监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。
  • 规则管理和推送:统一管理推送规则。
  • 鉴权 :生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。

从GitHub下载地址下载最新版本

启动命令, 配置启动端口:

java -Dserver.port=8090 -Dcsp.sentinel.dashboard.server=localhost:8090 -jar sentinel-dashboard-1.6.2.jar

默认登陆账号与密码都是sentinel,也可以通过启动参数修改:

-Dsentinel.dashboard.auth.username=sentinel 
-Dsentinel.dashboard.auth.password=123456

在这里插入图片描述

降级演示

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

    • 引用RtDegradeDemo示例
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xIAmLFdg-1687939555414)(images/sentinel_demo.png)]

    • 集成Dashboard控制台
      POM文件加入依赖:

         <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId></dependency>
    

    启动参数,指定Dashboard地址:

    -Dcsp.sentinel.dashboard.server=127.0.0.1:8090
    
    • 结果演示
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mKFWKQTE-1687939555415)(images/sentinel_degrade_console.png)]

      查看控制台
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wD2xqXWT-1687939555415)(images/sentinel_degree.png)]

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

  private static void initDegradeRule() {List<DegradeRule> rules = new ArrayList<DegradeRule>();DegradeRule rule = new DegradeRule();rule.setResource(KEY);// set limit exception ratio to 0.1rule.setCount(0.1);rule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO);rule.setTimeWindow(10);// rule.setMinRequestAmount(20);rules.add(rule);DegradeRuleManager.loadRules(rules);}

规则时间窗设为10秒, 降级比例为千分之一。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zdS95FR5-1687939555415)(images/sentinel_exception_ratio.png)]

控制台
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vwrlZr1R-1687939555416)(images/sentinel_exception_ration2.png)]

限流演示

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

  1. QPS限流策略
    FlowQpsDemo类,控制策略QPS限制为20。
    private static void initFlowQpsRule() {List<FlowRule> rules = new ArrayList<FlowRule>();FlowRule rule1 = new FlowRule();rule1.setResource(KEY);// set limit qps to 20rule1.setCount(20);rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);rule1.setLimitApp("default");rules.add(rule1);FlowRuleManager.loadRules(rules);}

输出结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rsTWxLlj-1687939555416)(images/sentinel_qps.png)]

控制台结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RYJ4jITc-1687939555416)(images/sentinel_qps1.png)]

并发线程限流策略
FlowThreadDemo类,限制并发线程访问数为20。

    private static void initFlowRule() {List<FlowRule> rules = new ArrayList<FlowRule>();FlowRule rule1 = new FlowRule();rule1.setResource("methodA");// set limit concurrent thread for 'methodA' to 20rule1.setCount(20);rule1.setGrade(RuleConstant.FLOW_GRADE_THREAD);rule1.setLimitApp("default");rules.add(rule1);FlowRuleManager.loadRules(rules);}

输出结果:
在这里插入图片描述

控制台监控:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DKsqHPGN-1687939555417)(images/sentinel_thread2.png)]

更多Wiki文档

总结

  • 掌握Dashboard控制台的安装使用, 应用服务的接入配置。

  • Sentinel的降级与限流功能配置使用, 理解相关控制策略。


http://www.ppmy.cn/news/623401.html

相关文章

乐鑫新款ESP32-C2开发板

C2是一个芯片采用4毫米x 4毫米封装&#xff0c;与272 kB内存。它运行框架&#xff0c;例如ESP-Jumpstart和ESP造雨者&#xff0c;同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统&#xff0c;受到了全球用户的信赖。它由支持Espressif以及所有…

新款 iMac2021上手体验,这次你心动了吗

今年我们终于迎来了外观全新设计的 iMac&#xff0c;一体式的简洁设计&#xff0c;糖果般的彩色机身&#xff0c;可以令你心动吗&#xff1f;iMac2021上手是什么感受呢&#xff1f;来看小编带来的iMac 2021 最新体验。 hello again&#xff0c;多彩机身 iMac 的外观一直都有很强…

新款MacBook M2芯片 安装python

最近几天入手了新款的MacBookAirM2芯片&#xff0c;发现苹果自带的操作系统中已经没有安装python&#xff0c;所以来记录一下新款M2芯片安装python的过程。 首先查看一下自己的Mac电脑配置和芯片&#xff0c;下面是我的电脑配置。 M2芯片 16GB内存 打开terminal终端输入python…

新款Model 3长什么样?特斯拉已经开始降价?

作者 | Amy 编辑 | 德新 马斯克时隔三年再次访华&#xff0c;期间会见了多部委领导及重量级人物&#xff0c;在北京和上海短暂停留了44小时后便离开了中国。 此前曾有多家媒体猜测马斯克可能会在中国发布/展示改款Model 3。但据彭博社报道&#xff0c;马斯克只是在上海工厂看了…

Facebook 新款AR眼镜都有哪些技术创新?

作者|maver jiang 编辑|3D视觉开发者社区 Facebook一周前&#xff08;2022年10月11日&#xff09;发布了新款VR眼镜—— Meta Quest Pro。这款产品售价1500美元&#xff0c;而上一代的Meta Quest 2售价只有400美元。 小扎在产品发布会上宣称新产品融合了VR和AR&#xff0c;创造…

它来了,它终于来了!3299元的新款iPhone SE上架了

晚睡还是有晚睡的好处啊&#xff0c;起码在4月15号深夜等来了苹果悄咪咪上架的2020新款iPhone SE。 这款传了好久&#xff0c;爆料信息都要看吐了的小屏手机&#xff0c;终于发布了&#xff0c;不叫iPhone 9 &#xff0c;也不叫iPhone SE2&#xff0c;苹果称它为新款iPhone SE。…

微软确认:这款浏览器将彻底再见!新款浏览器将于下月正式上线

来自&#xff1a;扩展迷EXTFANS&#xff08;ID&#xff1a;infinitydaily 众所周知&#xff0c;从去年年初开始&#xff0c;微软的新版Edge浏览器就已经换上了Chromium内核。 经过一年多的时间&#xff0c;新版Edge也已经通过Windows Update向几乎所有的Win10用户推送了。 Ch…

社区团购小程序怎么制作

社区团购小程序开发&#xff0c;有什么功能 商品管理&#xff1a;社区团购小程序提供商品管理功能&#xff0c;可以方便地添加、编辑和删除商品信息。你可以设置商品的价格、库存、规格等&#xff0c;并上传商品的图片和描述&#xff0c;以吸引用户关注。 配送管理&#xff1…