引言

本篇内容根据《spring cloud alibaba 微服务原理与实战》中内容摘取,希望和大家分享限流的思想,本篇不涉及代码层面的实现。

限流的目的

目的:通过限制并发访问数或者限制一个时间窗口内允许处理的请求数量来保护系统
作用:损失一部分用户的可用性,为大部分用户提供未定可靠的服务

一旦达到限制数量则对当前请求处理采取对应的拒绝策略(这里其实和Java中的executor线程池原理是一样的),比如跳转到错误页面、拒接请求、进入排队系统、降级等。

限流的四种算法

1、计数器算法

计数器算法是一种比较简单的限流实现算法,在指定周期内累加访问次数,当访问次数达到设定的阙值时,触发限流策略,当进入下一个时间周期时进行访问次数的清零

流程图如下:

这是正常的情况下,根据计数器算法,进行整个流程的控制

临界问题:

2、滑动窗口算法(sentinel使用)

为了解决计数器算法带来的临界问题,所以引入额滑动窗口算法
TCP网络通信协议中,就采用了滑动窗口算法来解决网络拥塞的情况

原理:在固定窗口中分割出来多个小时间窗口,分别在每个小时间窗口中记录访问次数,然后根据时间将窗口往前滑动并删除过期的小时间窗口。最终只需要统计滑动窗口范围内的所有小时间窗口总的技术即可

文章推荐:

关于算法的应用(推荐文章):https://blog.csdn.net/lm278858445/article/details/88189212

关于sentinel中滑动窗口:https://zhuanlan.zhihu.com/p/71597873

流程图如下:

3、令牌桶限流算法

令牌桶:是网络流量整形(traffic shaping)和速率限制(Rate Limiting)中最常用的一种算法。对于每个请求,都需要从令牌桶中获得一个令牌,如果没有获得令牌,则需要触发限流策略。

流程图如下:

系统会以一个恒定速度(r tokens/sec)往固定容量的令牌桶中放入令牌,如果此时有客户端请求过来,需要先从令牌桶中拿到令牌以获得访问资格。

令牌桶算法机制:

假设令牌生成速度是每秒10个,也就等同于QPS=10,此时在请求获取令牌的时候,会存在三种情况:

  • 请求速度 > 令牌生成速度:那么令牌会很快被取完,后续再进来的请求会被限流
  • 请求速度 = 令牌生成速度:此时流量处于平稳状态
  • 请求速度 < 令牌生成速度:说明此时系统的并发数并不高,请求能被正常处理

由于令牌桶有固定大小,当请求速度小于令牌生成速度时,令牌桶会被填满
所以令牌桶能够处理突发流量,也就是在短时间内新增的流量系统能够正常处理

4、漏桶限流算法

漏桶限流算法:主要作用是控制数据注入网络的速度,平滑网络上的突发流量

流程图如下:

漏桶限流算法机制:
  • 请求速度 > 漏桶流出水滴的速度:也就是请求数超出当前服务所能处理的极限,将会触发限流策略
  • 请求速度 <= 漏桶谁出水滴的速度:也就是服务端处理能力正好满足客户端的请求量,将正常执行

漏桶限流算法和令牌桶限流算法的实现原理相差不大
唯一区别:漏桶无法处理短时间内的突发流量,漏桶限流算法是一种恒定速度的限流算法

微服务限流及熔断一:四种限流算法(计数器算法、滑动窗口算法、令牌限流算法、漏桶限流算法)相关推荐

  1. 微服务之RPC(远程过程调用)的四种方式

    微服务思想 微服务思想-注册中心zookeeper 微服务: 架构设计采用分布式思想,当服务器发生故障时,可以实现自动化的故障迁移.无需人为干预. 注册中心实现原理: ZK工作原理说明 Zookeep ...

  2. 「微服务系列 13」熔断限流隔离降级

    我们知道微服务分布式依赖关系错综复杂,比方说前端的请求转化为后端调用的服务请求,一个前端请求会转为成很多个后端调用的服务请求,那么这个时候后台的服务出现不稳定或者延迟,如果没有好的限流熔断措施,可能会 ...

  3. 微服务架构下的熔断框架:hystrix-go

    伴随着微服务架构被宣传得如火如茶,一些概念也被推到了我们的面前.一提到微服务,就离不开这几个字:高内聚低耦合:微服务的架构设计最终目的也就是实现这几个字.在微服务架构中,微服务就是完成一个单一的业务功 ...

  4. 微服务之Hystrix降级熔断

    前言 分布式系统面临的问题-----服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的"扇出".如果扇出的链 ...

  5. 聊聊微服务的隔离和熔断

    今天来聊一聊微服务的隔离和熔断是怎么做的, 如果你的项目没有用微服务,不要走开,可以看看对一个问题的解决思路. 假设Tomcat线程池有100个线程, 每次有新的用户请求过来,Tomcat就会从中找出 ...

  6. 什么是限流?为什么会限流呢?常见的限流算法【固定窗口限流、滑动窗口限流、漏桶限流、令牌桶限流】是什么呢?

    什么是限流?为什么会限流呢?常见的限流算法[固定窗口限流.滑动窗口限流.漏桶限流.令牌桶限流]是什么呢? 什么是限流? 为什么会限流? 1. 固定窗口限流算法 1.1 什么是固定窗口限流算法 1.2 ...

  7. c3p0 服务启动获取连接超时_微服务架构中的熔断、降级

    微服务架构中熔断和降级是保证服务高可用的一项重要功能点,微服务区别于一体化项目的最大区别也再于熔断和降级,很多微服务项目的开发人员对熔断的理解就是当服务不可用的时候,为了让整体服务可以正常运行,需要让 ...

  8. 使用 KubeSphere 轻松实现微服务灰度发布与熔断

    KubeSphere®️ 是在目前主流容器调度平台 Kubernetes 之上构建的企业级分布式多租户容器管理平台,提供简单易用的操作界面以及向导式操作方式,在降低用户使用容器调度平台学习成本的同时, ...

  9. hystrix熔断和降级的区别_Ribbon+Hystrix断路器实现微服务的降级和熔断

    微服务宕机时,Ribbon无法实现转发请求,因此引入Hystrix. Hystrix短路器的核心功能: 降级: 当后台微服务不可用或访问超时时,则转向执行降级代码,或返回错误信息,或返回缓存数据; 熔 ...

最新文章

  1. Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值
  2. ValueError: max() arg is an empty sequence
  3. MQTT Qos类型解释
  4. ios 折线图_《解神者》ios和安卓互通吗 ios和安卓互通分析
  5. 高压模块性相关的几个问题测量
  6. Facebook又开两处AI实验室,在西雅图和匹兹堡招兵买马
  7. oracle数据库问答汇总
  8. bzoj千题计划254:bzoj2286: [Sdoi2011]消耗战
  9. 模糊数学 计算机智能,吴国平:如果“模糊数学”没有出现,人工智能或许就无从谈起...
  10. 2018第九届蓝桥杯JavaB组省赛真题详解
  11. 学前儿童健康教育 复习资料 渝粤题库整理
  12. python 求向量间内积 和外积
  13. matlab神经网络 股票预测模型,如何用MATLAB的BP神经网络做股票预测
  14. Unity Obi插件修改到支持URP
  15. 【LinuxCNC开发序列教程二】Ethercat主站终端调试
  16. 《操作系统第四版》(刘振鹏 王煜)(一)引论
  17. 关于STM32单片机IAP升级中if(((*(__IO uint32_t*)ulAddr_App) 0x2FFE0000) == 0x20000000)语句的理解
  18. Matlab与单片机的串行通信及数据处理
  19. 诺曼底登陆后,联想手机如何反攻?
  20. 我们在设计类时应该注意的问题

热门文章

  1. mysql mvcc_MySQL MVCC介绍
  2. 社交向左,AI当立;岁在戊戌,腾讯大急!
  3. C语言——杨辉三角的实现并输出(递归)
  4. YBTOJ:喂养宠物
  5. Pytorch:model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别
  6. Mac使用之 数码测色计
  7. [BUUCTF misc]神秘龙卷风
  8. libvirt/qemu外置快照命令
  9. 微信小程序如何清除图片缓存?
  10. 普林斯顿研究者:当大公司控制了CS顶会的资金,坏处在哪?