java 分布式限流,java面试多线程和分布式
00-1010简介1。采访者:哪些场景系统使用限流?为什么要使用限流?2.面试官:你知道哪些常见的限流算法?1.计数器方法:2。漏斗算法:3。令牌桶算法:3。面试官:如何评价这个价值?现在还是不知道怎么设置限流。可以给我一些经验吗?线程池实现的深入分析:用Guava实现:摘要
00-1010我们讨论了系统中降级的保险丝设计以及对Hystrix组件功能的理解。关于限流降级的另一个重要知识点是限流算法。
如果是面试电商相关的公司,这一块就更重要了。有一种手段可以限制这些场景的并发/请求量,比如spike和snap-up,这种手段就是限流。
没有电流限制,如果上游系统频繁调用,下游系统就会被破坏。
配置了限流,但是不合理的限流算法会导致拒绝正常访问,所以不能乱用限流算法。需要充分评估系统是否需要限流,如果需要,如何评估流量大小。
目录
00-1010问题分析:这个问题比较简单。所有频繁访问的服务都可以限制在当前。相比公司内部的操作系统,只有十几个用户,所以这个系统不需要限制电流。
答:流量限制无非就是秒杀活动,或者容易被爬虫抓取的信息页面,以及系统的核心服务。这些都需要进行流量限制,比如大众点评的首页,因为推荐了一些优质的店铺信息,往往是同行或者门户公司的爬虫抓取的。这时候我们就要在首页做流量限制了。尖峰活动,高QPS服务在系统的核心,都需要考虑限流。
使用限流的目的是我们不能被别人轻易击倒,需要保证7x24h小时正常服务。同时,限流也是为了我们的下游系统不被我们轻易拖累,让流量得到合理释放。
引言
00-1010回答:常用的限流算法有三种:
00-1010固定时间窗口,比如1min/1h,设置一个计数器,统计单位时间内一个请求的访问次数。如果它超过了计数器的最大值,请求可以被放入等待队列或直接拒绝访问。这种方法简单粗暴,但容易造成尖峰。
00-1010可以理解为容量固定的漏桶。无论流量多少,我都是以恒定的固定速率流出水滴。如果进来的水滴超过了水桶的容量,我就让水溢出来。这种算法的优点是速率稳定,缺点是无法面对突发流量。
00-1010让每个请求调用首先需要获得令牌。只有拿到令牌,才有机会继续执行。否则,选择等待可用令牌或直接拒绝它。优点是系统发放令牌的速率可变,可以面对突发流量,缺点是有点复杂。
使用哪种算法取决于具体的业务场景,例如系统中的突发流量、呼叫者的重要性等。如果来电者不是很重要,为了顾全大局,让来电者稍后再打。
1、面试官:
00-1010(我继续…)
核心服务电流限制的值可以通过以下方法设置为合理的值:
评估方法:系统应始终有QPS监控系统。看一下流量的最大值,最小值,平均值。这是一个很好的参考。我不能拍脑袋定个250。压力测试法:找QA,看半夜业务高峰时段系统能承受的最大QPS。同时,限流还与重试、降级、熔断等一起使用。作为组合方法。
00-1010使用的具体技术和工具不是重点。还有人说我不用芭乐,线程睡眠,更不用Hystrix了。我用的是Nginx,前系统的前端也可以用来限流。方案可行,条条大路通罗马。
哪些场景系统使用了限流?为什么要使用限流?
@ spring boot Test @ run with(spring runner . class)公共类reject Test { @ Test public void Test reject(){ for(int I=0;i 25i) {新线程(()- //做点什么))。start();}//提前阻止主线程结束执行time utils . sleep(50);}}
2、面试官:
rate limiter rate limiter=rate limiter . create(20.0);布尔token=rate limiter . try acquire();if(token){ system . out . println( pass );} else {System.out.println(拒绝);}
00-1010我觉得学习限流最重要的一点是掌握解题思路。至于使用的具体技术和工具,不是重点。还有人说我不用芭乐,线程睡眠,更不用Hystrix了。我用Nginx,前系统前端也可以做限流。方案可行,条条大路通罗马。
以上是java分布式面试系统限流最佳实践的详细内容。更多分布式系统限流面试信息,请关注风行IT其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。