Sentinel(理论版)

Sentinel

1.什么是Sentinel

Sentinel 是一个开源的流量控制组件,它主要用于在分布式系统中实现稳定性与可靠性,如流量控制、熔断降级、系统负载保护等功能。简单来说,Sentinel 就像是一个交通警察,它可以根据系统的实时流量(请求)和系统的健康状况,动态地调整系统的流量规则,避免系统因为突发的高流量而崩溃,保证系统的稳定运行。

例如,假设你有一个在线商城的系统,在大促销活动期间,系统可能会突然接收到大量的访问请求,如果处理不当,系统可能会因为负载过高而变得响应缓慢甚至崩溃。这时,Sentinel 就可以发挥作用了,它可以限制访问速率,只允许一定数量的用户请求在同一时间进行,超过限制的请求可以被排队或直接拒绝,以此来保护系统不被过载。

总的来说,Sentinel 的目的是通过实时监控系统的流量和状态,动态地进行流量控制和服务降级,从而保证系统的高可用性和稳定性。

2.Sentinel的主要功能

1.流量控制
说明:就像是水坝控制水流一样,Sentinel 可以控制系统的请求流量,确保系统不会因为流量过大而崩溃。
场景:比如双十一期间,电商平台的订单系统可能会接收到海量订单请求,通过流量控制,Sentinel 可以限制每秒处理的订单数量,避免系统崩溃。

2.熔断降级
说明:当系统某部分出现问题,可能会拖垮整个系统。熔断降级就像是紧急刹车,暂时停用某些功能,保证系统的主体还能正常运行。
场景:如果一个在线视频网站的推荐服务出现故障,Sentinel 可以暂时关闭推荐功能,而不是让整个视频网站瘫痪,用户仍然可以搜索和观看视频。

3.系统负载保护
说明:保护系统不会因为过载(如CPU使用率过高)而崩溃,类似于电路中的过载保护器。
场景:在一个天气预报应用中,如果因为极端天气导致查询请求激增,超出了服务器的处理能力,Sentinel 可以限制请求量,保护系统不被过载。

4.热点参数限流
说明:对于频繁访问的“热点数据”,可以进行特别的流量控制,就像超市的促销区会特别安排工作人员维持秩序。
场景:在电商平台上,对于某个热门商品的购买请求可能会集中爆发,Sentinel 可以对这个商品的购买请求进行特别限流,保证服务器稳定。

5.授权规则
说明:根据请求来源(如IP地址)决定是否允许请求,类似于门卫根据身份决定是否让人进入。
场景:一个公司内部的管理系统,可以设置仅允许公司内部网络的请求访问,外部的任何请求都不允许,保证系统安全。

3.为什么需要Sentinel

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

4.Sentinel基本概念

4.1什么是流量控制

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

4.2流量控制算法

  1. 计数器流量控制算法
    解释:这个算法就像是超市入口的计数器,限定在一定时间内只允许一定数量的顾客进入。每当有顾客进入时,计数器就加一;时间到了后,计数器清零重新开始。
    例子:一个网站设置了每分钟只能处理100个请求。如果这一分钟有101个请求,当第101个请求在同一分钟内到来时,系统会拒绝这个请求,直到下一分钟开始;如果不到100个请求的话,这一分钟时间到了之后,计数器就清零,然后重新计数。
  2. 漏桶流量控制算法
    解释:想象一个水桶有一个固定速度的漏洞,无论向桶内倒水的速度多快,桶里的水只能通过漏洞以固定的速度流出。这个算法用于平滑流量,使得处理请求的速率保持恒定。
    例子:一个服务器被设置为每秒只能发送10个数据包。即使在某一刻服务器收到了一大批数据包,它也只会以每秒10个包的速率发送这些数据包,多余的数据包会在“桶”里排队等待处理。
  3. 令牌桶流量控制算法
    解释:令牌桶算法更加灵活。系统会以恒定的速度往桶里添加令牌,每个请求处理前都需要从桶里取出一个令牌。如果桶里没有令牌,请求就需要等待。但是,桶里可以存储令牌,允许短时间内处理大量请求,只要有足够的令牌。
    例子:一个API限制每秒可处理10个请求,但是它可以处理突发的20个请求,只要之前有足够的令牌积累在桶里。如果有一瞬间来了20个请求,系统可以处理这20个请求,但之后在没有足够令牌的情况下,新的请求就需要等待令牌的生成。

4.3流量控制角度

Sentinel流量控制主要有以下几个角度:
1.资源的调用关系,例如资源的调用链路,资源和资源之间的关系
2.运行指标,例如(QPS—每秒查询数)、线程池、系统负载等。
3.控制的效果:例如直接限流、冷启动、排队等
Sentinsl的设计理念是这三个角度自由选择,根据需求灵活的组合,来达到想要的目的
在这里插入图片描述
流控效果如下:
1.快速失败:这种方式是默认的流量控制方式,比如QPS超过任意规则的阈值之后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位的时候。
2.Warm up :此项叫做预热/冷启动 方式,此模式主要是防止流量突然增加时,直接把系统的流量拉升到一个很高的程度,直接让系统垮了,通过冷启动,让通过的流量缓慢的增加,在一定的时间内逐渐增加到阈值上限,给系统一个预热的时间,避免直接被压垮。
3.排队等待(也叫匀速通过):排队等待会严格控制请求通过的间隔时间,让请求稳定且匀速的通过,可以用来处理间隔性突发的高流量。比如抢票软件,在某一秒内有大量的请求到来,而接下来的一段时间里处于空闲状态,我们希望在接下来的空闲时间里也能出去这些请求,而不是直接拒绝,让他们排队等待。在设置排队等待的时候,需要填写超时时间。

4.3什么是熔断

Sentinel 熔断是指在分布式系统中,为了防止系统雪崩,当某个微服务的错误率或响应时间超过预设的阈值时,自动停止对该服务的调用的机制。Sentinel 是阿里巴巴开源的面向分布式服务架构的高可用性保障组件,主要功能包括流量控制、熔断降级和系统负载保护等。
在微服务架构中,服务间的依赖错综复杂,任何一个服务的不稳定或失败都可能引起连锁反应,导致整个系统的不可用。熔断机制的引入,就是为了避免这种连锁反应,当检测到调用服务的失败率或延迟超过一定的阈值时,自动切断对该服务的调用,触发熔断,同时可能会提供一个备用方案(如返回一个默认值或调用一个备用服务),直到该服务恢复正常。

Sentinel 实现熔断主要有以下几种策略:
在这里插入图片描述

1.慢调用比例策略:当资源的平均响应时间超过阈值(如200ms),并且在一段时间内(如最近1分钟)的慢调用比例超过设定的比例(如50%),则对该资源进行熔断。
2.异常比例策略:当资源在一段时间内的异常比例超过设定的阈值(如50%),则对该资源进行熔断。
3.异常数策略:当资源在一段时间内的异常数超过设定的阈值,则对该资源进行熔断。
Sentinel 熔断的目的是通过对不稳定服务的及时隔离,保护系统的整体稳定性,同时也给出现问题的服务一个自我恢复的机会。一旦服务熔断后,Sentinel 会进入一个时间窗口,在这个时间窗口内部分请求(根据预设规则)仍然会尝试执行,如果这些尝试请求成功,则服务可能会从熔断状态恢复。这个过程称为“半开”状态,是为了探测服务是否已经恢复正常。

熔断的原理是通过对服务的监控和评估,根据一定的规则来判断服务的健康状况。当服务的错误率或者响应时间过设定的闻值时,熔断器会触发,并将后续的请求讯速拦截或者返回错误信息,而不是继续调用该服务,从而避免由于故障服务的长时间不可用或者响应过慢而导致整个系统的延迟或者崩溃。
容断机制的好外是能够快速失败并返回错误信息,避免资源的浪费和系统的连锁故障。当服务恢复正常时,熔断会逐渐放行请求,验证服务的可用性,确保系统逐渐恢复正常运行。
熔断通常与流量控制等其他机制结合使用,以加强系统的稳定性和可靠性。它可以降低系统的依赖性,提高系统容错能力,对于大规模分布式系统来说尤为重要。

4.4Sentinel组成

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电力负荷预测 | 基于TCN的电力负荷预测(Python)———模型构建

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 基于TCN的电力负荷预测(Python) python3.8 keras2.6.0 matplotlib3.5.2 numpy1.19.4 pandas1.4.3 tensorflow==2.6.0

停止内耗,做有用的事

很多读者朋友跟我交流的时候,都以为我有存稿,于是听到我说每周四现写的时候都很惊讶。其实没什么好惊讶的,每周四我都会把自己关在书房里一整天,断掉一切电话、微信、邮件,从中午写到晚上,直到写完为止。 这…

力扣● 62.不同路径 ● 63. 不同路径 II

● 62.不同路径 单解这道题的话,发现第一行或者第一列的这些位置,都只有一条路径走到,所以路径条数都是1。这就是初始化。坐标大于第一行第一列的这些位置,因为机器人只能向下/向右走,所以只能从上个位置向下走和从左…

用友U8 Cloud ReportDetailDataQuery SQL注入漏洞复现(QVD-2023-47860)

0x01 产品简介 用友U8 Cloud 提供企业级云ERP整体解决方案,全面支持多组织业务协同,实现企业互联网资源连接。 U8 Cloud 亦是亚太地区成长型企业最广泛采用的云解决方案。 0x02 漏洞概述 用友U8 cloud ReportDetailDataQuery 接口处存在SQL注入漏洞,攻击者未经授权可以访…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(2)

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

redis源码之:集群创建与节点通信(2)

在上一篇redis源码之:集群创建与节点通信(1)我们可知,在集群中,cluster节点之间,通过meet将对方加入到本方的cluster->nodes列表中,并在后续过程中,不断通过clusterSendPing发送p…

2 月 5 日算法练习- 动态规划

DP&#xff08;动态规划&#xff09;全称Dynamic Programming&#xff0c;是运筹学的一个分支&#xff0c;是一种将复杂问题分解成很多重叠的子问题、并通过子问题的解得到整个问题的解的算法。 在动态规划中有一些概念&#xff1a; n<1e3 [][] &#xff0c;n<100 [][][…

文心一言4.0API接入指南

概述 文心一言是百度打造出来的人工智能大语言模型&#xff0c;具备跨模态、跨语言的深度语义理解与生成能力&#xff0c;文心一言有五大能力&#xff0c;文学创作、商业文案创作、数理逻辑推算、中文理解、多模态生成&#xff0c;其在搜索问答、内容创作生成、智能办公等众多…

租游戏服务器多少钱1个月?一年价格多少?

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;可以选择轻量应用服务器和云服务器&#xff0c;阿腾云atengyu…

42、WEB攻防——通用漏洞文件包含LFIRFI伪协议编码算法代码审计

文章目录 文件包含文件包含原理攻击思路文件包含分类 sessionPHP伪协议进行文件包含 文件包含 文件包含原理 文件包含其实就是引用&#xff0c;相当于C语言中的include <stdio.h>。文件包含漏洞常出现于php脚本中&#xff0c;当include($file)中的$file变量用户可控&am…

Oracle笔记-为表空间新增磁盘(ORA-01691)

如下报错&#xff1a; 原因是Oracle表空间满了&#xff0c;最好是新增一个存储盘。 #查XXX命名空间目前占用了多大的空间 select FILE_NAME,BYTES/1024/1024 from dba_data_files where tablespace_name XXXX #这里的FILE_NAME能查到DBF的存储位置#将对应的datafile设置为30g…

C++中的析构函数

一、析构函数概念 析构函数不是完成对象的销毁&#xff0c;对象的销毁是由编译器完成的。析构函数完成的是对象中资源的清理工作。通常是对对象中动态开辟的空间进行清理。 二、析构函数特性 1.析构函数的函数名是 ~类名 2.析构函数无参数无返回值 3.一个类中只能有一个析…

如何让 Pages 文字分为两栏或更多栏?

通常一份文件都是由上往下仅有「一栏」而已&#xff0c;但在某些情况的排版&#xff0c;我们需要两栏甚至三栏的设计&#xff0c;在Pages 要如何做到呢&#xff1f;来看看吧。 将 Pages 文件改为双栏式设计 点一下「格式」>「布局」&#xff0c;就可以看到预设的「直栏」数…

很容易感到疲惫,怎么办?

最近&#xff0c;经常听到一些朋友诉苦&#xff0c;说&#xff1a;总觉得每天下来都特别累&#xff0c;也没干什么&#xff0c;就觉得无精打采&#xff0c;没有动力&#xff0c;提不起劲&#xff0c;什么都不想干…… 这种疲惫不是身体层面的&#xff0c;而是精神层面的。身体不…

外汇天眼:外汇天眼:注意,19个外汇平台因诈骗被监管拉黑!

近年来&#xff0c;全球金融市场出现了众多非法投资平台&#xff0c;这些平台利用虚假宣传和高回报承诺欺骗投资者&#xff0c;造成了严重的经济损失。为了保护投资者利益&#xff0c;监管机构也在加大力度打击这些非法平台。就在最近&#xff0c;又有19个外汇交易平台因涉嫌诈…

redis下载与安装教程(centos下)

文章目录 一&#xff0c;redis下载1.1上传到linux服务器上 二&#xff0c;redis安装2.1 安装依赖2.2 解压包2.3 编译并安装2.4 指定配置启动2.5 设置redis开机自启 一&#xff0c;redis下载 官网&#xff1a; https://redis.io1.1上传到linux服务器上 我用filezila上传到/us…

【AWS】step-functions服务编排

文章目录 step-functionsState machine typeStandard workflowsExpress workflows design skillsError handlingsaga Transaction processing控制分布式系统中的并发性 收费 作为AWS Serverless无服务器的一个重要一环 使用step-functions方法将 AWS 服务链接在一起 step-funct…

跟着cherno手搓游戏引擎【22】CameraController

前置&#xff1a; YOTO.h: #pragma once//用于YOTO APP#include "YOTO/Application.h" #include"YOTO/Layer.h" #include "YOTO/Log.h"#include"YOTO/Core/Timestep.h"#include"YOTO/Input.h" #include"YOTO/KeyCod…

基于最新koa的Node.js后端API架构与MVC模式

Koa 是一个由 Express 原班人马打造的现代 Web 框架&#xff0c;用于 Node.js。它旨在提供一个更小、更富有表现力和更强大的基础&#xff0c;用于 Web 应用和 API 开发。Koa 不捆绑任何中间件&#xff0c;它提供了一个优雅的方法以组合不同的中间件来处理请求和响应。 Koa 的核…

Golang与Erlang有什么差异

Golang和Erlang是两种备受关注的编程语言&#xff0c;它们各自具有独特的特点和优势。下面我将简单的探讨一下Golang和Erlang之间的差异&#xff0c;并且分析它们在并发模型、运行环境、函数式编程和领域特性等多个方面的不同之处。 并发模型 Golang使用goroutines和channels…