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

news2024/10/5 13:37:09

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.1
      rule.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 20
        rule1.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 20
        rule1.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.coloradmin.cn/o/698692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】操作系统的基本概念 {冯诺依曼体系结构,操作系统的基本概念,系统调用及用户操作接口,shell程序}

一、冯诺依曼体系结构 现代计算机设计大都遵守冯诺依曼体系结构&#xff1a; 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是由一个个的硬件组件组成 输入单元&#xff1a;包括键盘, 鼠标&#xff0c;扫描仪, 磁盘&#xff0c;网卡等 存储器&#xff1a;内存&#…

cuda 安装(windows)简单

除了在linux上用&#xff0c;部分初学者也会在windows上用 需要在linux上安装的参考这篇&#xff1a;cuda linux安装 有的教程讲的很复杂&#xff0c;起始很简单 1.下载Cuda Toolkit&#xff08;全家桶&#xff09; cuda-toolkit官方页面 找到需要的版本 2.安装 双击然后下…

MySQL MHA高可用集群部署及故障切换

MySQL MHA高可用集群部署及故障切换 一、MHA概述二、MHA的组成三、MHA的特点四、MHA的原理五、搭建MySQLMHA1、所有服务器&#xff0c;关闭系统防火墙和安全机制2、修改 master&#xff08;192.168.92.11&#xff09;、Slave1&#xff08;192.168.92.12&#xff09;、Slave2&am…

使用Gradio创建交互式复选框组件

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Web (27号培训)

Get_POST Upload1 最后蚁剑链接寻找文件即可 简单的登录 用给好的字典爆破就好了 这仅仅只是爆破吗&#xff1f; 账户hacker 密码123456 1.爆破hacker帐号的密码 2.登录hacker帐号 3.抓包后将user改成vvvlllll&#xff0c;放包 4.即得flag

今日份分享:转换音频格式的软件有哪些

曾经有一位音乐爱好者&#xff0c;名叫张丽。她热爱收集高质量的音乐&#xff0c;尤其钟爱flac这种无损音频格式。然而&#xff0c;有一天&#xff0c;她遇到了一个问题&#xff1a;她的音乐播放器不支持flac格式&#xff0c;因此她迫切需要找到一种软件来转换flac音频格式。那…

助你丝滑过度到 Vue3 初识 ②②

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; VUE3~TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f449;…

读发布!设计与部署稳定的分布式系统(第2版)笔记15_快速失败和替换

1. 快速失败而非缓慢响应 1.1. 如果响应缓慢比没有响应更糟&#xff0c;那么最坏的情况肯定是缓慢的失败响应 1.2. 如果系统能够预先确定某次调用会失败&#xff0c;那么最好快速失败 2. 快速失败模式通过避免响应缓慢来提高整个系统的稳定性 2.1. 当系统由于部分失效而面临…

【pytorch,onnx,bug解决】pytorch的op:pixel unshuffle转到onnx的op:SpaceToDepth

文章目录 问题1&#xff0c; 转换失败问题1解决问题2&#xff0c;精度对不上问题2解决训练时转换时 问题1&#xff0c; 转换失败 pytorch训练好的模型想要在onnx上部署&#xff0c;但是发现算子F.pixel_unshuffle 不能直接转到onnx 的 SpaceToDepth&#xff0c; 发生以下报错&…

Android——基本控件(下)(十六)

1. 随笔提示文本&#xff1a;AutoCompleteTextView 1.1 知识点 &#xff08;1&#xff09;了解随笔提示功能的应用&#xff1b; &#xff08;2&#xff09;可以使用AutoCompleteTextView类完成随笔提示功能的实现。 1.2 具体内容 这个组件就是提供了一个文本输入的功能&…

YOLO改进教程:6.添加NAM-Net注意力机制

论文地址:https://arxiv.org/abs/2111.12419Github:https://github.com/Christian-lyc/NAM如果你是深度学习小白,阅读本文前建议先学习一下 📖《新手入门深度学习》如果你有一定基础,但是缺乏实战经验,可通过 📖《深度学习100例》 补齐基础另外,我们正在通过 🔥365…

window11系统打开VMware虚拟机,导致主机直接重启

问题描述&#xff1a; window11系统打开VMware虚拟机&#xff0c;直接导致主机直接重启 原因&#xff1a; 未开启“虚拟机平台”选项。 解决方式&#xff1a; 打开电脑“控制面板”&#xff0c;选择“程序”&#xff0c;在再选择程序中的“启用或关闭windows功能” 控制面板➡…

MyBatis 执行流程详解及示例代码

导言&#xff1a; MyBatis 是一个优秀的持久层框架&#xff0c;它简化了数据库操作的开发过程。本文将详细介绍 MyBatis 的执行流程&#xff0c;并提供相应的示例代码&#xff0c;帮助读者更好地理解和应用 MyBatis。 1. 创建 SqlSessionFactoryBuilder 对象 在 MyBatis 中&…

基于redis的bitmap实现签到功能(后端)

项目环境 MacOS springboot: 2.7.12 JDK 11 maven 3.8.6 redis 7.0.11 StringRedisTemplate 的key和value默认都是String类型 可以避免不用写配置类&#xff0c;定义key和value的序列化。 实现逻辑&#xff1a; 获取用户登录信息 根据日期获取当天是多少号 构建…

【服务器数据恢复】热备盘同步失败导致服务器崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; 两组分别由4块SAS硬盘组建的raid5磁盘阵列&#xff0c;ext3文件系统&#xff0c;通过LVM管理磁盘存储。 服务器故障&#xff1a; 一组raid5磁盘阵列中的1块硬盘故障离线&#xff0c;热备盘成功启用并开始同步数据&#xff0c;在同步还没有完成…

互联网保险驶入发展快车道,元保保险加速数字化突围

随着90后、00后这一群体逐渐进入婚育高峰期,加之相较60后、70后群体,这群互联网原住民已经成为保险消费的主力人群,互联网保险行业迎来了新的发展机遇,互联网平台恰似曾经辉煌的大卖场、集市、商场,成为汇聚流量的新平台,只不过,能量的漩涡更大,更聚焦。对此,元保集团创始人兼C…

记录一个Masonry 添加约束导致的label 文案展示不全的问题

问题如图&#xff0c;蓝色label 中的文字没有展示完全&#xff0c;后面还有“情。” 原因&#xff0c;我们使用masonry 布局的时候&#xff0c;宽度会有细微的误差&#xff0c;导致我们实际 添加的约束比我们期望的要小&#xff0c;就导致横向无法容下期望的文字宽度&#xf…

如何使用MySQL统计当月每日收益金额

如果要实现上图这个效果&#xff0c;这个SQL应该怎么写呢&#xff1f; 目录 1、实现思路 2、SQL实现 1、实现思路 首先&#xff0c;我们先实现查询当月每日的日期 。然后将查询结果与需要统计的表进行左连接即可。 SELECT DATE(DATE_SUB(CURRENT_DATE(), INTERVAL (DAY(CURRE…

微服务springcloud 10.config配置中心框架和rabbitmq的安装

config配置中心的作用&#xff1a;项目的yml 配置文件保存到 git 服务器&#xff0c;例如 github.com 或 gitee.com 微服务启动时&#xff0c;从服务器获取配置文件 1.新建 “Project”,命名为 config。注意这里的不是maven项目&#xff0c;而是project 2.将sp02,sp03,sp04,s…

git常用命令之Fetch

4. Fetch 命令-----------------------------------------------------------------------------作用延展阅读git fetch1. 拉取「远程仓库」的所有远程分支的最新Commit-ID 记录在 .git/FETCH_HEAD 文件中.若有多个分支则 FETCH_HEAD 内会有多行数据&#xff0c;该文件首行对应…