阿里的Sentinel流量防卫兵

2023-10-29 19:59
文章标签 阿里 sentinel 流量 防卫

本文主要是介绍阿里的Sentinel流量防卫兵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Sentinel是什么鬼?又要学习新的技术了。

请点击输入图片描述

每当看到这个图,我又开始学习之路了。

请点击输入图片描述

请点击输入图片描述

Sentinel

随着分布式系统变得越来越流行,服务之间的可靠性变得比以往任何时候都更加重要。 Sentinel是强大的流控制组件,以“流”为切入点,涵盖多个领域,包括流控制并发限制熔断自适应系统保护,以确保微服务的可靠性。

2012年,Sentinel诞生于阿里巴巴,其主要目标是流量控制。2013-2017年,Sentinel迅速发展,并成为阿里巴巴所有微服务的基本组成部分。 它已在6000多个应用程序中使用,涵盖了几乎所有核心电子商务场景。2018年,Sentinel演变为一个开源项目。2020年,Sentinel Golang发布。

Sentinel的生态圈

请点击输入图片描述

Sentinel 主要特性

请点击输入图片描述

Sentinel 的使用可以分为两个部分:

  • 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 7 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。

  • 控制台(Dashboard):控制台主要负责管理推送规则、监控、集群限流分配管理、机器发现等。

在这里我们看下控制台的使用

控制台安装

下载地址:https://github.com/alibaba/Sentinel/releases,sentinel-dashboard-1.7.2.jar

本地需要先安装好Java8环境,8080端口没被占用。

cmd安装目录,运行命令java -jar sentinel-dashboard-1.7.2.jar

请点击输入图片描述

访问http://localhost:8080/

请点击输入图片描述

默认账号密码都为sentinel,登陆进去,控制台安装完毕。

功能使用

还是以之前讲解Nacos的项目,讲解sentinel的使用,新建一个模块cloudalibaba-sentinel-8401。

引入依赖

    <!-- 引入自己定义的通用包-->
   <dependency>
       <artifactId>springcloud-commom</artifactId>
       <groupId>com.learn.springcloud</groupId>
       <version>1.0-SNAPSHOT</version>
   </dependency>
   <!--SpringCloud ailibaba nacos -->
   <dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
   </dependency>
   <!--SpringCloud ailibaba sentinel -->
   <dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
   </dependency>
   <!-- SpringBoot整合Web组件+actuator -->
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
   </dependency>

添加配置文件application.yml

server:
 port: 8401

spring:
 application:
   name: cloudalibaba-sentinel-service
 cloud:
   nacos:
     discovery:
       server-addr: localhost:8848 #Nacos服务注册中心地址
   sentinel:
     transport:
       dashboard: localhost:8080 #配置Sentinel dashboard地址
       port: 8719

management:
 endpoints:
   web:
     exposure:
       include: '*'

controller

@RestController
public class FlowLimitController {

@GetMapping("/test")
public String testA()
{
return "------hello sentinel-----------";
}
}

启动类添加@EnableDiscoveryClient注解,先启动nacos,启动项目。

启动成功,服务已注册到nacos。

请点击输入图片描述

访问请求,http://localhost:8401/test。

刷新sentinel控制台,点击簇点链路。

请点击输入图片描述

点击流控,或下面的流控规则。那具体这些是干嘛用的?下面将一一介绍。

流控规则

资源名:唯一名称,默认请求路径

针对卡片:Sentinel可以针对调用者进行限流,填写微服务名,默认为default(不区分来源)

阈值类型/单机阈值:

1.QPS:每秒请求数,当前调用该api的QPS到达阈值的时候进行限流

2.线程数:当调用该api的线程数到达阈值的时候,进行限流

是否集群:是否为集群

流控模式

1.直接:当api大达到限流条件时,直接限流

2.关联:当关联的资源到达阈值,就限流自己

3.链路:只记录指定路上的流量,指定资源从入口资源进来的流量,如果达到阈值,就进行限流,api级别的限流

举例,先看流控模式为直接

选择QPS,直接,快速失败,单机阈值为1。

频繁刷新请求,1秒访问1次请求,正常,超过设置的阈值,将报默认的错误。

请点击输入图片描述

再次的1秒访问1次请求,访问正常。

流控模式为关联

添加一个请求

@GetMapping("/testGualian")
public String testGualian()
{
  return "------testGualian-----------";
}

选择QPS,单机阈值为1,选择关联,关联资源为/testGualian,这里用Jmeter模拟高并发,请求/testGualian。

请点击输入图片描述

在大批量线程高并发访问/testGualian,导致/test失效了

请点击输入图片描述

链路就不再演示了。多个请求调用同一微服务。

流控模式为Warm up(预热)

当流量突然增大的时候,我们常常会希望系统从空闲状态到繁忙状态的切换的时间长一些。即如果系统在此之前长期处于空闲的状态,我们希望处理请求的数量是缓步的增多,经过预期的时间以后,到达系统处理请求个数的最大值。Warm Up(冷启动,预热)模式就是为了实现这个目的的。

默认 coldFactor 为 3,即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值。

请点击输入图片描述

先在单机阈值10/3,3的时候,预热5秒后,慢慢将阈值升至10。刚开始刷/test,会出现默认错误,预热时间到了后,阈值增加,没超过阈值刷新,请求正常。

通常冷启动的过程系统允许通过的 QPS 曲线如下图所示:

请点击输入图片描述

如秒杀系统在开启瞬间,会有很多流量上来,很可能把系统打死,预热方式就是为了保护系统,可慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值。

流控模式为排队等待

匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。阈值必须设置为QPS。

请点击输入图片描述

这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。

总结

到这已经学习Sentinel的基本的使用,在很多的特性和Hystrix有很多类似的功能。以下是Sentinel和Hystrix的对比。

请点击输入图片描述

后续将介绍Sentinel其他内容。

 

这篇关于阿里的Sentinel流量防卫兵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303042

相关文章

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回

poj 3422 有流量限制的最小费用流 反用求最大 + 拆点

题意: 给一个n*n(50 * 50) 的数字迷宫,从左上点开始走,走到右下点。 每次只能往右移一格,或者往下移一格。 每个格子,第一次到达时可以获得格子对应的数字作为奖励,再次到达则没有奖励。 问走k次这个迷宫,最大能获得多少奖励。 解析: 拆点,拿样例来说明: 3 2 1 2 3 0 2 1 1 4 2 3*3的数字迷宫,走两次最大能获得多少奖励。 将每个点拆成两个

poj 2195 bfs+有流量限制的最小费用流

题意: 给一张n * m(100 * 100)的图,图中” . " 代表空地, “ M ” 代表人, “ H ” 代表家。 现在,要你安排每个人从他所在的地方移动到家里,每移动一格的消耗是1,求最小的消耗。 人可以移动到家的那一格但是不进去。 解析: 先用bfs搞出每个M与每个H的距离。 然后就是网络流的建图过程了,先抽象出源点s和汇点t。 令源点与每个人相连,容量为1,费用为

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

Sentinel 高可用流量管理框架

Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应

阿里云服务器ces

允许公网通过 HTTP、HTTPS 等服务访问实例 https://help.aliyun.com/document_detail/25475.html?spm=5176.2020520101.0.0.3ca96b0b3KGTPq#allowHttp

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。

阿里提出UniPortrait,能根据用户提供的文本描述,快速生成既忠实于原图又能灵活调整的个性化人像,用户甚至可以通过简单的句子来描述多个不同的人物,而不需要一一指定每个人的位置。这种设计大大简化了用户的操作,提升了个性化生成的效率和效果。 UniPortrait以统一的方式定制单 ID 和多 ID 图像,提供高保真身份保存、广泛的面部可编辑性、自由格式的文本描述,并且无需预先确定的布局。

WebShell流量特征检测_哥斯拉篇

90后用菜刀,95后用蚁剑,00后用冰蝎和哥斯拉,以phpshell连接为例,本文主要是对后三款经典的webshell管理工具进行流量分析和检测。 什么是一句话木马? 1、定义 顾名思义就是执行恶意指令的木马,通过技术手段上传到指定服务器并可以正常访问,将我们需要服务器执行的命令上传并执行 2、特点 短小精悍,功能强大,隐蔽性非常好 3、举例 php一句话木马用php语言编写的,运行