5.Sentinel入门与使用

5.Sentinel入门与使用

  • 1.什么是 Sentinel?
    • Sentinel 主要有以下几个功能:
  • 2.为什么需要 Sentinel?
  • 3.Sentinel 基本概念
    • 3.1 什么是流量控制?
      • 3.1.1 常见流量控制算法
      • 3.1.2 Sentinel 流量控制
      • 流控效果介绍如下:
    • 3.2 什么是熔断?
      • 熔断策略
    • 3.3 Sentinel 组成(资源和规则)
  • 4.Sentinel 基本使用
    • 4.1实现限流功能
      • 4.1.1 添加 Sentinel 框架依赖
      • 4.1.2 定义资源
        • @SentinelResource 注解详解
        • blockHandler 使用注意事项:
        • 资源的定义方式有两种:
          • 1.通过代码定义
          • 2.通过注解定义
      • 4.1.3 定义规则
      • 4.1.4 验证效果
    • 4.2实现熔断(降级)功能
    • 4.3 如何判断是限流还是熔断?
  • 5.Sentinel 控制台
    • 5.1 使用 Sentinel 控制台实现限流
    • 5.2下载并运行 Sentinel Dashboard
    • 5.3 在程序中加入并配置 Sentinel
    • 5.4 设置规则
      • 5.4.1 新增限流规则
      • 5.4.2 新增熔断规则
      • 5.4.3 新增热点规则
        • 热点限流
      • 5.4.4 新增授权规则
      • 5.4.5 新增系统保护规则
    • 5.5验证效果
    • 5.6 自定义 Sentinel 异常
  • 6.使用 Nacos 存储数据
    • 6.1 添加依赖
    • 6.2配置数据源
    • 6.3 Nacos 新建配置
    • 6.4 验证效果
  • 7.Sentinel 配置多数据源 (扩展)
    • 7.1 配置多数据源
    • 7.2 Nacos 新建熔断配置
  • Sentinel和Gateway
    • 1.功能实现
      • 1.添加框架依赖
      • 2.设置配置文件
      • 3. 设置限流和熔断规则
      • 4.验证规则
    • 2. 实现原理
  • 8.工作机制

1.什么是 Sentinel?

Spring Cloud Alibaba Sentinel(以下简称 Sentinel)是一个开源的流量控制和熔断框架,它是 Alibaba 开源的微服务框架Spring Cloud Alibaba 中的一个组件。Sentinel 旨在解决分布式系统中的流量控制和熔断问题,帮助开发人员保护微服务应用免受系统负载过高和故障的影响。

Sentinel 主要有以下几个功能:

  1. 流量控制:可以通过配置规则对接口的访问量进行限制,避免因流量过高而导致系统崩溃
  2. 服务熔断:当后端服务不可用或异常时,可以通过配置熔断规则,快速失败并返回错误信息,避免连锁故障。
  3. 系统负载保护:根据系统的负载情况,自动控制流量的通过,防止系统出现过载现象。
  4. 统计和监控:提供实时的流量控制和熔断统计信息,可以通过 Dashboard(控制台)进行可视化监控和配置。

2.为什么需要 Sentinel?

在这里插入图片描述
需要使用 Sentinel 的原因主要有以下几个!

  1. 防止雪崩效应:当某个服务故障时,传统的做法是让请求一直等待,直到服务恢复正常。然而,这可能导致请求积压,进而导致其他服务也出现故障,最终形成雪崩效应。Sentinel 可以通过熔断机制,及时返回错误信息,避免连锁故障。
  2. 流量控制:在高并发场景下,如果系统突然接收到大量请求,可能会导致系统过载,影响正常的服务。Sentinel 可以通过流量控制机制,限制并发请求的数量,确保系统的可用性和稳定性。
  3. 保护系统稳定性:在微服务架构中,多个服务之间相互依赖,一个服务的故障可能导致整个系统的崩溃。Sentinel 可以对请求进行流量控制和熔断,避免由于某个服务的故障导致整个系统不可用。

3.Sentinel 基本概念

3.1 什么是流量控制?

流量控制是指对系统中的请求流量进行限制和管理,以确保系统在承受能力范围内正常运行。

3.1.1 常见流量控制算法

在这里插入图片描述
常见的流量控制算法有令牌桶算法(Token Bucket)和漏桶算法(Leaky Bucket)。这两种算法都可以用来平滑流量并控制数据包的传输速率,防止突发流量对系统造成影响。

  1. 令牌桶算法(Token Bucket):
    令牌桶算法是一种基于令牌的流量控制算法,它维护一个令牌桶,该桶以固定的速率往里面放入令牌。每当有数据包到达时,需要从令牌桶中取出一个令牌,如果没有足够的令牌,则数据包将被丢弃或延迟处理。这样可以限制数据包的传输速率,平滑流量,防止突发流量对系统造成影响。

举例说明:
假设一个令牌桶算法的令牌桶容量为100个令牌,每秒往桶中放入10个令牌,即系统的传输速率为10个数据包/秒。当一个数据包到达时,需要从令牌桶中取出一个令牌,如果桶中有足够的令牌,则可以传输数据包;如果桶中没有足够的令牌,则需要等待,直到桶中有足够的令牌为止。

  1. 漏桶算法(Leaky Bucket):
    漏桶算法是一种基于漏桶的流量控制算法,它维护一个固定容量的漏桶,数据包以固定速率进入漏桶。当数据包到达时,如果漏桶未满,则可以传输数据包;如果漏桶已满,则数据包将被丢弃或延迟处理。漏桶算法可以平滑流量,防止突发流量对系统造成影响。

举例说明:
假设一个漏桶算法的漏桶容量为100个数据包,漏桶的漏出速率为10个数据包/秒,即系统的传输速率为10个数据包/秒。当一个数据包到达时,如果漏桶未满,则可以传输数据包;如果漏桶已满,则需要等待,直到有空间为止。

这两种算法在实际应用中都可以有效地控制流量,保护系统免受突发流量的影响。在选择算法时,可以根据具体的需求和场景来决定使用哪种算法。

3.1.2 Sentinel 流量控制

Sentinel 流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系,
  • 运行指标,例如 QPS(Queries Per Second,每秒查询数)、线程池、系统负载等。
  • 控制的效果,例如直接限流、冷启动、排队等。

Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。Sentinel 限流配置:

流控效果介绍如下:

  • 快速失败:该方式是默认的流量控制方式,比如 OPS 超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出 FlowException。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时。
  • 排队等待(也叫匀速通过):排队等待会严格控制请求通过的间隔时间,让请求稳定且匀速的通过,可以用来处理间隔性突发的高流量。例如抢票软件,在某一秒或者一分钟内有大量的请求到来,而接下来的一段时间里处于空闲状态,我们希望系统能够在接下来的空余时间里也能出去这些请求,而不是直接拒绝。在设置排队等待时,需要填写超时时间。
  • Warm Up:此项叫做预热或者冷启动方式,此模式主要是防止流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮,通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。当使用 Warm Up 模式时,我们还需要指定启动时开放的 QPS 比例(DEFAULT COLD FACTOR,默认值为 3,代表 30%),以及系统预热所需时长(warmUpPeriodSec,默认值是 10 秒)。

3.2 什么是熔断?

熔断是一种在分布式系统中处理故障和异常的策略。当某个服务或者接口发生故障或异常时,熔断机制会迅速将请求拒绝或者返回错误信息,而不是让请求一直等待或者重试,以保护系统免受故障的扩散影响。

熔断的原理是通过对服务的监控和评估,根据一定的规则来判断服务的健康状况。当服务的错误率或者响应时间超过设定的阈值时,熔断器会触发,并将后续的请求迅速拦截或者返回错误信息,而不是继续调用该服务,从而避免由于故障服务的长时间不可用或者响应过慢而导致整个系统的延迟或者崩溃。
熔断机制的好处是能够快速失败并返回错误信息,避免资源的浪费和系统的连锁故障。当服务恢复正常时,熔断器会逐渐放行请求,验证服务的可用性,确保系统逐渐恢复正常运行。

熔断策略

Sentinel是阿里巴巴开源的一款面向分布式服务架构的高可用流量控制组件,它提供了流量控制、熔断降级、系统负载保护等功能。在Sentinel中,熔断是一种重要的流量控制策略,用于保护系统免受异常流量的影响。以下是几种常见的Sentinel熔断策略:

  1. 基于异常比例的熔断策略
    这种策略会根据请求的异常比例来触发熔断。当系统中某个接口的异常比例超过设定的阈值时,Sentinel会触发熔断,暂时停止对该接口的请求处理,以避免异常请求继续对系统造成影响。在熔断打开后,Sentinel会定时尝试关闭熔断,恢复对该接口的请求处理。

  2. 基于平均响应时间的熔断策略
    这种策略会根据接口的平均响应时间来触发熔断。当系统中某个接口的平均响应时间超过设定的阈值时,Sentinel会触发熔断,暂时停止对该接口的请求处理,以避免响应时间过长影响系统的整体性能。在熔断打开后,Sentinel会定时尝试关闭熔断,恢复对该接口的请求处理。

  3. 基于并发线程数的熔断策略
    这种策略会根据接口的并发线程数来触发熔断。当系统中某个接口的并发线程数超过设定的阈值时,Sentinel会触发熔断,暂时停止对该接口的请求处理,以避免过多的并发请求导致系统负载过高。在熔断打开后,Sentinel会定时尝试关闭熔断,恢复对该接口的请求处理。

这些熔断策略可以根据具体的业务需求和系统特点进行配置和调整,帮助系统在面对异常流量时保持稳定和可靠。在实际应用中,可以根据系统的情况选择合适的熔断策略,并通过监控和调优来保证系统的高可用性和稳定性。

3.3 Sentinel 组成(资源和规则)

Sentine| 中有两个重要的组件:资源和规则。

  1. 资源:Sentinel 中被保护的对象,可以是方法、接口、URL 等
  2. 规则:对资源的访问策略,包括限流、熔断、热点等。规则包含以下这些:
  • 限流规则:基于不同的模式对流量进行控制,可以直接拒绝、等待等。
  • 熔断规则:异常情况下进行熔断降级。
  • 热点规则:对热点数据进行针对性的流量控制
  • 授权规则:对调用方(入口服务)进行黑、白名单限制。
  • 系统保护规则:基于 CPU、负载、整体 QPS、线程数多个指标进行自适应的流量控制。

4.Sentinel 基本使用

在这里插入图片描述

在这里插入图片描述
Sentinel 基本使用主要分为以下 4 步:

  1. 添加 Sentinel 依赖
  2. 定义资源
  3. 定义规则
  4. 验证效果

4.1实现限流功能

在这里插入图片描述

4.1.1 添加 Sentinel 框架依赖

在这里插入图片描述

在这里插入图片描述

4.1.2 定义资源

在这里插入图片描述
在这里插入图片描述

@SentinelResource 注解详解

@SentinelResource 注解详解
@SentinelResource 注解属性说明:

  • value:资源名称,必需项(不能为空)
  • entryType:资源调用的流量类型入口流量(EntryType.IN)和出口流量(EntryType.OUT)注意系统规则只对 IN 生效。
  • blockHandler/blockHandlerClass: 限流和熔断时执行 BlockException 所对应的方法名。 限流和熔断执行的业务
  • fallback/fallbackClass:非 BlockException 时,其他非限流、非熔断时异常对应的方法。
  • exceptionsToIgnore:用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 falback 逻辑中,而是会原样抛出。
    注:1.6.0 之前的版本 fallback 函数只针对熔断降级异常(DegradeException)进行处理,不能针对业务异常进行处理。
blockHandler 使用注意事项:

在这里插入图片描述

资源的定义方式有两种:
1.通过代码定义

通过代码定义资源
可以通过代码的的方式 SphU.entry("resourceName”)来定义资源,具体实现代码如下:
在这里插入图片描述
SphU 是 Sentinel Protection Hotspot Util 的缩写,Sentinel 热点保护工具类。

2.通过注解定义

通过注解 @SentinelResource 也可以实现资源的定义,如下代码所示:
在这里插入图片描述

  • value:资源名称,必需项(不能为空)
  • entryType:资源调用的流量类型:入口流量(EntryType.IN)和出口流量(EntryType.OUT),注意系统规则只对 IN 生效。
  • blockHandler/blockHandlerClass: 限流和熔断时执行 BlockException 所对应的方法名。fallback/fallbackClass:非BlockException 时,其他非限流、非熔断时异常对应的方法
  • exceptionsToIgnore:用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入 fallback 逻辑中,而是会原样抛出。

注:1.6.0 之前的版本 falback 函数只针对熔断降级异常(DegradeException)进行处理,不能针对业务异常进行处理。

4.1.3 定义规则

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.1.4 验证效果

在这里插入图片描述

在这里插入图片描述

4.2实现熔断(降级)功能

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.3 如何判断是限流还是熔断?

在这里插入图片描述

在这里插入图片描述

5.Sentinel 控制台

在这里插入图片描述

Sentinel 控制台包含如下功能:

  • 查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。
  • 监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。
  • 规则管理和推送:统一管理推送规则。
  • 鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。注意:Sentinel控制台目前仅支持单机部署。Sentinel 控制台项日提供 Sentinel 功能全集示例,不作为开箱即用的生产环境控制台,若希望在生产环境使用请根据文档自行进行定制和改造。

5.1 使用 Sentinel 控制台实现限流

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.2下载并运行 Sentinel Dashboard

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.3 在程序中加入并配置 Sentinel

在这里插入图片描述

在这里插入图片描述

5.4 设置规则

在这里插入图片描述

在这里插入图片描述

5.4.1 新增限流规则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.4.2 新增熔断规则

在这里插入图片描述

5.4.3 新增热点规则

热点限流

在这里插入图片描述
在这里插入图片描述

5.4.4 新增授权规则

在这里插入图片描述

在这里插入图片描述

5.4.5 新增系统保护规则

在这里插入图片描述

5.5验证效果

在这里插入图片描述

在这里插入图片描述

5.6 自定义 Sentinel 异常

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.使用 Nacos 存储数据

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

6.1 添加依赖

在这里插入图片描述

6.2配置数据源

在这里插入图片描述

6.3 Nacos 新建配置

在这里插入图片描述

6.4 验证效果

在这里插入图片描述

7.Sentinel 配置多数据源 (扩展)

在这里插入图片描述

7.1 配置多数据源

在这里插入图片描述

7.2 Nacos 新建熔断配置

在这里插入图片描述
在这里插入图片描述

Sentinel和Gateway

在这里插入图片描述

在这里插入图片描述

1.功能实现

在这里插入图片描述

1.添加框架依赖

在这里插入图片描述

在这里插入图片描述

2.设置配置文件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3. 设置限流和熔断规则

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.验证规则

在这里插入图片描述

2. 实现原理

在这里插入图片描述

8.工作机制

在这里插入图片描述

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

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

相关文章

springboot+shiro+jwt 兼容session和token

最近和别的软件集成项目,需要提供给别人接口来进行数据传输,发现给他token后并不能访问我的接口,拿postman试了下还真是不行。检查代码发现项目的shiro配置是通过session会话来校验信息的 ,我之前一直是前后端自己写,用…

等级考试3-2021年3月题

作业&#xff1a; #include <iostream> using namespace std; int chonghe(int,int,int,int); int main(){int a[1000],b[1000];int n,ma0;cin>>n;for(int i0;i<n;i){cin>>a[i]>>b[i];}for(int i0;i<n;i){for(int ji1;j<n;j){mamax(ma,chongh…

华为云CodeArts API:API管理一体化平台 5月新特性上线啦!

CodeArts API是华为云API全生命周期管理一体化解决方案平台&#xff0c;支持开发者高效实现API设计、API开发、API测试、API托管、API运维、API变现的一站式体验。 通过以API契约为锚点&#xff0c;CodeArts API保证API各阶段数据高度一致&#xff0c;为开发者提供友好易用的A…

非线性模型预测控制NMPC例子

NMPC概述 非线性模型预测控制(Nonlinear Model Predictive Control, NMPC)是一种用于控制非线性系统的高级控制策略。与线性MPC不同,NMPC需要处理系统的非线性特性,这使得优化问题更加复杂。NMPC通常使用迭代优化算法来求解非线性优化问题 NMPC基本原理 NMPC的目标是最小…

Github 2024-06-10开源项目周报 Top15

根据Github Trendings的统计,本周(2024-06-10统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目8Jupyter Notebook项目2Go项目2C++项目1Shell项目1Lua项目1JavaScript项目1MDX项目1C项目1HTML项目1Python - 100天从新手到大师 创建…

设计模式详解(全23种)

设计模式的分类 总体来说设计模式分为三大类&#xff1a; 创建型模式&#xff08;5&#xff09;&#xff1a; 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式&#xff08;7&#xff09;&#xff1a; 适配器模式、装饰器模式、代理模式、外观模式、桥…

SpringBoot3 常用的第三方接口调用十种方式

环境&#xff1a;SpringBoot.3.3.0 简介 在项目中调用第三方接口是日常开发中非常常见的。调用方式的选择通常遵循公司既定的技术栈和架构规范&#xff0c;以确保项目的一致性和可维护性。无论是RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式&#x…

从反向传播过程看激活函数与权重初始化的选择对深度神经网络稳定性的影响

之前使用深度学习时一直对各种激活函数和权重初始化策略信手拈用,然而不能只知其表不知其里。若想深入理解为何选择某种激活函数和权重初始化方法卓有成效还是得回归本源,本文就从反向传播的计算过程来按图索骥。 为了更好地演示深度学习中的前向传播和反向传播,有必要图文…

FM全网自动采集聚合影视搜索源码

源码介绍 FM 全网聚合影视搜索(响应式布局)&#xff0c;基于 TP5.1 开发的聚合影视搜索程序&#xff0c;本程序无数据库&#xff0c;本程序内置P2P 版播放器&#xff0c;承诺无广告无捆绑。片源内部滚动广告与本站无关,谨防上当受骗&#xff0c;资源搜索全部来自于网络。 环境…

模拟电子技术基础(一)--本证半导体与杂质半导体

半导体分为两大类&#xff1a;本征半导体和杂质半导体。这两种类型的半导体在电子结构和电导特性上有显著的区别。 本征半导体&#xff08;Intrinsic Semiconductor&#xff09; 定义和组成&#xff1a;本征半导体是纯净的半导体&#xff0c;没有任何杂质原子。最常见的本征半…

AI预测体彩排3采取888=3策略+和值012路或胆码测试6月16日升级新模型预测第1弹

根据前面的预测效果&#xff0c;我对模型进行了重新优化&#xff0c;因为前面的模型效果不是很好。熟悉我的彩友比较清楚&#xff0c;我之前的主要精力是对福彩3D进行各种模型的开发和预测&#xff0c;排三的预测也就是最近1个月才开始搞的。3D的预测&#xff0c;经过对模型的多…

【LeetCode最详尽解答】11-盛最多水的容器 Container-With-Most-Water

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 链接&#xff1a; 11-盛最多水的容器 直觉 这个问题可以通过可视化图表来理解和解决。 通过图形化这个…

动态功能连接评估方法的变异性

摘要 背景&#xff1a;动态功能连接(dFC)已成为理解大脑功能的一种重要测量指标。虽然已经开发了各种各样的方法来评估dFC&#xff0c;但目前尚不清楚方法的选择会如何影响结果。在这里&#xff0c;本研究旨在考察常用dFC方法的结果变异性。 方法&#xff1a;本研究在Python中…

Sigir2024 ranking相关论文速读

简单浏览一下Sigir2024中与ranking相关的论文。不得不说&#xff0c;自从LLM大热后&#xff0c;传统的LTR方向的论文是越来越少了&#xff0c;目前不少都是RAG或类似场景下的工作了&#xff0c;比如查询改写、rerank等。 文章目录 The Surprising Effectiveness of Rankers Tr…

QUIC 和 TCP: 深入解析为什么 QUIC 更胜一筹

引言 在过去的三十年里&#xff0c;HTTP&#xff08;超文本传输协议&#xff09;一直是互联网的支柱。我们可以通过 HTTP 浏览网页、下载文件、流式传输电影等。这一协议随着时间的推移已经得到了重大改进。 HTTP 协议是一个应用层协议&#xff0c;它基于 TCP&#xff08;传输…

基于Python+OpenCV+SVM车牌识别系统(GUI界面)【W3】

简介&#xff1a; 随着交通管理的日益复杂化和智能化需求的增加&#xff0c;车牌识别系统在安防、智慧交通管理等领域中扮演着重要角色。传统的车牌识别系统主要基于图像处理和模式识别技术&#xff0c;随着计算机视觉技术的发展&#xff0c;基于Python、OpenCV和机器学习算法的…

从零到爆款:用ChatGPT写出让人停不下来的短视频文案

一、前言 在自媒体的浪潮中&#xff0c;精彩的短视频文案对内容传播至关重要。众多辅助工具之中&#xff0c;凭借强大的语言处理能力和广泛的应用场景&#xff0c;ChatGPT成为了内容创作者的重要助力。接下来&#xff0c;我将介绍如何借助ChatGPT编写引人入胜的短视频文案&…

openh264 SVC 时域分层原理介绍

openh264 OpenH264是一个开源的H.264编码器&#xff0c;由Cisco公司开发并贡献给开源社区。它支持包括SVC&#xff08;Scalable Video Coding&#xff09;在内的多种编码特性&#xff0c;适用于实时应用场景&#xff0c;比如WebRTC。OpenH264项目在GitHub上是公开的&#xff0…

【ARM Cache 及 MMU 系列文章 6.5 -- 如何进行 Cache miss 统计?】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 ARM Cache Miss 统计Cache 多层架构简介Cache 未命中的类型Cache 未命中统计Cache miss 统计代码实现Cache Miss 统计意义ARM Cache Miss 统计 在ARMv8/v9架构中,缓存未命中(Cache …

计算机网络之网络层知识总结

网络层功能概述 主要任务 主要任务是把分组从源端传到目的端&#xff0c;为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报。 分组和数据报的关系&#xff1a;把数据报进行切割之后&#xff0c;就是分组。 主要功能&#xff1a; 路由选择与分组转发 路由器…