流量控制的艺术:深入探索分布式限流策略与实践

前言

​ 当资源成为瓶颈时,服务框架需要对消费者做限流,启动流控保护机制。流量控制有多种策略,比较常用的有:针对访问速率的静态流控、针对资源占用的动态流控、针对消费者并发连接数的连接控制和针对并行访问数的并发控制。

常见限流方式
静态流控

​ 主要针对客户端访问速率进行控制,它通常根据服务质量等级协定(SLA)中约定的QPS做全局流量控制,例如订单服务的静态流控阈值为100 QPS,则无论集群有多少个订单服务实例,它们总的处理速率之和不能超过100 QPS。

动态流控

​ 它的最终目标是为了保命,并不是对流量或者访问速度做精确控制。当系统负载压力非常大时,系统进入过负载状态,可能是CPU、内存资源已经过载,也可能是应用进程内部的资源几乎耗尽,如果继续全量处理业务,可能会导致长时间的Full GC、消息严重积压或者应用进程宕机,最终将压力转移到集群其它节点,引起级联故障。触发动态流控的因子是资源,资源又分为系统资源和应用资源两大类,根据不同的资源负载情况,动态流控又分为多个级别,每个级别流控系数都不同,也就是被拒绝掉的消息比例不同。每个级别都有相应的流控阈值,这个阈值通常支持在线动态调整。

并发控制

​ 针对线程的并发执行数进行控制,它的本质是限制对某个服务或者服务的方法过度消费,耗用过多的资源而影响其它服务的正常运行。并发控制有两种形式:针对服务提供者的全局控制和针对服务消费者的局部控制。

连接控制

​ 通常分布式服务框架服务提供者和消费者之间采用长连接私有协议,为了防止因为消费者连接数过多导致服务端负载压力过大,系统需要支持针对连接数进行流控。

分布式限流

​ 以上限流方式只能针对单机进行限流,无法根据实际需要进行流量限制,接下来介绍一下分布式限流方案。

计数服务

在这里插入图片描述

  1. 开发一个技术服务模块
  2. 配置模块进行限流额度配置
  3. 每次请求上报到 redis
  4. 进行请求计数统计
  5. 限流模块进行超额判断

​ 问题:

  1. Redis 单点问题
  2. 每次请求都要上报,多一次缓存的网络请求,对性能有影响
  3. 固定配额,不够灵活
计数服务2.0

​ 图源:极客时间- go 编程训练营

  1. 管理后台配置额度
  2. 服务端分配额度
  3. API网关请求额度
  4. API 网关基于令牌桶算法本地进行限流
  5. 本地进程异步上报令牌,服务端根据管理后台配置和算法重新分配限额
分布式限流

最大最小分配算法

  1. 初始分配默认配额
  2. 一旦有历史窗口的值可以基于历史窗口的值统计进行配额请求
  3. 如上图所示
    1. 假设起初总配额是10
    2. A请求2、B请求2.6、C请求4、D请求5配额
    3. 先进行平均分配,10/4 每人分配 2.5 个配额
    4. A只需要2个,所以分配2,多出0.5进一步分配
    5. 0.5/3 + 2.5, B、C、D 各分配2.666
    6. B 只申请了 2.6 个配额,所以多出 0.06 个配额
    7. 0.06/2 + 2.666 , C、D 分配 2.7 个配额
    8. 分配结束,每个服务都尽量做到了公平的资源最大分配

加权最大最小分配算法

  1. 有四个用户,A、B、C、D 分别申请资源 2、4、4、10
  2. 权重分别为 4、2.5、1、0.5
  3. 资源总量16
  4. 对权重进行标准化分别乘10,再化简,得到:8、5、2、1
  5. A 分得配额8、B 5、C 2、D 1
  6. 由于A 只需要资源2、B只需要资源4,因此A+B多出资源 7
  7. 多出的资源再分配给C、D, C=2+7*(2/3)、D=1+7*(1/3)
  8. 一次C获得的资源为 6.666, D获得的资源为3.333
  9. 将C多出的 6.666-4=2.222 再次分配给D
  10. 所以D获得的资源为 2.222+3.333=5.555
Reference
  1. 微服务治理的技术演进和架构实践
  2. max-min fairness 最大最小公平算法

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

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

相关文章

结构体知识点

目录 1.结构的声明 结构体变量的创建和初始化 typedef 对匿名结构体类型重命名(简化) 举例子代码和分析 2. 结构体内存对⻬ 2.1 对⻬规则 1.结构的声明 struct tag {member-list; }variable-list; 例如描述⼀个学⽣: struct Stu {ch…

FltSendMessage 超时时间相关问题

之前做基于minifilter的windows文件过滤驱动时,会碰到fltsendmessage超时问题,查阅资料后特此记录下 NTSTATUS FLTAPI FltSendMessage([in] PFLT_FILTER Filter,[in] PFLT_PORT *ClientPort,[in] PVOID …

HCIP的学习(22)

BGP优化 [r1-bgp]peer 12.0.0.2 default-route-advertise ---BGP下放缺省路由,无论本地的路由表中是否存在缺省路由,都会向对等体下发一条下一跳为本地的缺省路由,从而减少网络中路由数量,节省对等体的设备资源 BGP协议优先级 缺…

Keras深度学习框架第二十九讲:在自定义训练循环中应用KerasTuner超参数优化

1、简介 在KerasTuner中,HyperModel类提供了一种方便的方式来在可重用对象中定义搜索空间。你可以通过重写HyperModel.build()方法来定义和进行模型的超参数调优。为了对训练过程进行超参数调优(例如,通过选择适当的批处理大小、训练轮数或数…

mysql中连接的原理

大家好。我们在日常开发中经常会遇到多表联查的场景。今天我来为大家讲一下我们在进行多表联查时,表与表之间连接的原理。 为了方便讲解,我们先创建两个表,并填充一些数据。 如图所示,我创建了t1、t2两张表,每张表中…

四大运营商大流量卡测评,手机卡,物联网卡,纯流量卡

买大流量卡,看4个方面 优惠时间。有的只是12个月,24个月有优惠【可以先用一年,然后注销】通用流量。而不是定向流量全国通话分钟数。而不是亲情通话分钟数销户方式。是否支持随时销户,异地销户,线上销户,额…

火箭升空AR虚拟三维仿真演示满足客户的多样化场景需求

在航空工业的协同研发领域,航空AR工业装配系统公司凭借前沿的AR增强现实技术,正引领一场革新。通过将虚拟信息无缝融入实际环境中,我们为工程师、设计师和技术专家提供了前所未有的共享和审查三维模型的能力,极大地提升了研发效率…

stream-基本流

定义 一般流中:都是以Object对象存储的,基本流中是将数据作为基本类型存储的,空间占用率更低,效率更高基本流只有三种:int、long、double基本流也有一些特有的方法 // 基本流 有三种 IntStream LongStream DoubleStrea…

使用Prometheus组件node_exporter采集linux系统的指标数据(包括cpu/内存/磁盘/网络)

一、背景 Linux系统的基本指标包括cpu、内存、磁盘、网络等,其中网络可以细分为带宽进出口流量、连接数和tcp监控等。 本文使用Prometheus组件node_exporter采集,存储在promethues,展示在grafana面板。 二、安装node_exporter 1、下载至本…

【数学建模】碎纸片的拼接复原

2013高教社杯全国大学生数学建模竞赛B题 问题一模型一模型二条件设立思路 问题求解 问题一 已知 d i d_i di​为第 i i i张图片图片的像素矩阵 已知 d i d_i di​都是 n ∗ m n*m n∗m二维矩阵 假设有 N N N张图片 模型一 我们认为对应位置像素匹配为 d i [ j ] [ 1 ] d k…

C++:单例模型、强制类型转换

目录 特殊类的设计不能被拷贝的类实现一个类,只能在堆上实例化的对象实现一个类,只能在栈上实例化的对象不能被继承的类 单例模式饿汉模式懒汉模式饿汉模式与懒汉模式的对比饿汉优缺点懒汉优缺点懒汉模式简化版本(C11) 单例释放问…

索引失效的场景有哪些?

一.概念 索引失效是指在查询时,数据库引擎无法使用索引来加速查询,从而导致查询性能下降。常见的索引失效原因有以下几种: 索引列没有被包含在查询条件中。如果查询条件中没有包含索引列,那么数据库引擎无法使用索引来加速查询。…

机器人--路径--bezier

教学文章 链接1 链接2--逼近拟合 路径 路径由控制点定义,这些控制点将路径描述为一系列链接的线段。 路径控制点 将路径控制点连接起来,就是路径。 Bezier 曲线的初衷就是用尽可能少的数据表示出复杂的图形。 皮埃尔贝塞尔的想法是,在设…

域提权漏洞系列分析-Zerologon漏洞分析

2020年08⽉11⽇,Windows官⽅发布了 NetLogon 特权提升漏洞的⻛险通告,该漏洞编号为CVE-2020-1472,漏 洞等级:严重,漏洞评分:10分,该漏洞也称为“Zerologon”,2020年9⽉11⽇&#xff…

WinRAR技巧:如何让多个文件压缩到更小!?

但我们要压缩多个文件的时候,可能会出现压缩后的体积仍然过大,或者需要将文件再压缩到更小,这种情况下,小编之前建议过大家将文件压缩成7z格式就会更加压缩体积。今天分享另一个技巧,帮助我们将多个文件压缩到更小。 …

Istio ICA考试之路---4-3

Istio ICA考试之路---4-3 1. 题目2. 解题2.1 获取模板2.2 修改yaml 1. 题目 Using Kubernetes context cluster-2 Create an authorization policy named "allow-get" in the namespace policy-3, allowing all GET requests from workloads in the default names…

【网络安全】勒索软件ShrinkLocker使用 windows系统安全工具BitLocker实施攻击

文章目录 威胁无不不在BitLocker 概述如何利用BitLocker进行攻击如何降低影响Win11 24H2 装机默认开启 BitLocker推荐阅读 威胁无不不在 网络攻击的形式不断发展,即便是合法的 Windows 安全功能也会成为黑客的攻击工具。 卡巴斯基实验室专家 发现 使用BitLocker的…

以不变应万变:在复杂世界中保持初心,坚持原则

在这个日新月异、瞬息万变的世界里,人情世故也显得尤为复杂。我们常常会因为忙碌的生活、工作压力以及人际关系的纠葛而感到迷茫和疲惫。在面对这些复杂局面的同时,如何保持内心的平静,坚持自己的原则,并在变幻莫测的环境中持续成…

ClickHouse架构概览 —— Clickhouse 架构篇(一)

文章目录 前言Clickhouse 架构简介Clickhouse 的核心抽象列和字段数据类型块表 Clickhouse 的运作过程数据插入过程数据查询过程数据更新和删除过程 前言 本文介绍了ClickHouse的整体架构,并对ClickHouse中的一些重要的抽象对象进行了分析。然后此基础上&#xff0…

乘风破浪,创维汽车旗舰店落户安徽

2024年5月19日,创维汽车宣城家奇体验中心盛大开业。宣城市委办公室副主任师典雅、市投资促进局副局长金崇学、经开区管委会副主任汤晓峰、宣城市通信局局长梁登峰、创维汽车战区总经理刘俊、创维汽车大区总监王大明等人出席此次开业盛典,共同见证了创维汽…