Sentinel

news2024/11/19 23:25:50

Sentinel—高可用流量管理框架/服务容错组件

一.为什么要用Sentinel?

1.微服务架构中当某服务挂掉的时候常见的原因有哪些?

1.异常没处理

比如DB连接失败,文件读取失败等

2.突然的流量激增

比如:用户经常会在京东、淘宝、天猫、拼多多等平台上参与商品的秒杀、限时抢购等优惠活动,也会在节假日使用12306 抢火车票、高铁票,甚至有时候还要帮助同事、朋友为他们家小孩拉投票、刷票,这些场景都无一例外的会引起服务器流量的暴涨,导致网页无法显示、APP反应慢、功能无法正常运转,甚至会引起整个网站的崩溃(服务雪崩)。

3.被其它服务拖垮

在微服务项目中,经常存在服务A调用服务B,服务B又调用服务C等微服务级联调用的场景,当服务C出现故障,服务B和服务A都会跟着出现故障,因为它们之间存在调用链关系;有时候调用链会很长并且很复杂,比如服务A不仅调用了服务B,还调用了服务H、服务I、服务J等等,同时服务A调用链的最长链条终端有可能是从服务C、服务D一直到服务Z,这种调用复杂的调用链条一旦出现故障,有可能直接让整个微服务体系都无法提供服务,造成的影响是致命的。这种由于调用链中某一个节点出现故障而引发的级联故障,称为服务雪崩,也称为级联故障、级联失效。

2.容错机制

异常没处理,我们处理一下异常就可以,而对于另外两个原因导致的服务雪崩,我们应该怎么解决呢或者说应该怎么建立容错机制呢?

常见的容错机制有隔离、超时、限流、熔断、降级等。

隔离

它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的 系统服务。常见的隔离方式有:线程池隔离和信号量隔离。

超时

在上游服务调用下游服务的时候,设置一个最大响应时间,如果超过这个时间,下游未作出反应, 就断开请求,释放掉线程。

限流

限流就是限制系统的输入和输出流量已达到保护系统的目的。为了保证系统的稳固运行,一旦达到 的需要限制的阈值,就需要限制流量并采取少量措施以完成限制流量的目的。

熔断

在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。

降级

降级其实就是为服务提供一个托底方案,一旦服务无法正常调用,就使用托底方案。

3.常见的容错组件

Hystrix

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。

Resilience4J

Resilicence4J一款非常轻量、简单,并且文档非常清晰、丰富的熔断工具,这也是Hystrix官方推荐的替代产品。不仅如此,Resilicence4j还原生支持Spring Boot 1.x/2.x,而且监控也支持和prometheus等多款主流产品进行整合。

Sentinel

Sentinel 是阿里巴巴开源的一款断路器实现,是面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。本身在阿里内部已经被大规模采用,比如双11高流量场景,非常稳定。

比如:我们可以通过Sentinel,为秒杀、抢购、抢票、拉票等功能提供API接口层面的流量限制,让突然暴涨而来的用户访问受到统一的管控,使用合理的流量放行规则使得用户都能正常得到服务。同时可以解决应用雪崩效应引发的一系列问题。

三者对比:

在这里插入图片描述

二.Sentinel是什么?

1.Sentinel 定义

Sentinel 是面向分布式服务架构的轻量级流量控制产品,是高可用防护组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。

2.Sentinel的功能

2.1流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。因为任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:

在这里插入图片描述

2.2 熔断降级

1.什么是熔断降级?

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。

因此我们需要对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。

2.熔断降级设计理念

Sentinel采取了两种手段:

方式1:通过并发线程数进行限制:
Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

方式2:通过响应时间对资源进行降级
除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。

2.3 系统负载保护

Sentinel 同时对系统的维度提供保护。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。

针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

3.Sentinel的特点

丰富的应用场景:

Sentinel承接了阿里巴巴多年的双十一大促高流量的核心场景,例如秒杀,消息削峰填谷,实时熔断下游不可用应用等.

完备的实时监控:

Sentinel同时提供实时的监控功能,可以在控制台看到接入应用的单台机器秒级数据,甚至500台以下规模的集群的汇总运行情况。

广泛的开源生态:

Sentinel提供开箱即用的与其它开源框架的整合模块,例如与Spring Cloud,Dubbo,gRPC的整合。只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。

完善的SPI扩展点:

Sentinel提供简单易用,完善的SPI扩展点。可以通过实现扩展点,快速地定制逻辑。例如定制规则管理,适配数据源等。

4.Sentinel 基本概念

4.1资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

4.2规则

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

三.Sentinel的快速使用

1.Sentinel的组成部分

核心库(Java客户端):不依赖任何框架/库,能够运行于所有Java运行环境中,同时对SpringCloud/Dubbo等框架也有较好的支持

控制台(Dashboard):基于Spring Boot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

2.如何启动Dashboard

2.1 查询跟当前使用的SpringCloud兼容的版本

在这里插入图片描述

2.2下载dashboard的jar包

地址: https://github.com/alibaba/Sentinel/releases/tag/v1.8.0

放入指定目录:比如java项目的工作空间。

2.3 启动Dashboard的两种方式

方式1:

默认端口号是8080

java -jar D:/idea_workspace/sentinel-dashboard-1.8.0.jar

在这里插入图片描述

方式2:

可以自己设置端口号

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080-Dproject.name=sentinel-dashboard -Dcsp.sentinel.api.port=8719 -jar D:/idea_workspace/sentinel-dashboard-1.8.0.jar

2.4 访问

http://localhost:8080

默认用户名和密码都是sentinel

在这里插入图片描述

在这里插入图片描述

此时没有关联的微服务

3.微服务中集成Sentinel

3.1 添加sentinel包

在需要限流的上游服务(调用方)中加入jar包

这里在案例Users服务中添加

<!-- 导入sentinel-->
<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

在这里插入图片描述

3.2 添加配置信息

在这里插入图片描述

重启服务Users

3.3 Sentinel懒加载

此时刷新Dashboard,看不到服务信息。这是因为默认情况下Sentinel 会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包。也就是Sentinel设置了懒加载,解决方法有两种:

方法1:先运行一下Users服务

方法2:配置spring.cloud.sentinel.eager=true ,取消Sentinel控制台懒加载。

再次刷新,可以看到:

在这里插入图片描述

3.4 测试使用

我们先简单测试一下Sentinel的流控功能,在设置之前,可以任意刷新Users服务中接口次数。

假设这里设置Users服务下的goods接口1秒钟内只能刷新两次:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

再次刷新Users服务中的goods接口:

当QPS超过2次以后,会出现被限流的提示:

在这里插入图片描述

3.5 怎么移除不需要监控的服务

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110669.html

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

相关文章

java 三级缓存

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;java 三级缓存 ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&#xff0c;欢迎你的加入: 林在闪闪发光…

五问补盲(四)| 好用的补盲激光雷达,得满足哪些条件?

作者 | 爱LiDAR的小飞哥 编辑 | 王博上一期&#xff0c;我们聊了补盲激光雷达上车的重要前提——安全。本期我们来聊聊&#xff0c;满足功能安全、网络安全等领域的关键设计要求之后&#xff0c;补盲激光雷达怎么做到好用&#xff0c;更贴近工程化的表述是「易用」。在之前的文…

利器 | 接口自动化测试框架 RESTAssured 实践(三):对 Response 结果导出

上一篇文章中介绍了rest-assured对返回结果的断言&#xff0c;最后说明了对于Response结果导出的需求。可查看往期文章进行查看。 HTTP/1.1 200 OK Server: nginx/1.12.2 Date: Mon, 13 Jan 2020 02:15:11 GMT Content-Type: application/json;charsetUTF-8 Transfer-Encoding…

产险精算GLM案例

这是对北美产险精算学会CAS北美产险精算师考试教材《广义线性模型实践者指南》的第一章中的实例的结果验证&#xff0c;教材中使用的是纯数学理论推导&#xff0c;这里使用python进行结果验证。 原始数据是一个简单的分组数据&#xff1a; 这个原始数据表需要进行结构化后&…

前端基础(十七)_HTML5新特性

HTML5新特性 1、在网页上绘制图形的canvas元素 原生JavaScriptcanvas实现五子棋游戏_值得一看 鼠标移动淡入淡出Canvas小球效果_TS版本 JS配合canvas实现贪吃蛇小游戏 canvas基础及太极图案例 2、多媒体相关video和audio元素 html5 video 音频标签: audio 标签 在IE8及更早版本…

LVGL学习笔记1 - 准备

目录 1. 下载LVGL源代码 2. 平台 3. 导入到工程 3.1 配置头文件 3.2 src文件夹 4. 移植 4.1 显示接口部分 4.1.1 disp_init 4.1.2 lv_port_disp_init 4.1.3 disp_flush 4.2 IPA部分 4.2.1 lv_draw_gd32_ipa_init 4.2.2 lv_draw_gd32_ipa_blend_fill 4.2.3 lv_dra…

Web API节点操作

1、节点概述 网页中的所有内容都是节点&#xff08;标签、属性、文本、注释等&#xff09;&#xff0c;在DOM 中&#xff0c;节点使用 node 来表示。HTML DOM 树中的所有节点均可通过 JavaScript 进行访问&#xff0c;所有 HTML 元素&#xff08;节点&#xff09;均可被修改&a…

(JavaP1177 )【模板】快速排序

【模板】快速排序 一、题目描述 利用快速排序算法将读入的 NNN 个数从小到大排序后输出。 快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料&#xff0c;掌握后独立完成。&#xff08;C 选手请不要试图使用 STL&#xff0c;虽然你…

认识信道(零):天线的极化

认识信道(零)&#xff1a;天线的极化 文章目录认识信道(零)&#xff1a;天线的极化零.简述一.平面电磁波的传播二.对于field pattern的研究三.对于传播路程的研究四.极化失配五.传播结果六.QuaDRiGa Tutorial分析TXV-RXVTX45-RXV和 TXV-RX45TX45-RX45TX90-RX0&#xff0c;45&am…

[Linux]-Crontab定时任务

[Linux]-Crontab定时任务 森格 | 2022年12月 本文是对Linux中的定时任务Crontab的介绍 一、Crontab是什么 crontab命令常见于Unix和类Unix的操作系统之中&#xff0c;用于设置周期性被执行的指令。该命令从标准输入设备读取指令&#xff0c;并将其存放于“crontab”文件中&…

APP登录界面设计:注册框 or 登录框,哪个更合理?

登录和注册过程往往是产品和用户的 First Sight&#xff0c;因此登录注册入口是给用户留下好的第一印象的关键。遵循“所有的设计都应有据可循”的原则&#xff0c;下面是我司设计团队对“登录界面该放注册框还是登录框这个问题”的探讨。 对于一般需要账号体系的产品&#xff…

Moho Pro - Mac 上一款专业的二维动画制作软件,强大的功能让你尽情发挥创意

Moho Pro - Mac 上一款专业的二维动画制作软件&#xff0c;强大的功能让你尽情发挥创意 Moho&#xff0c;以前被称为动画工作室专业版&#xff0c;是最好的质量的2D动画软件之一。这个程序是理想的专业人士寻找一个更有效的替代方法来创建动画&#xff0c;没有繁琐的详细逐帧处…

[ 漏洞挖掘基础篇六 ] 漏洞挖掘之越权漏洞挖掘

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

用Echarts实现SpreadJS引用从属关系可视化

在金融行业&#xff0c;我们经常会有审计审查的需求&#xff0c;对某个计算结果进行审查&#xff0c;但是这个计算结果可能依赖多个单元格&#xff0c;而且会有会有多级依赖的情况&#xff0c;如果让我们的从业人员靠眼睛找&#xff0c;工作量巨大&#xff0c;而且准确性存疑&a…

图书管理系统【Servlet+HTML综合应用】

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

分享从零开始学习网络设备配置--任务2.7 提高网络稳定性(VRRP)

任务描述 某公司在北京的总部网络承担了连接全国各地分公司网络的任务。总部网络中心采用多台万兆交换机&#xff0c;内部网络按照业务规划有2个部门VLAN。为了增强总部核心网络的稳定性&#xff0c;要求在三层网络设备上配置VRRP备份组&#xff0c;实现网关冗余&#xff0c;为…

BYOL论文精读

文章目录概要背景方法1. 概述2. 参数更新3.目标z_ξ的构建和q_θ的预测结果结论个人看法概要 本篇博客介绍了Bootstrap Your Own Latent (BYOL)方法&#xff0c;这是DeepMind和Imperial London提出的一种自监督学习方法。 BYOL 包含两个架构相同但参数不同的网络。BYOL 不需要…

SpringBoot 项目打成 .exe 程序

准备 准备工作&#xff1a; 1.一个jar包&#xff0c;没有bug能正常启动的jar包 2.exe4j&#xff0c;一个将jar转换成exe的工具 3.inno setup&#xff0c;一个将依赖和exe一起打成一个安装程序的工具 开始 以我为例子&#xff0c;我将jar包放在了桌面 打开安装好的exe4j 直…

面渣逆袭:Java并发六十问,快来看看你会多少道

这篇文章有点长&#xff0c;四万字&#xff0c;图文详解六十道Java并发面试题。人已经肝麻了&#xff0c;大家可以点赞、收藏慢慢看&#xff01;扶我起来&#xff0c;我还能肝&#xff01; 基础 1.并行跟并发有什么区别&#xff1f; 从操作系统的角度来看&#xff0c;线程是…

现在有哪些好用的企业报表软件?

简单来讲&#xff0c;企业报表就是“用表格、图表等格式来动态显示数据”&#xff0c;各行各业、每年每月&#xff0c;都需要通过报表来展示组织和人员在经营管理上的真实情况。当前大家常用的实现企业报表的方式包含代码开发、用 Excel 制作离线报表、开源产品、利用业务系统&…