范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

掌握分布式系统流控的常用解决方案

  场景及问题
  随着云计算的不断快速演进,业务在成本、性能、安全和稳定性高要求下,全栈上云就是个不可逆转的大趋势。对公有云厂商而言,资源超卖是缩减成本的通用方案,那么支持多租户资源共享就是一个关键能力,要保障业务透明而又弹性的资源伸缩是个挑战,这里就有个QoS服务模块做资源管控。实现一个QoS,Quota as a service是解决资源隔离和业务请求文档的一项关键技术,针对不用压力下的业务请求QPS、流量吞吐能自适应的做到弹性限制,总体目标就是在brust请求和流量到来时要保障当前业务的高可用同时还不能影响到其他租户。
  一个通用的高性能分布式架构设计就是基于事件驱动的react线程模型,它负责接受用户的请求并做处理回调。往往这个模块被设计成无状态的、可弹性伸缩的组件,这里就面临几个问题:如何甄别一个业务的多客户端连接(保证单间的FD不被打满)如何管控一个节点的请求量(多客户端多业务的并发访问,保证CPU不被打满)如何管控总的收发流量?(保障带宽不被打满)解决方案
  从上面的三个问题来看,CPU不被打满比较好解决,即在系统启动的时候可以根据机器的资源信息配置合理的并发数就可以控制利用率了。至于请求压力和吞吐就必须要相应的算法保障了。下面就总结下常用的流控算法:
  1. 固定窗口
  原理:在固定时间间隔内维护一个计数器,有请求到来时增加计数器值。当计数器值超过设置的最大值,拒绝请求。
  缺点:瞬时流量可能会很高;在两个窗口临界处,流量有可能达到2n。
  2. 滑动窗口
  原理:为了防止瞬时流量发生,可以把固定窗口划分成多个小窗口,每次向后移动一小格。比如设置一分钟内请求数为100, 划分6个小格, 每个小格维护一个计数器。每次有请求到来时,只要6个小格子中请求总数不超过阈值即可。
  原理:
  类似固定窗口算法,不过记录前一个窗口的请求数。
  比如设置固定窗口为1s,[00:00:00, 00:01:00) 内有9个请求,[00:00:00, 00:02:00) 内有5个请求。 在00:01:15时有一个请求到达, 该请求在当前窗口的 25%处, 当前时间点窗口大小: 9 x (1 - 25%) + 5 = 11.75 > 10, 请求需要拒绝。
  缺点:算法假设前一个时间窗口的请求都是均匀的,如果请求不均匀,会导致算法不准确。
  3. Sliding Window Log
  原理:维护一个按请求时间排序的队列,队列的大小为每个时间窗口内限制的请求数量。当有请求到来时,从队列尾部去掉不在当前时间窗口内的集合,然后计算队列长度,如果长度超过限定值,则拒绝请求,否则接收请求,并将请求加入队列中。
  缺点:需要维护一个队列, 占用内存。
  4. 漏桶算法
  原理:
  类似于漏桶, 漏桶有一定容量,漏桶上方接收水滴,下方以恒定速率流出水滴。当漏桶中的水滴量超过漏桶容量时,水滴就无法再加入漏桶。
  使用漏桶算法做限流: 定义桶的大小 定义水滴流出的速率
  应用: https://github.com/uber-go/ratelimit/ nginx 限流
  漏桶算法存在目的主要是用来平滑突发的流量,提供一种机制来确保网络中的突发流量被整合成平滑稳定的流量。
  不过由于漏桶对流量的控制过于严格,在有些场景下不能充分使用系统资源,因为漏桶的漏出速率是固定的,即使在某一时刻下游能够处理更大的流量,漏桶也不允许突发流量通过。
  5. 令牌桶算法
  令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,等待 A token is added to the bucket every 1/r seconds. The bucket can hold at the most b tokens. If a token arrives when the bucket is full, it is discarded. When a packet (network layer PDU) of n bytes arrives, if at least n tokens are in the bucket, n tokens are removed from the bucket, and the packet is sent to the network.if fewer than n tokens are available, no tokens are removed from the bucket, and the packet is considered to be non-conformant.
  实现方法: 后台线程每隔1/n秒更新bucket中token数量,直至达到 bucket 容量 主线程检查限速时,查看bucket中token数量,如果小于需要的token数量,则当前请求被限制。否则,token数量减去请求的token数量。
  应用: rocksdb rate limiter Guava 中的RateLimiter,RateLimiter 实现原理如下: startTick 记录RateLimiter初始化时的时间戳(单位ns),后续nowMicros (当前时间点)都是取(System.nanoTime()-startTick)/1000; nextFreeTicketMicros 记录下次可获取令牌的开始时间点,在RateLimiter初始化和获取到令牌之后会进行更新; 如果nowMicros大于等于nextFreeTicketMicros,表示可以获取令牌;如果nowMicros大于nextFreeTicketMicros,会计算二者差值并除以放一个令牌的周期,然后赋值给storedPermits 字段(表示当前桶中令牌数,注意不能超过桶容量); 然后storedPermits减去当前需要令牌数,如果此时要获取令牌数大于storedPermits,那么会将nextFreeTicketMicros再往后推进(要获取令牌 - storedPermits) * 放一个令牌的周期  的时间。
  6. 基于Redis限流
  基于Redis做限流操作,使用lua脚本保证命令原子性,比如qps设置为10,如果key不存在,就设置key过期时间1s,value=1;如果value小于10,则自增value;value达到10触发流控。示例lua代码如下:local key = "rate.limit:" .. KEYS[1] local limit = tonumber(ARGV[1]) local expire_time = ARGV[2]  local is_exists = redis.call("EXISTS", key) if is_exists == 1 then    if redis.call("INCR", key) > limit then        return 0    else        return 1    end else    redis.call("SET", key, 1)    redis.call("EXPIRE", key, expire_time)    return 1 end
  参考:https://en.wikipedia.org/wiki/Leaky_bucket https://hechao.li/2018/06/25/Rate-Limiter-Part1/ https://zhuanlan.zhihu.com/p/343754066 https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/

深夜22点!内马尔爆争议猛料,巴萨球迷痛骂高层真是一帮废物北京时间2月21号深夜22点,巴西球星内马尔在接受本国传奇射手罗纳尔多采访时爆出猛料,当初和巴萨之间的转会故事彻底曝光,红蓝军团高层的操作,也引发了很多巴萨球迷的不满。关注欧洲足坛从官宣被求婚,到收千万聘礼,何猷君前女友带4岁儿子高调二婚何猷君前任林慧俐宣布再婚导读何猷君前女友二婚出嫁,价值千万的聘礼摆满房间,深受婆家重视说起何猷君与奚梦瑶的爱情故事,一直是褒贬不一。有人说,奚梦瑶嫁入豪门显卑微,为了生子完全是在拿乡村爱情16开机,终于迎来过年戏,冬天戏份也将增多目前,乡村爱情14还在热播中,而乡村爱情16已经正式开机了,部分拍摄花絮也已经被曝光,通过曝光的照片可以很明显地看出,这一部的故事将更加精彩。如果你是乡村爱情的忠实粉丝,你应该会发苗苗如愿怀上二胎?跟老公女儿度假归来,穿宽松卫衣小腹微凸2月21号,郑恺苗苗一家三口现身上海机场,郑恺跟苗苗戴着情侣款棒球帽超恩爱,两人都是一袭休闲装扮,看起来舒适又自在,女儿小酸奶则是一身粉色套装,想来这是苗苗给女儿搭配的衣服,完美体看到阿里的退货新规,商家笑了近日,淘宝天猫悄悄出台了新的规定,并已经于2月15日开始逐步灰度测试,实施之后,将影响千万商家和消费者。01hr未发货秒退货升级,商家们注意阿里出台的新规定有两条,一条是天猫淘宝支正式确认,美不愿看的芯片结果出现了华为在5G芯片等技术方面领先后,美就开始修改规则,不仅禁止高通谷歌等企业自由出货,还禁止ASML台积电等半导体芯片企业自由出货。最主要的是,美还在不断的修改规则,约束ASML向外企虎父无犬子,身家1080亿,世茂少帅许世坛扛得住60亿信托债重压?万科郁亮称,房地产进入黑铁时代,背水一战,要么死,要么活,没有中间状态。万科是国内房地产行业龙头,连董事长郁亮都不敢坐头等舱,哪个航班便宜买哪班,可见房企眼下有多难,遑论虎年虎虎生假如人死了,但银行卡里有存款没有人知道,银行会通知家属吗?银行在人们心中的地位还是很高的,很多人都觉得,银行才是最靠谱的存钱机构。确实,银行大多数都是国有的,背后有国家撑腰,不容易倒闭,因此,愿意在银行存钱的人是非常多的。央行公布的数据显套牢千万基民后,中欧基金医药女神拿着上亿元奖金去生孩子了中欧基金医药女神葛兰又火了!春节后的第一周,伴随着宁德时代为代表的新能源股票的连续大跌,市场有传言称中欧基金旗下明星基金经理葛兰管理的基本被大型险资理财子公司FOF专户赎回400亿美债大限将至?美元加息在即,要薅的羊毛还在远方无债一身轻,这应该是常识吧。身上如果背了债,总是一件夜不能寐的事情。据统计,全国见诸媒体的老赖大概有1000多万,平均100个人里面1个。从几千几万几十万到几百万各有一段里程。万里2022年,60岁老人一次性补缴4。8万,养老金至少能拿438元,别错过前言当然若想依靠养老金来满足自己比较奢侈的生活存在很大的难度,但是这一份收入却可以令我们满足比较基本的生活需求,而且它发挥的作用同样是非常强大的。但是若想领取养老金也是有一定前提条
又输,惨败21分!0胜4负,湖人遭快船横扫,詹姆斯拼尽全力2684北京时间3月4日,NBA常规赛继续进行,湖人在客场以111132惨败快船队,遭遇到了4连败,本赛季湖人队4次面对快船队,球队战绩0胜4负,惨遭同城对手横扫,表现欠佳。这场比赛詹姆斯留洋凯尔特人失败案例,追求自我却陷入深渊,水野晃树的遗憾生涯凯尔特人作为苏格兰联赛豪门,经常性的会挖掘亚洲球员,其中日本球员是凯尔特人十分钟爱的目标,虽然有很多球员通过凯尔特人走向世界,但是在卡尔特人中也有一些失败案例。在过去的几年间,凯尔2连败成却成最大赢家!感谢李春江!杨鸣不会下课CBA第三阶段的比赛已经在火热进行中,原本排名第一的辽宁队在第二阶段一路披荆斩棘,到了第三阶段却吃了闭门羹。首场比赛对战青岛队就以23分大比分输掉比赛,接下来更是给辽宁队雪上加霜,A股氢能源中的茅台,被严重低估的氢能源股大洋电机氢能源龙头股。2021年第三季度,大洋电机毛利润为5。008亿,毛利率19。13。在近7个交易日中,大洋电机有3天上涨,期间整体上涨1。84,最高价为7。22元,最低价为6中国真的正建造人造太阳吗?连创3个纪录,成为世界第一你敢相信吗?据说中国正在建造人造太阳!恒星是整个宇宙中最大的能量发生器之一。从持续燃烧数十亿年的不起眼的红矮星,到体积最大密度最大温度最高的中子星,它们都是难以想象的巨大能量源。如斯坦福大学女足队长,自杀身亡斯坦福大学女子足球队队长梅耶(KatieMeyer)1日被发现陈尸在宿舍房间内,圣他克拉拉县法医办公室4日晚上证实,梅耶死于自杀。22岁的梅耶是斯坦福大学女子足球队队长兼守门员,曾中国物流真正的龙头6大物流企业,物流时代已开启物流链路的底层重构涉及人货车场路,每一个环节都有机会创造新的价值和潜在的商业机会。乘时代之风,迎格局之变,在国家双碳战略下,以及国际局势等不确定性因素持续影响下,物流科技领域将会呈从中国精神到全民参与中国残疾人体育的时代进阶来源中国青年报3月4日,北京冬残奥开幕式,中国队入场时,全场观众起立欢呼。中青报中青网记者李隽辉摄3月4日晚,奥运之火又一次在国家体育场鸟巢点燃,在北京2022年冬奥会顺利举办之后下周关注丨CPI等数据将公布,这些投资机会最靠谱重磅新闻下周,首条以降低碳排放强度为目标的指数沪深300碳中和指数将发布。2月CPIPPI新增信贷新增社融M2等数据将公布。13只新股将集中发行,有2只新股首发上市。沪深300碳中王哲林沉默24小时,郭艾伦检查报告曝光,辽篮核心击碎谎言北京时间3月5日,CBA常规赛第三阶段的比赛正在如火如荼的进行之中,大家高度关注的近期王哲林赛后更衣室事件也是不断在升级,王哲林在率领上海男篮击败了辽宁男篮之后,赛后更衣室多次言论联合公安严查,总局出组合拳,允许城市联赛冠名,球员可入选男足动真格了,在输给越南男足又被爆出男足球员有人出工不出力,足协的调查组调查了一圈并没有任何成果的时候,总局出手了,而且这一次总局还是联合了球迷们一直期待的司法部门。3月2日,总局宣布