java分布式面试系统限流最佳实践

目录
  • 引言
  • 1、面试官:
    • 哪些场景系统使用了限流?为什么要使用限流?
  • 2、面试官:
    • 那你了解哪些常用限流算法?
    • 1.计数器方法:
    • 2.漏斗算法:
    • 3.令牌桶算法:
  • 3、面试官:
    • 那具体这值该如何评估,说到现在我还是不知道限流到底要怎么设置,可以给我一点经验方法吗?
  • 深入分析
    • 使用线程池实现:
    • 借助Guava实现:
  • 总结

引言

前面讲了系统中的降级熔断设计和对 Hystrix 组件的功能了解,关于限流降级还有一个比较重要的知识点就是限流算法。

如果你面试的是电商相关公司,这一块就显得更加重要了,秒杀、抢购等场景,需有一种手段来限制这些场景的并发/请求量,手段就是限流。

没有配置限流,如果遇到上游系统频繁调用,会导致下游系统被击垮。

配置了限流,但是限流算法不合理,会导致正常访问被拒绝,所以限流算法不能乱用,要充分评估系统是否需要限流,如果要限流,流量大小如何评估。

1、面试官:

哪些场景系统使用了限流?为什么要使用限流?

问题分析:这个问题比较简单,所有访问频繁的服务都可以做限流,相比公司内部运营系统,用户加起来不过十几个,这种系统就没必要限流了。

答:限流呀,无非就是秒杀活动,或者容易被爬虫爬的信息类页面,以及系统核心服务,这些都需要做限流,比如大众点评首页,因为推荐了一些高质量店铺信息,经常被同行或者门户类公司的爬虫爬取信息,这个时候我们就要对首页做限流操作。秒杀活动,系统核心高QPS服务,都需要考虑限流。

使用限流的目的就是我们不能轻易被别人干倒,要7x24h保证服务正常,同时,限流也是为了我们的下游系统不会轻易被我们拖垮,流量合理放行。

2、面试官:

那你了解哪些常用限流算法?

答:常用的限流算法就3种:

1.计数器方法:

固定时间窗口,比如1min/1h,设置一个计数器统计单位时间内一个请求的访问量,超过计数器最大值,可以让请求放入等待队列 or 直接拒接访问,这种方法简单粗暴,但是易造成突刺现象。

2.漏斗算法:

可以理解成一个固定容量的漏桶,不管流量多还是少,我都按照常量固定速率流出水滴,如果流入水滴超出了桶的容量,就让水溢出。这种算法优点是稳定速率,缺点是无法面对突发流量。

3.令牌桶算法:

让每次请求调用需要先获取令牌,只有拿到令牌,才有机会继续执行,否则选择等待可用的令牌,或者直接拒绝。优点是系统发放令牌的速率是可变的,能够面对突发流量,缺点是有点复杂。

具体使用哪种算法,要根据具体业务场景,比如系统时候会有突发流量,调用方重要程度等,如果调用方不是很重要,为了顾全大局,直接放调用方稍后重试。

3、面试官:

那具体这值该如何评估,说到现在我还是不知道限流到底要怎么设置,可以给我一点经验方法吗?

(我继续…)

对于核心服务限流的值可以通过以下方法来设置合理的值:

  • 观察评估法:系统总该有QPS监控系统吧,看看流量环比最大值,最小值,平均值,这就是很好的参考,总不能我一拍脑袋设置一个250上去。
  • 压力测试法:找QA,半夜业务低峰期,看看系统能承受的最大QPS。

同时,限流还有和重试、降级、熔断等作为组合方法一起使用。

深入分析

于具体使用的技术和工具并不是重点,还有人说我也不用Guava,也不用Thread sleep,更不用Hystrix,我用Nginx,前系统最前端同样可以做限流,方案可行,条条大路通罗马。

使用线程池实现:

@SpringBootTest
@RunWith(SpringRunner.class)
public class RejectTest {
    @Test
    public void testReject() {
        for (int i = 0; i < 25; ++i) {
            new Thread(() ->
                 // do something
                      )).start();
        }
        // 防止主线程提前结束执行
        TimeUtils.sleep(50);
    }
}

借助Guava实现:

RateLimiter rateLimiter = RateLimiter.create(20.0);
boolean token = rateLimiter.tryAcquire();
if (token) {
	System.out.println("pass");
} else {
	System.out.println("refuse");
}

总结

我认为学习限流最重要的点是掌握解决问题的思路,至于具体使用的技术和工具并不是重点,还有人说我也不用Guava,也不用Thread sleep,更不用Hystrix,我用Nginx,前系统最前端同样可以做限流,方案可行,条条大路通罗马。

以上就是java分布式面试系统限流最佳实践的详细内容,更多关于分布式系统限流面试的资料请关注我们其它相关文章!

(0)

相关推荐

  • 浅谈Java分布式架构下如何实现分布式锁

    01分布式锁运用场景 互联网秒杀,抢优惠卷,接口幂等性校验.咱们以互联网秒杀为例. @RestController @Slf4j publicclassIndexController{ @Autowired privateRedissonredission; @Autowired privateStringRedisTemplatestringRedisTemplate; @RequestMapping("/deduct_stock") publicStringdeductStock(

  • 详解Springboot分布式限流实践

    高并发访问时,缓存.限流.降级往往是系统的利剑,在互联网蓬勃发展的时期,经常会面临因用户暴涨导致的请求不可用的情况,甚至引发连锁反映导致整个系统崩溃.这个时候常见的解决方案之一就是限流了,当请求达到一定的并发数或速率,就进行等待.排队.降级.拒绝服务等... 限流算法介绍 a.令牌桶算法 令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务. 当桶满时,新添加的令牌被丢弃或拒绝. b.漏桶算法 其主要目的是控制

  • Java分布式锁的概念与实现方式详解

    什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁. 普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序执行,否则会出现并发问题. 如何控制呢?就是设置一个各个线程都能看的见的标志.然后,每个线程想访问临界区域时,都要先查看标志,如果标志没有被占用,则说明目前没有线程在访问临界区域.如果标志被占用了,则说明目前有线程正在访问临界区域,则当前线程需要等待. 这个标志,就是锁. 在单机多线程的java程

  • 详解springboot+aop+Lua分布式限流的最佳实践

    一.什么是限流?为什么要限流? 不知道大家有没有做过帝都的地铁,就是进地铁站都要排队的那种,为什么要这样摆长龙转圈圈?答案就是为了限流!因为一趟地铁的运力是有限的,一下挤进去太多人会造成站台的拥挤.列车的超载,存在一定的安全隐患.同理,我们的程序也是一样,它处理请求的能力也是有限的,一旦请求多到超出它的处理极限就会崩溃.为了不出现最坏的崩溃情况,只能耽误一下大家进站的时间. 限流是保证系统高可用的重要手段!!! 由于互联网公司的流量巨大,系统上线会做一个流量峰值的评估,尤其是像各种秒杀促销活动,

  • java分布式面试系统限流最佳实践

    目录 引言 1.面试官: 哪些场景系统使用了限流?为什么要使用限流? 2.面试官: 那你了解哪些常用限流算法? 1.计数器方法: 2.漏斗算法: 3.令牌桶算法: 3.面试官: 那具体这值该如何评估,说到现在我还是不知道限流到底要怎么设置,可以给我一点经验方法吗? 深入分析 使用线程池实现: 借助Guava实现: 总结 引言 前面讲了系统中的降级熔断设计和对 Hystrix 组件的功能了解,关于限流降级还有一个比较重要的知识点就是限流算法. 如果你面试的是电商相关公司,这一块就显得更加重要了,秒

  • Java高并发系统限流算法的实现

    目录 1 概述 2 计数器限流 2.1 概述 2.2 实现 2.3 结果分析 2.4 优缺点 2.5 应用 3 漏桶算法 3.1 概述 3.2 实现 3.3 结果分析 3.4 优缺点 4 令牌桶算法 4.1 概述 4.2 实现 4.3 结果分析 4.4 应用 5 滑动窗口 5.1 概述 5.2 实现 5.3 结果分析 5.4 应用 1 概述 在开发高并发系统时有三把利器用来保护系统:缓存.降级和限流.限流可以认为服务降级的一种,限流是对系统的一种保护措施.即限制流量请求的频率(每秒处理多少个请求

  • java分布式面试降级组件Hystrix的功能特性

    目录 引言 1.面试官:能简单介绍下Hystrix有哪些功能吗? 1.1.fail-fast(快速失败) 1.2.Fallback优雅降级机制 1.3.线程/信号量隔离机制 线程隔离: 信号量隔离: 2.面试官:刚刚说到线程隔离,那实际使用中是否打开超时线程中断开关? 3.面试官:那你是如何估计线程池大小的? 深入分析 Hystrix历史 Hystrix的主要功能特性 HystrixDemo 哪些情况下会触发fallback? 附录:Hystrix策略配置 Sentinel与Hystrixres

  • 详解Java分布式缓存系统中必须解决的四大问题

    目录 缓存穿透 缓存击穿 缓存雪崩 缓存一致性 分布式缓存系统是三高架构中不可或缺的部分,极大地提高了整个项目的并发量.响应速度,但它也带来了新的需要解决的问题,分别是: 缓存穿透.缓存击穿.缓存雪崩和缓存一致性问题. 缓存穿透 第一个比较大的问题就是缓存穿透.这个概念比较好理解,和命中率有关.如果命中率很低,那么压力就会集中在数据库持久层. 假如能找到相关数据,我们就可以把它缓存起来.但问题是,本次请求,在缓存和持久层都没有命中,这种情况就叫缓存的穿透. 举个例子,如上图,在一个登录系统中,有

  • Java实现5种限流算法及7种限流方式

    目录 前言 1. 限流 2. 固定窗口算法 2.1. 代码实现 3. 滑动窗口算法 3.1. 代码实现 4. 滑动日志算法 4.1. 代码实现 5. 漏桶算法 6. 令牌桶算法 6.1. 代码实现 6.2. 思考 7. Redis 分布式限流 7.1. 固定窗口限流 7.3. 滑动窗口限流 8. 总结 参考 前言 最近几年,随着微服务的流行,服务和服务之间的依赖越来越强,调用关系越来越复杂,服务和服务之间的稳定性越来越重要.在遇到突发的请求量激增,恶意的用户访问,亦或请求频率过高给下游服务带来较

  • java分布式面试接口如何保证幂等及概念理解

    目录 引言 1.幂等的概念 问题分析: 事后问题分析: 关于这个接口的幂等设计 深入分析: 2.工作中常见的幂等设计场景 3.幂等接口常见设计方案 总结 引言 稳定性设计第一篇:这一小节开始讲设计系统稳定性保证的相关设计,谁都不想自己负责的系统三天两头就出故障,也不想周六日跟女票葡萄美酒夜光杯的时候一个电话call去VPN办公,那么你就想办法让你的系统尽量稳定,我们的目标是让系统“无人值守”. 阿里新零售和阿里妈妈,美团,过去我面试这些公司都被问过接口幂等相关问题,接口幂等设计在分布式系统开发中

  • java分布式面试CAP分别代表含义分析

    目录 引言 1.面试官,说到CAP定理,那能详细说说CAP分别代表什么吗? 2.面试官:听起来很简单,这只是概念,但是具体是什么意思呢? 举例深入分析 总结 引言 上一节讲面试中被问到分布式系统概念相关的,讲完了分布式系统的概念,优点缺点和 RPC 后,我以为这个问题就到此结束了,没想到成功给自己挖了个坑(微笑脸),关于 CAP,以前只是听说过,并没有详细点整理过,这一次问好好整理了下. CAP 问题已经成了计算机科学中一个研究领域,之前说到分布式系统有哪些优势时讲到三个提升: 1. 系统可用性

  • java秒杀之redis限流操作详解

    最近写到了一个秒杀的功能模块,为了保证高并发情况下不会宕机,要从多方面去考虑,当前的限流操作只是其中的一个方面,具体操作如下. 导入所需依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.targ

  • golang高并发系统限流策略漏桶和令牌桶算法源码剖析

    目录 前言 漏桶算法 样例 源码实现 令牌桶算法 样例 源码剖析 Limit类型 Limiter结构体 Reservation结构体 Limiter消费token limiter归还Token 总结 前言 今天与大家聊一聊高并发系统中的限流技术,限流又称为流量控制,是指限制到达系统的并发请求数,当达到限制条件则可以拒绝请求,可以起到保护下游服务,防止服务过载等作用.常用的限流策略有漏桶算法.令牌桶算法.滑动窗口:下文主要与大家一起分析一下漏桶算法和令牌桶算法,滑动窗口就不在这里这介绍了.好啦,废

  • 浅谈Koa服务限流方法实践

    最近接了一个需求,很简单,就是起一个server,收到请求时调用某个提供好的接口,然后把结果返回.因为这个接口的性能问题,同时在请求的不能超过特定数目,要在服务中进行限流. 限流的要求是,限制同时执行的数目,超出这个数目后要在一个队列中进行缓存. koa 中间件不调用 next 最初的想法是在 koa 中间件中进行计数,超过6个时将next函数缓存下来.等正在进行中的任务结束时,调用next继续其他请求. 之后发现 koa 中间件中,不执行next函数请求并不会停下,而是不再调用之后的中间件,直

随机推荐