当前位置: 首页 > news >正文

Sentinel 知识总结

Sentinel 知识总结

Sentinel 是阿里巴巴开源的一个轻量级流量控制框架,主要用于保护系统稳定性和流畅性。它提供了多种流量控制策略,包括QPS限流、并发数限流、线程池限流等,并且支持集群限流。此外,Sentinel还提供了熔断降级、系统负载均衡等功能。

一、Sentinel 简介

1.1 什么是 Sentinel?

Sentinel(哨兵)是阿里巴巴开源的一个轻量级流量控制框架,主要用于保护系统稳定性和流畅性。它可以帮助您实现以下目标:

限制系统的QPS,防止系统过载;
提供实时的监控和告警功能;
提供熔断降级功能,防止系统雪崩;
提供系统负载均衡功能。

1.2 Sentinel 的特性

轻量级:Sentinel 的核心库只有200KB左右,对性能的影响非常小;
实时监控:Sentinel 可以实时监控系统的QPS、RT等信息,并提供实时告警功能;
多维度的流量控制:Sentinel 支持基于调用关系、资源、参数等多个维度的流量控制;
集群流量控制:Sentinel 支持集群限流,可以实现多台机器的统一流量控制;
熔断降级:Sentinel 提供了熔断降级功能,可以在服务不可用时自动降级,防止系统雪崩;
系统负载均衡:Sentinel 可以对系统的入口流量进行调度,实现系统的负载均衡。

二、Sentinel 架构解析

2.1 架构总览

Sentinel 的架构设计简洁清晰,主要分为核心库、Dashboard、规则中心等几个部分。

2.2 核心库

核心库是 Sentinel 的主要实现部分,包括流量控制、熔断降级等功能。核心库主要包括以下几个部分:

流量统计:通过滑动窗口算法来统计QPS、RT等指标;
流量控制:根据预先设定的规则和实时统计的指标来决定是否放行请求;
熔断降级:在服务不可用时自动降级,防止系统雪崩;
系统负载均衡:对系统的入口流量进行调度,实现系统的负载均衡。

2.3 Dashboard

Dashboard 是 Sentinel 的控制台,用于管理和监控 Sentinel 的各项功能。Dashboard 主要包括以下几个部分:

实时监控:实时展示系统的QPS、RT等指标;
规则管理:提供规则的增删改查功能,支持在线修改规则并实时生效;
集群管理:提供集群的管理功能,支持多台机器的统一管理。

2.4 规则中心

规则中心是 Sentinel 的规则存储组件,用于存储流量控制、熔断降级等规则。规则中心主要包括以下几个部分:

规则存储:提供规则的存储功能,支持多种存储方式;
规则推送:将规则推送到各个客户端,实现规则的统一管理。

三、Sentinel 快速入门

3.1 环境准备

首先需要安装 Java 环境,然后从 Sentinel 官网下载 Sentinel 的源码或者二进制包。

3.2 启动 Sentinel

解压下载好的 Sentinel 压缩包,进入 sentinel-dashboard/sentinel-dashboard-web 目录,执行 mvn clean package -Dmaven.test.skip=true 命令打包,然后在 target 目录下找到 sentinel-dashboard.jar,执行 java -jar sentinel-dashboard.jar 命令启动 Sentinel。

3.3 使用 Sentinel

在项目中引入 Sentinel 的依赖,然后通过 SphU.entry(resourceName) 方法来定义一个资源,并通过 SphU.entry(resourceName).setHandler(handler) 方法来设置处理函数。在处理函数中,可以通过 context.getCurEntry() 方法来获取当前请求的信息,并根据信息来进行流量控制、熔断降级等操作。

四、Sentinel 核心概念详解

4.1 资源

资源是 Sentinel 进行流量控制的最小单位,通常对应一个服务或一个方法。在 Sentinel 中,资源是通过 resourceName 来唯一标识的。

4.2 流量控制

流量控制是 Sentinel 的核心功能之一,主要用于限制系统的QPS,防止系统过载。在 Sentinel 中,流量控制是通过滑动窗口算法来实现的,可以精确地计算每个资源的QPS,并根据QPS来进行流量控制。

4.2.1流量控制设计理念
  • 资源的调用关系:例如资源的调用链路,资源和之源之间的关系
  • 运行指标:例如QPS、线程池、系统负载等。
  • 控制效果:例如直接限流、冷启动、排队等。
4.2.2流控规则介绍

参数:

  • 资源名:其实就是我们请求的资源路径
  • 针对来源:这个是此流控规则对应哪些微服务进行流控管理,一般填写调用方的微服务名称,多个用“,”分割
  • 阈值类型:一般有2种类型,QPS(每秒最大请求数)和线程数(并发线程数)
  • 单机阈值:单机状态下的最大限制值
  • 是否集群:根据实际情况选择
  • 流控模式:
    • 直接:当 api 调用达到限流条件的时,直接限流;
    • 关联:当关联的资源请求达到阈值的时候,限流自己;
    • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,则进行限流)。
  • 流控效果:
    • 快速失败:直接失败;
    • Warm Up:即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过冷启动,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个越热的时间,避免冷系统被压。
    • 排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为 QPS,否则无效。
4.2.3流量控制模式

1)直接模式流量控制
在这里插入图片描述
2)关联模式流量控制
在这里插入图片描述
3)链路模式限流
在这里插入图片描述4)流控效果处理冷启动
在这里插入图片描述
在这里插入图片描述
5)流控效果排队等待
在这里插入图片描述
6)线程池隔离
在这里插入图片描述

4.3 熔断降级

4.3.1熔断降级机制

熔断降级是 Sentinel 的另一个核心功能,主要用于防止系统雪崩。在 Sentinel 中,熔断降级是通过熔断器模式来实现的,当某个资源出现异常时,会自动降级,避免影响其他资源。
断路器控制熔断和放行是通过状态机制来完成的:
在这里插入图片描述
在这里插入图片描述

4.3.2 熔断讲解策略

慢调用

业务的响应时长(RT)大于指定时长的请求认定为慢调用请求,在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定阈值,则触发熔断。
设置慢调用规则

在这里插入图片描述

异常比例、异常数

统计指定时间内的调用,如果调用次数超过指定请求数,并且出现一次里达到设定的比例阈值(或超过指定一常数),则触发熔断。
设置异常比例规则
在这里插入图片描述

五、Sentinel 高级特性剖析

5.1 集群流量控制

Sentinel 支持集群流量控制,可以实现多台机器的统一流量控制。在 Sentinel 中,集群流量控制是通过规则中心来实现的,可以将规则推送到各个客户端,实现规则的统一管理。

5.2 系统负载均衡

Sentinel 支持系统负载均衡,可以对系统的入口流量进行调度,实现系统的负载均衡。在 Sentinel 中,系统负载均衡是通过负载均衡器来实现的,可以根据系统的负载情况来动态调整流量分配。

六、Sentinel 生态集成

6.1 Spring Cloud Alibaba Sentinel

Spring Cloud Alibaba Sentinel 是 Spring Cloud 体系中的一部分,提供了与 Sentinel 集成的解决方案。通过使用 Spring Cloud Alibaba Sentinel,可以方便地将 Sentinel 作为 Spring Cloud 应用的流量控制和熔断降级组件使用。
以上就是全部内容,如果你有任何问题、意见或建议,都欢迎在评论中分享。让我们继续分享知识,共同成长,一起走向更加美好的未来。感谢你们的阅读,祝愿你们在未来的道路上一帆风顺!

相关文章:

  • vue3开发,axios发送请求是携带params参数的避坑
  • Android 12.0 应用中监听系统收到的通知
  • 代码随想录算法训练营第36天 | 435.无重叠区间 + 763.划分字母区间 + 56.合并区间
  • 投标书撰写注意事项
  • HiveSQL题——数据炸裂和数据合并
  • 海外短剧系统国际短剧源码h5多语言版app挂载tiktok油管ins
  • Linux系统-学习
  • LaTeX 文本对齐:ragged2e 宏包
  • 【大厂AI课学习笔记】1.3 人工智能产业发展(4)——泛在的人工智能
  • 提升小波变换的程序演示
  • 什么是系统工程(字幕)13
  • Shell - 学习笔记 - 2.6 - Shell $*和$@之间的区别
  • 延伸与应用(三)婚姻与经济、运动、宗教、科技与经济
  • Windows11通过Hyper-V创建VM,然后通过vscode连接vm进行开发
  • 我的数据结构c(给自己用的)
  • python3.6+scrapy+mysql 爬虫实战
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Angular Elements 及其运作原理
  • CAP 一致性协议及应用解析
  • CSS盒模型深入
  • JavaScript 基础知识 - 入门篇(一)
  • js
  • Linux各目录及每个目录的详细介绍
  • Python实现BT种子转化为磁力链接【实战】
  • Redis 中的布隆过滤器
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • vue.js框架原理浅析
  • Vue全家桶实现一个Web App
  • Yeoman_Bower_Grunt
  • 欢迎参加第二届中国游戏开发者大会
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 开源地图数据可视化库——mapnik
  • 前端技术周刊 2019-02-11 Serverless
  • 突破自己的技术思维
  • 赢得Docker挑战最佳实践
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #微信小程序:微信小程序常见的配置传旨
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (转)关于多人操作数据的处理策略
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET Core WebAPI中封装Swagger配置
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net 微服务 服务保护 自动重试 Polly
  • .net 无限分类
  • .NET/C# 使用 ConditionalWeakTable 附加字段(CLR 版本的附加属性,也可用用来当作弱引用字典 WeakDictionary)
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /var/lib/dpkg/lock 锁定问题
  • :“Failed to access IIS metabase”解决方法
  • @Resource和@Autowired的区别