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

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

  场景及问题
  随着云计算的不断快速演进,业务在成本、性能、安全和稳定性高要求下,全栈上云就是个不可逆转的大趋势。对公有云厂商而言,资源超卖是缩减成本的通用方案,那么支持多租户资源共享就是一个关键能力,要保障业务透明而又弹性的资源伸缩是个挑战,这里就有个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/

万物互联时代,车企和手机厂开始互卷图片来源视觉中国钛媒体注本文来源于微信公众号亿欧汽车(IDEOAUTO),作者刘慧莹,编辑张宇喆,钛媒体经授权发布。核心观点大屏电动时代,汽车已经成为新的流量入口,人们日常出行对于羊了个羊被质疑数据造假,官方发声不是我干的常言道,树大招风又说,人怕出名猪怕壮。如今,火爆全网的羊了个羊休闲小游戏你还在熬夜通关吗?最近一段时间,一款名为羊了个羊的休闲类微信小游戏在不知不觉中成为了全网最亮的仔。无论是线上明天女篮世界杯中美女篮对决,可能是我们小组赛最轻松的一场比赛明天中国女篮小组赛对战本届世界杯最大夺冠热门美国队,估计双方真刀真枪顶多能打半场,剩下时时间都会战略性放弃,毕竟小组前四名出线,中国和美国已经两连胜,理论上都已经小组出线,剩下是就见过这么壕的官方吗?刚发完1000万现金,逆水寒手游又放出300万现如今,为了吸引玩家下载游戏,肯拿出福利来送出去的游戏厂商不少见,但要说游戏还没开测,就抢着给玩家送钱的公司却还真不多。而就在最近,网易开放世界武侠逆水寒手游就貌似相当这个冤大头。小组第一!中国女篮大胜47分,李梦17分无人能挡,两点需引起警惕小组第一!中国女篮大胜47分,李梦17分无人能挡,两点需引起警惕北京时间9月23日,女篮世界杯进入到第二比赛日的争夺。中国女篮迎来小组赛第二个对手波黑。在昨天的比赛中,中国队轻松击01!足坛超级大冷!德国队主场崩盘输大黑马,提前一轮无缘出线今天凌晨,欧国联A级别C组的一场比赛结束,德国队主场01输给匈牙利队,爆出了超级大冷门。本场比赛,客队绍洛伊打进了一粒精彩的蝎子摆尾破门,德国队整体状态不佳,几次机会也没把握住,最今日资讯疯!全球多国大幅加息人民币贬值欧元区逆差大涨等美联储加息连锁反应!全球多国央行大幅加息22日,英国央行宣布加息50个基点,将利率升至2。25,试图遏制通胀。这是英国央行今年第七次宣布加息。是英国央行自1995年以来的最大加息幅上汽人的奋斗故事新能源汽车产业已进入快速发展阶段。目前,我国新能源汽车保有量已突破1000万辆,在乘用车市场的渗透率已接近14。因此,如何打开更多高端新能源汽车市场成为上海汇众必须要攻克的一道难题郭艾伦续约后,辽宁再签一人!阵容武装到牙齿,有望建立王朝球队北京时间9月23日,根据篮球记者宋翔的报道,辽宁男篮已经与贾卡尔桑普森达成了签约协议,正在为他办理相关手续。虽然说没有明确曝出归队时间,但从阵容搭建的层面,辽宁男篮把500万工资帽三消息!赵睿谈球队困难,辽篮管理层有新变动,中国女篮将战美国第一,赵睿谈球队困难日前,来自广东男篮的后卫赵睿接受记者采访中表示,新赛季球队将会面临很多困难,全队上下都需要站出来承担自己的责任。确实如赵睿而言,新赛季的广东队大概率会经历一段磨凯尔特人正式宣布!主帅被禁赛一年!与女员工发生不正当关系北京时间9月23日上午,凯尔特人官方宣布主教练乌度卡被禁赛一年,无缘整个202223赛季!另据Shams报道,乌度卡与一名女性工作人员发生了不正当的亲密关系。绿军助教乔马祖拉担任临
趁还没火,快来军山新城打卡这个公园盛夏高温对武汉人的封印,被秋风温柔化解。伴着出游计划陆续重启,万众期待的武汉鲁迅书店(美术馆)也终于向公众开放。全国唯二的鲁迅书店,一家在寸土寸金的首都二环外,闹中取静。而另一家,广州又有一个免费景点走红,虽然就在闹市区,以前却鲜有游客外地游客对广州的印象主要停留在珠江新城广州塔,最多加上长隆白云山或越秀公园,即便在广州生活了很多年的新广,很多对身边的景点也非常陌生,比较有代表性的是药洲旧址十香园和番禺学宫。第一中原第一灵水福地南召山河南南阳市南召县,是中原人类的发祥地。南召五垛山占地126平方公里。它是中原地区的一座历史名山。景区的五个主峰位于南北线内三公里内,形成五极,因此得名。宋代画家郭仪曾盛赞五朵山为东脑机接口新进展,中科院提出新型脑信号解码方法!马斯克下月发布脑机接口进度(附股)数据是个宝数据宝炒股少烦恼中科院新型脑信号解码方法有效降低脑机接口执行命令延迟,对推进脑机接口在瘫痪病人运动康复上的实际应用具有重要意义。据中科院网站,中科院沈阳自动化研究所针对头普京称将快速结束战争,如果成真,会提振A股,迎来牛市吗?普京决定在乌克兰东部开展军事行动聚焦俄罗斯乌克兰局势A股超4000只股下跌就在几个小时前,俄罗斯总统普京在在会见印度总理莫迪时表示,俄罗斯将尽一切努力尽快结束在乌克兰的冲突。在面对给你们带娃可以,但我有3个条件婆婆的做法,被赞高端玩家大家好,我是家庭教育指导师果妈你们家老人给你们带孩子,有没有提过条件?在生活中,似乎老人帮助带孩子,就是一件天经地义的事情。年轻人们最多给点生活费,甚至生活费都不给,还要老人倒贴。发现11岁女儿偷看成人片,应该怎么处理?(漫画)导语随着时间的推移,人的思维方式也发生了巨大的改变,特别是小孩子,他们的年纪越大,进入青春期,就越叛逆,越固执。在父母看来,孩子的叛逆是很正常的事情,尤其是到了青春期,一些孩子会对315母婴用品黑名单6件鸡肋品不能忘,骗钱又坑娃,家里有的警惕现在的我们比起老一代,我们的生活更加便利了,同时也拥有了更多的所谓的育儿神器,各种哄娃神器应运而生。但,事实真的如此吗?在我看来,很多母婴产品都披上了可以帮助你更高效带娃的虚假的外指日可待?普通人或将亲自上九天揽月近日,长征十一号火箭首任总指挥杨毅强在接受环球时报媒体采访时表示,太空旅行目前可分三种。第一种是进入空间站,这对游客的身体心理素质等有严格要求第二种是以维珍银河的白色骑士为代表的通旅发大会点亮娄底照亮世界(图为开幕式现场)9月14日晚,2022年娄底市旅游发展大会开幕式在新化县举行。开幕式上,裸眼3D时空凝结数字灯光技术无人机矩阵激光焰火等沉浸式多媒体声光秀以新奇特的方式,深度融入北海旅游攻略北边的海让人春意盎然故事的开头曾以为30岁很遥远,却发现18岁已是很久以前的事了。表示还未习惯大人这个角色,却已在不知不觉中背负了一身的责任。天天喊着我还是个宝宝,却在一天天的工作中装成历经世事的老手