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

面试官限流算法有哪些?

  限流的实现算法有很多,但常见的限流算法有三种:计数器算法、漏桶算法和令牌桶算法。1.计数器算法
  计数器算法是在一定的时间间隔里,记录请求次数,当请求次数超过该时间限制时,就把计数器清零,然后重新计算。当请求次数超过间隔内的最大次数时,拒绝访问。
  计数器算法的实现比较简单,但存在"突刺现象"。
  突刺现象是指,比如限流 QPS(每秒查询率)为 100,算法的实现思路就是从第一个请求进来开始计时,在接下来的 1 秒内,每来一个请求,就把计数加 1,如果累加的数字达到了 100,后续的请求就会被全部拒绝。等到 1 秒结束后,把计数恢复成 0,重新开始计数。如果在单位时间 1 秒内的前 10 毫秒处理了 100 个请求,那么后面的 990 毫秒会请求拒绝所有的请求,我们把这种现象称为"突刺现象"。
  计数器算法的简单实现代码如下:import java.util.Calendar; import java.util.Date; import java.util.Random;  public class CounterLimit {     // 记录上次统计时间     static Date lastDate = new Date();     // 初始化值     static int counter = 0;     // 限流方法     static boolean countLimit() {         // 获取当前时间         Date now = new Date();         Calendar calendar = Calendar.getInstance();         calendar.setTime(now);         // 当前分         int minute = calendar.get(Calendar.MINUTE);         calendar.setTime(lastDate);         int lastMinute = calendar.get(Calendar.MINUTE);         if (minute != lastMinute) {             lastDate = now;             counter = 0;         }         ++counter;         return counter >= 100; // 判断计数器是否大于每分钟限定的值。     }      // 测试方法     public static void main(String[] args) {         for (; ; ) {             // 模拟一秒             try {                 Thread.sleep(1000);             } catch (InterruptedException e) {                 e.printStackTrace();             }             Random random = new Random();             int i = random.nextInt(3);             // 模拟1秒内请求1次             if (i == 1) {                 if (countLimit()) {                     System.out.println("限流了" + counter);                  } else {                     System.out.println("没限流" + counter);                 }             } else if (i == 2) { // 模拟1秒内请求2次                 for (int j = 0; j < 2; j++) {                     if (countLimit()) {                         System.out.println("限流了" + counter);                     } else {                         System.out.println("没限流" + counter);                     }                 }             } else { // 模拟1秒内请求10次                 for (int j = 0; j < 10; j++) {                     if (countLimit()) {                         System.out.println("限流了" + counter);                     } else {                         System.out.println("没限流" + counter);                     }                 }             }         }     } } 复制代码2.漏桶算法
  漏桶算法的实现思路是,有一个固定容量的漏桶,水流(请求)可以按照任意速率先进入到漏桶里,但漏桶总是以固定的速率匀速流出,当流入量过大的时候(超过桶的容量),则多余水流(请求)直接溢出。如下图所示:
  漏桶算法提供了一种机制,通过它可以让突发流量被整形,以便为系统提供稳定的请求,比如 Sentinel 中流量整形(匀速排队功能)就是此算法实现的,如下图所示:
  3.令牌桶算法
  令牌按固定的速率被放入令牌桶中,桶中最多存放 N 个令牌(Token),当桶装满时,新添加的令牌被丢弃或拒绝。当请求到达时,将从桶中删除 1 个令牌。令牌桶中的令牌不仅可以被移除,还可以往里添加,所以为了保证接口随时有数据通过,必须不停地往桶里加令牌。由此可见,往桶里加令牌的速度就决定了数据通过接口的速度。我们通过控制往令牌桶里加令牌的速度从而控制接口的流量。 令牌桶的实现原理如下图所示:
  4.漏桶算法 VS 令牌桶算法
  漏桶算法是按照常量固定速率流出请求的,流入请求速率任意,当流入的请求数累积到漏桶容量时,新流入的请求被拒绝。令牌桶算法是按照固定速率往桶中添加令牌的,请求是否被处理需要看桶中的令牌是否足够,当令牌数减为零时,拒绝新的请求。令牌桶算法允许突发请求,只要有令牌就可以处理,允许一定程度的突发流量。漏桶算法限制的是常量流出速率,从而使突发流入速率平滑。
  比如服务器空闲时,理论上使用漏桶算法服务器可以直接处理一次洪峰(一次洪水过程的最大流量),但是漏桶算法处理请求的速率是恒定的,因此,前期服务器资源只能根据恒定的漏水速度逐步处理请求,无法直接处理这次洪峰。而使用令牌桶算法就不存在这个问题,因为它可以先把令牌桶一次性装满,处理一次洪峰之后再走限流。总结
  限流的常见算法有以下 3 种:计数器算法:实现简单,但有突刺现象;漏桶算法:固定速率处理请求,处理任意流量更加平滑,可以实现流量整形;令牌桶算法:通过控制桶中的令牌实现限流,可以处理一定的突发流量,比如处理一次洪峰。

张文宏病毒变异趋向稳定产生传播力更强的病毒将更难包括春运以后或各种社交活动广泛开展以后,可能还有一轮新的疫情。国务院联防联控机制12月20日召开新闻发布会,就未来疫情发展趋势二次感染等网友关注的问题进行了解答。早阳早好?不存在的什么样的空气净化器才能去除固态污染物细菌和病毒等?头条创作挑战赛最近大家最关心的是还谁没有阳。新冠疫情放开以后身边的小伙伴很多都阳了,那些没阳还要照顾患者,又要做好自己防护的小伙伴着实忙坏了。新冠肺炎属于病毒感染,传染能力很强,那一年又到冬至,回顾从吃泡面到假装不在吃泡面的这一年转眼又到冬至。传统说冬大过年,象征着一年快要过去了。想起这一年的点点滴滴可真是梦幻又心酸。从一无所有,到苟活着的今天,生活总没有那么多如意的事,正如也不会有满满糟糕的事。我们总在得今日冬至!一庭飞雪影翩翻,静听风檐冻雀喧。(清)张问陶雪冬至慢慢的,悠悠的,悄悄的枯叶被风卷起去往很远的地方太阳打了个盹又看见墙上的树枝影子走了几个来回当雪造访人间的时候无边绒花从天际洒下静冬至向阳而生,否极泰来冬至,带着冰冷的气息,在恍然若梦的人生路口,在江水料峭冷冽的气流中,向我们缓缓走来。冬至,又像一位饱经岁月沧桑的时光老人,从古老淡烟流水的巷口,把冰雪严寒的冷峻,幻化成一道白色的苍冬至漫谈冬至,不说吃饺子的事,今天在股市里吃面的人比较多,再咥一盘饺子肯定胃不舒服,心里更不舒服,我不给大家添堵了。不写股票分析有段日子了,不写有两个原因,其一是自己的能力不够,说不准乱人今日冬至冬至包饺子冬至宋王安石都城开博路,佳节一阳生。喜见儿童色,欢传市井声。幽闲亦聚集,珍丽各携擎。却忆他年事,关商闭不行。古代文人王安石对冬至的描述,适逢冬节,在大都城开封,市民儿童妇湖南省162位重症及呼吸等专业医护人员今日驰援北京(2022年12月16日,北京某著名医院的急诊室现场李微敖摄)经济观察网记者李微敖种昂来自湖南省的162位重症及呼吸等专业医护工作者,今日(2022年12月22日)下午从长沙飞抵北黄帝内经之上古天真论养身总纲黄帝内经原文上古之人,其知道者,法于阴阳,和于术数,食饮有节,起居有常,不妄作劳,故能形与神俱,而尽终其天年,度百岁乃去。今时之人不然也,以酒为浆,以妄为常,醉以入房,以欲竭其精,双语阅读WhoIsCristianoRonaldo?(谁是C罗?)大家好,我是王元存,用零碎的时间陪大家一起读书,一起提升认知!CristianoRonaldoisaprofessionalsoccerplayerwhohassetrecords表演拖垮全剧,县委大院4位演员堪称败笔,让人看得难受正午阳光的主旋律剧县委大院又一次发掘了许多优秀的演员,比如此次在剧中饰演女主角的吴越。将女领导艾鲜枝演绎的活灵活现,处理问题时雷厉风行的风格简直让人不容反驳,虽然早前吴越出演的都是
王楚钦樊振东横扫对手,体现单板球质量,马龙组合遭遇挑战头条创作挑战赛乒乓球世预赛男双比赛,国乒组合樊振东和王楚钦40击败新加坡组合冯耀恩和郭勇。这场比赛由于对手单板球质量不高,很难在对拉当中占据上风,没有给东王组合制造任何威胁。只不过从巩晓彬的无奈看孙军的坚守关心CBA的球迷都知道,吉林队是全联最穷的球队,穷到只请得起一个外援,球队能打球的本土球员也不多。很多球迷不禁疑惑,吉林队为什么那么穷?难道没有企业赞助吗?吉林队是有企业赞助的,要廖三宁发文向郭艾伦学习后者回应得比我强多了才行北京时间1月8日,CBA常规赛继续进行,辽宁以11092轻取北控!此役郭艾伦发挥出色,全场比赛20投11中,三分球4中2砍下16分7板6助!赛后北控球员廖三宁更新了个人微博,表示要AI麦蒂卡特与科比四大分卫的无球技艺四大分卫当然不是汉密尔顿与雷吉米勒,无球技艺,非其所长。但能叱咤风云,那无球差,也差不到哪里去。先看看数据,仅本世纪统计麦蒂吃助攻的两分球得到3742分,最高单季622分。吃助攻的定了,为世预赛让路,第三四阶段合并,中国男篮将提前开始集训不知不觉间,联赛第二阶段已经接近尾声。第二十八轮比赛结束后,第二阶段赛程将告一段落。按照原计划,第三阶段会安排六场比赛,第四阶段会安排八场比赛。之所以这么安排,因为男篮世预赛最后两霍利菲尔德在2023年,我很想看到比沃尔和贝特比耶夫的对决头条创作挑战赛近日,美国某知名拳击媒体公布了该平台评选的2023年最值得期待的10场对决,其中不乏像泰森富里VS奥列克桑德尔乌西克这样的重量级世界拳王统一战,也有像德昂塔维尔德VS20222023赛季全国自由式滑雪U型场地锦标赛收官,吉林省小将吴梦获女子个人冠军1月8日,由国家体育总局冬季运动管理中心主办,张家口全季体育产业发展集团有限公司承办的20222023赛季全国自由式滑雪U型场地锦标赛在河北省崇礼高原训练基地的室内U型场地训练馆顺为什么月球正面和月球背面,差异这么大?探索月背有什么意义?作为距离我们最近的一颗天体,月球总是被当做探索的第一站。自苏联的月球二号在1959年9月第一次成功撞向月球之后,人们就开启了探测月球大门。截至2020年,全球各个国家共计执行过105万年一遇彗星将造访地球或肉眼可见天文学家近日表示,一颗新发现的彗星将在近几周内飞经地球,为5万年来首见,届时或可用肉眼直接观测。据法新社1月7日报道,这颗彗星编号为C2022E3,去年3月由兹威基瞬态研究设施首次哈勃发现比小说更奇怪的天体神秘的ampampquot幽灵ampampquot恒星在周围徘徊了数十亿年在20世纪60年代的科幻电视节目LostinSpace中,一个小型的行星殖民者家庭偏离了方向,在我们的银河系中迷失了。但是当涉及到哈勃太空望远镜的发现时,事实远比虚构的更奇怪。多亏火星真的有生命吗?探测器发现火星生物大迁移,星际移民或实现此前,NASA宣布位于火星的洞察号探测器任务已经正式终结,因为在它的太阳能电池板上覆盖了大量的灰层,使其电池电量完全耗尽。美国NASA宣布洞察号探测器正式终结不少人对此感到非常惋惜