首页 > 编程语言 >Sentinel限流算法总结

Sentinel限流算法总结

时间:2024-07-05 13:58:55浏览次数:18  
标签:令牌 请求 算法 限流 线程 Sentinel 漏桶 隔离

文章目录

一、线程隔离

线程隔离有两种方式实现:

  • 线程池隔离:给每个服务调用业务分配一个线程池,利用线程池本身实现隔离效果
  • 信号量隔离:不创建线程池,而是计数器模式,记录业务使用的线程数量,达到信号量上限时,禁止新的请求。

Sentinel的线程隔离就是基于信号量隔离实现的。

二、滑动窗口算法

在熔断功能中,需要统计异常请求或慢请求比例,也就是计数。在限流的时候,要统计每秒钟的QPS,同样是计数。

在这里插入图片描述
设置一个窗口的大小,然后窗口是匀速往前滑动的,在一段时间范围内,请求落在同一个窗口的数量大于窗口阈值,就拒绝该请求。

sentinel中采用的计数器算法就是滑动窗口计数算法。

三、令牌桶算法

如图:
在这里插入图片描述
说明:

  • 以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃。
  • 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理。
  • 如果令牌桶中没有令牌,则请求等待或丢弃。

基于令牌桶算法,每秒产生的令牌数量基本就是QPS上限。

当然也有例外情况,例如:

  • 某一秒令牌桶中产生了很多令牌,达到令牌桶上限N,缓存在令牌桶中,但是这一秒没有请求进入。
  • 下一秒的前半秒涌入了超过2N个请求,之前缓存的令牌桶的令牌耗尽,同时这一秒又生成了N个令牌,于是总共放行了2N个请求。超出了我们设定的QPS阈值。

因此,在使用令牌桶算法时,尽量不要将令牌上限设定到服务能承受的QPS上限。而是预留一定的波动空间,这样我们才能应对突发流量。

Sentinel中的热点参数限流正是基于令牌桶算法实现的。

四、漏桶算法

漏桶算法与令牌桶相似,但在设计上更适合应对并发波动较大的场景。

简单来说就是请求到达后不是直接处理,而是先放入一个队列。而后以固定的速率从队列中取出并处理请求。之所以叫漏桶算法,就是把请求看做水,队列看做是一个漏了的桶。
如图:
在这里插入图片描述
说明:

  • 将每个请求视作"水滴"放入"漏桶"进行存储;
  • "漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;
  • 如果"漏桶"满了则多余的"水滴"会被直接丢弃。

漏桶的优势就是流量整型,不管并发量如何波动,经过漏桶处理后的请求一定是相对平滑的曲线。

sentinel限流中的排队等待功能正是基于漏桶算法实现的。

标签:令牌,请求,算法,限流,线程,Sentinel,漏桶,隔离
From: https://blog.csdn.net/weixin_45404884/article/details/140124905

相关文章

  • 限流算法
    限流的手段通常有计数器、漏桶、令牌桶。注意限流和限速(所有请求都会处理)的差别,视业务场景而定。(1)计数器:在一段时间间隔内(时间窗/时间区间),处理请求的最大数量固定,超过部分不做处理。(2)漏桶:漏桶大小固定,处理速度固定,但请求进入速度不固定(在突发情况请求过多时,会丢弃过多的请求)。(3)令......
  • 代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大
    二叉树学习2226题翻转二叉树,改一下前序递归遍历,每次遍历的时候都调换一下左右结点即可。classSolution{public:voidpreorder(TreeNode*root){if(root==nullptr){return;}TreeNode*tmp;tmp=root->left;......
  • 算法:递归数组求和
    递归数组求和给定一个数组,求所有元素的和算法思想:传入数组和下标,如果下标越界就返回0,否则返回当前值和下一个值的和,递归操作。Java实现:publicclassMain{ publicstaticintfunc(int[]array,intindex){ if(index>array.length-1){ return0; }el......
  • 代码随想录算法训练营第十三天|今天量大管饱144、145、94、102、107、199、637、429、
    今天来处理二叉树part1、2、3,顶级享受,一次到位。完全二叉树和满二叉树概念没问题。二叉搜索树,左子树所有结点的值小于它的根结点的值,右子树上所有结点的值大于它的根结点的值平衡二叉搜索树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1。二叉树的存储方式:链式存储......
  • 「代码随想录算法训练营」第三天 | 链表 part1
    203.移除链表元素题目链接:https://leetcode.cn/problems/remove-linked-list-elements/题目难度:简单文章讲解:https://programmercarl.com/0203.移除链表元素.html视频讲解:https://www.bilibili.com/video/BV18B4y1s7R9题目状态:通过个人思路:从链表头部开始依次往下遍历,当......
  • 算法学习笔记(24):卡常小技巧
    卡常学习来源->https://platelet.top/hpc/oldst表访问连续性就不说了,考虑计算log2。预处理比31^builtin__clz(x)慢,而且慢很多。setinsert(pos,x)如果\(pos\)是\(x\)在set中正确的位置,那么insert是\(O(1)\)的。erase(it)是\(O(1)\)的。prev(it)......
  • 智能分析网关V4人员区域徘徊AI检测:算法原理介绍及技术应用场景
    一、引言在现代社会,随着科技的不断发展,视频监控系统已广泛应用于各个领域,如公共安全、商业管理、交通监控等。其中,区域徘徊检测算法作为一种重要的视频分析技术,能够有效地识别出特定区域内人员的徘徊行为,为安全管理和事件预防提供了有力支持。本文将以TSINGSEE青犀AI智能分析网关......
  • 人员跌倒识别检测算法
    人员跌倒识别检测算法是基于视频的检测方法,通过对目标人体监测,当目标人体出现突然倒地行为时,自动监测并触发报警。人员跌倒识别检测算法基于计算机识别技术,配合现场摄像头,自动识别如地铁手扶梯/楼梯、老幼活动区等公共场所人员摔倒行为,准确率高于90%,及时救援,提高人工监管效果,保障......
  • 安全帽佩戴检测算法
    安全帽佩戴检测算法是铁路工程施工人员安全管理中的重点和难点,它对检测算法的准确率与检测速度都有较高的要求。本文提出一种基于神经网络架构搜索的安全帽佩戴检测算法NAS-YOLO。该神经网络架构由上、下行操作单元组成,采用二进制门策略对网络架构进行更新,通过数据驱动的方式自......
  • 雪花算法
    雪花算法1.1概述雪花算法是twitter开源的一个分布式id的生成算法。雪花id,是分布式计算中使用的唯一标识符的一种形式。该格式由twitter创建。人们普遍认为,每片雪花都有唯一的结构,因此他们取了“雪花ID”这个名字。1.2什么是雪花id雪花id是有一种分布式id算法生成的,他的设计......