基于Sentinel的微服务保护

前言

Sentinel是Alibaba开源的一款微服务流控组件,用于解决分布式应用场景下服务的稳定性问题。Sentinel具有丰富的应用场景,它基于流量提供一系列的服务保护措施,例如多线程秒杀情况下的系统承载,并发访问下的流量控制,实时熔断等。

Sentinel的特征

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

Sentinel解决雪崩问题

什么是雪崩

在分布式应用架构中,服务间的关系错综复杂,一个服务往往依赖多个其他服务,如果其中一个服务发生了故障,那么依赖于当前服务的服务也会被阻塞,以此类推下去,就算其他服务没有直接的依赖于故障服务,也会受到影响,最终导致雪崩,因此雪崩问题是指微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况

怎样解决雪崩问题

1.超时处理

为请求设定超时时间,当请求超过一定时间没有被响应时,直接返回错误信息。这种方式依然会占用一部分的时间。

2.舱壁模式

为每个业务逻辑设定一定线程数,这样一来,在服务阻塞的时候,就只会占用有限的资源,而不会将消耗全部资源。该模式也叫线程隔离。

3.断路器

由断路器统计业务执行的异常比例,如果超出阈值会熔断该业务,拦截访问该业务的一切请求

4.限流

限流是指限制业务访问的QPS,避免服务因为突增的流量而故障

QPS:每秒能够处理的请求数

总结

上述解决雪崩问题的措施可以分为两类:

1.预防

        限流就是一种预防措施,它在检测高并发访问时,采取措施,从而使当前服务不受影响

2.补救

        超时处理,线程隔离,熔断都是补救措施,这个时候服务已经受到了影响,后续操作只是将影响控制在一定范围内。

Sentinel安装使用

1.下载

sentinel官方提供了UI控制台,方便我们对系统做限流设置。可以在GitHub下载。

2.运行

将jar包放到任意非中文目录,执行命令:

java -jar sentinel-dashboard-1.8.1.jar

3.访问

访问http://localhost:8080页面,就可以看到sentinel的控制台了:

需要输入账号和密码,默认都是:sentinel

由于Sentinel采取懒加载,而我们还没有整合微服务,因此这个时候控制台上还什么都没有

Sentinel整合微服务

1.在pom文件中加入Sentinel依赖

2.修改application配置文件

这里如果是properties文件l应该是 spring.cloud.sentinel.transport.dashboard = localhost:8080,我上面也没写spring,是因为还有nacos在它上面

3.访问该服务中的任意端点

用postman发送请求,出发Sentinel监控

 流量控制

雪崩问题虽然有四种方案,但是限流是避免服务因突发的流量而发生故障,是对微服务雪崩问题的预防。所以这里主要说的就是流量控制啦。

簇点链路

刚刚我们在访问任意资源后,Sentinel控制台中就显示了一个调用信息,其中过程是 请求进入微服务后,首先访问DispatcherServlet,然后进入Controller,Service,Mapper,这样的调用链就叫做簇点链路。簇点链路中被监控的每一个接口都是一个资源。

 如果需要设置某项规则,可以点击链路后的按钮。

示例

step1:对我们刚刚访问过的资源,新增一条流控规则,设置QPS为5,即每秒最多响应5个请求

新增后可以在流控规则中查看到刚刚增加的流控规则

2、使用jmeter进行测试 

2.1先把jmeter跑起来,找到文件夹bin目录下的jmeter.bat双击就🆗了

2.2创建一个测试线程组

2.3右击线程组,创建HTTP请求

2.4右击线程组,创建结果树

2.5 Sentinel查看结果

 流控模式

        流控模式有三种,在设置流控规则的时候,可以点击高级选项进行设置

直接模式

        统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式

关联模式

        统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流

使用场景:比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是优先支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务限流。

链路模式

        统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流

使用场景:比如有查询订单和创建订单业务,两者都需要查询商品。针对从查询订单进入到查询商品的请求统计,并设置限流。

流控效果

在流控的高级选项中,还有一个流控效果选项:

流控效果是指请求达到流控阈值时应该采取的措施,包括三种:

快速失败
        达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。

warm up

        预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。在一个服务刚刚启动时,一切资源尚未初始化(冷启动),如果直接将QPS跑到最大值,可能导致服务瞬间宕机。而warm up也叫预热模式,是应对服务冷启动的一种方案。请求阈值初始值是 maxThreshold / coldFactor,持续指定时长后,逐渐提高到maxThreshold值。而coldFactor的默认值是3.

例如,我设置QPS的maxThreshold为10,预热时间为5秒,那么初始阈值就是 10 / 3 ,也就是3,然后在5秒后逐渐增长到10

排队等待

        让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长。当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。

总结
关于Sentinel流控组件的介绍就到这里,感谢收看,再见啦~

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

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

相关文章

9.8day59

503. 下一个更大元素 II - 力扣(LeetCode) 知识点:单调栈 42. 接雨水 - 力扣(LeetCode)

Qt的窗口系统

代码仓库以及参考文件见文章底部 坐标体系 要想学好GUI,界面的坐标系首先要搞清楚 在Qt编程中,以左上角为原点,X向右增加,Y向下增加。 对于所有嵌套的窗口,其坐标是相对于父窗口来说的。 QWidget 所有窗口以及窗口控件都是从QWidget直接或者间接派生出来的。 对象模…

蓝桥杯官网练习题(图像模糊)

题目描述 小蓝有一张黑白图像,由 nm 个像素组成,其中从上到下共 n 行,每行从左到右 �m 列。每个像素由一个 0 到 255 之间的灰度值表示。 现在,小蓝准备对图像进行模糊操作,操作的方法为: 对…

基于Fomantic UI Web构建 个人导航站点网站源码 网站技术导航源码

BYR-Navi-master好看有个性的网站技术导航源码 该网站基于Fomantic UI Web框架构建,整个项目的设计和构建具有高度的配置和定制灵活性。 整体风格比较适合个人导航站点使用 搜索框输入关键词后,点击上方搜索引擎图标可跳转打开对应搜索引擎搜索结果&am…

std : : vector

一.简介 std::vector 的底层实现通常基于动态数组(dynamic array),它是一种连续分配的内存块,允许元素的快速随机访问。下面是 std::vector 的一些关键特点和底层实现细节: 连续内存块:std::vector 内部使…

MAC M1芯片安装mounty读写移动硬盘中的文件

因为移动硬盘中的文件是微软公司NTFS格式,MAC只支持自己的APFS或者HFS,与微软的NTFS不兼容,所以需要第三方的软件来支持读写硬盘中的文件,经过一上午的折腾,最终选择安装mounty这个免费的第三方软件 工具网址连接&am…

祝贺!Databend Cloud 入驻 AWS 云市场

关于 Databend Cloud Databend Cloud 是基于开源云原生数仓项目 Databend 打造的一款易用、低成本、高性能的新一代大数据分析平台,提供一站式 SaaS 服务,免运维、开箱即用。 Databend Cloud 架构如下: 存储层完全面向对象存储而设计。 计算…

[论文笔记]BiMPM

引言 这又是一篇文本匹配的论文Bilateral Multi-Perspective Matching for Natural Language Sentences阅读笔记。 论文题目为自然语言文本中双向多视角匹配。 提出了BiMPM(bilateral multi-perspective matching)模型: 基于匹配-聚合(比较-聚合)框架; 采用双向匹配提取交…

第25节-PhotoShop基础课程-文本工具组

文章目录 前言1.横排文字工具1.基本操作1.字体选择2.字体大小3.字体颜色4.左对齐5.右对齐6.居中对齐 2.字符 2.段落文字3.蒙版文字 前言 1.横排文字工具 1.基本操作 1.字体选择 2.字体大小 3.字体颜色 4.左对齐 5.右对齐 6.居中对齐 2.字符 2.段落文字 3.蒙版文字

如何正确使用 WEB 接口的 HTTP 状态码和业务状态码?

当设计和开发 Web 接口时,必然会和 HTTP 状态码与业务状态码这两个概念打交道。很多同学可能没有注意过这两个概念或者两者的区别,做得稀里糊涂,接下来详细讲解下二者的定义、区别和使用方法。 HTTP 状态码 HTTP 状态码是由 HTTP 协议定义的…

Stable Diffusion 告别猜关键词,LoRA适配关键词自动生成

有没有想想过在SD绘图的时候下载好的LoRA模型选择之后不生效是为什么?或者说关键词不知道怎么填写? 这里介绍基于 Civitai 的LoRA 使用方法。 文章目录 Civitai 插件使用方法Civitai 插件 如果没有安装的小伙伴可以参考前面的文章先对 Civitai 的模型管理进行安装和使用,确…

【iOS】MVC

文章目录 前言一、MVC各层职责1.1、controller层1.2、model层1.3、view层 二、总结三、优缺点3.1、优点3.2、缺点 四、代码示例 前言 MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此…

【python爬虫】批量识别pdf中的英文,自动翻译成中文上

不管是上学还是上班,有时不可避免需要看英文文章,特别是在写毕业论文的时候。比较头疼的是把专业性很强的英文pdf文章翻译成中文。我记得我上学的时候,是一段一段复制,或者碰到不认识的单词就百度翻译一下,非常耗费时间。本文提供批量识别pdf中英文的方法,后续文章实现自…

CnosDB 签约京清能源,助力分布式光伏发电解决监测系统难题。

近日,京清能源采购CnosDB,升级其“太阳能光伏电站一体化监控平台”。该平台可以实现电站设备统一运行监控,数据集中管理,为操作人员、维护人员、管理人员提供全面、便捷、差异化的数据和服务。 京清能源集团有限公司(…

【新版】系统架构设计师 - 软件架构设计<SOA与微服务>

个人总结,仅供参考,欢迎加好友一起讨论 架构 - 软件架构设计<SOA与微服务> 考点摘要 面向服务SOA(★★★★)微服务(★★★★) 基于/面向服务的(SOA) 在SO…

代理IP与网络安全:保障跨境电商和游戏的顺畅运行

在今天的数字时代,跨境电商和在线游戏已经成为全球互联网经济的两个重要组成部分。然而,这两者都需要强大的网络基础设施来支持其运行。同时,网络安全问题也变得愈发突出。在这个背景下,代理IP技术以及特别是Socks5代理协议&#…

企业架构LNMP学习笔记34

LVS-DR模式: 老师分析: 1、首先用户用CIP请求VIP 2、根据上图可以看到,不管是Director Server还是Real Server上都需要配置VIP,那么当用户请求到达我们的集群网络的前端路由器的时候,请求数据包的源地址为CIP目标地址…

C++ day 3

1、 自行封装一个栈的类,包含私有成员属性:栈的数组、记录栈顶的变量,成员函数完成:构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 stack.h #ifndef STACK_H #define STACK_H#…

Paper: 利用RNN来提取恶意软件家族的API调用模式

论文 摘要 恶意软件家族分类是预测恶意软件特征的好方法,因为属于同一家族的恶意软件往往有相似的行为特征恶意软件检测或分类方法分静态分析和动态分析两种: 静态分析基于恶意软件中包含的特定签名进行分析,优点是分析的范围覆盖了整个代码…

【STM32】文件系统FATFS与Flash的初步使用

文件系统简介 简介可以不看,直接看移植步骤 文件系统是介于应用层和底层间的模糊层。底层提供API,比如说使用SDIO或者SPI等读写一个字节。文件系统把这些API组合包装起来,并且提供一些列函数,我们可以使用这些函数进行更进一步的…