限流算法
天涯泪小武
开源贡献者,有代码洁癖。京东coder。
展开
-
关于电商秒杀系统中防超卖、以及高性能下单的处理方案简述
秒杀抢购系统的成功平稳运行,有一些需要注意的知识点。1 高并发,以及刷接口等黑客请求对服务端的负载冲击2 高并发时带来的超卖,即商品数量的控制3 高负载下,下单的速度和成功率的保证4 其他以秒杀单品为例,如抢小米手机。解决方案探讨:第一步 限制前端发来的请求量譬如定在了周二10点开启抢购,那么在之前的一周时间内,都会有预约通知,或者普通的用户浏览。通过预约量、浏览量...原创 2019-10-12 19:42:14 · 7653 阅读 · 0 评论 -
限流之令牌桶算法——RateLimiter官方文档
昨天CodeReview的时候看到同时使用RateLimiter这个类用作QPS访问限制.学习一下这个类.RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类.1.限流每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性.即接口也需要安装上保险丝,以防止非预期的请求对系统转载 2017-07-11 11:01:06 · 5159 阅读 · 0 评论 -
限流算法之漏桶算法、令牌桶算法
昨天CodeReview的时候看到同时使用RateLimiter这个类用作QPS访问限制.学习一下这个类.RateLimiter是Guava的concurrent包下的一个用于限制访问频率的类.1.限流每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级可用性.即接口也需要安装上保险丝,以防止非预期的请求对系统转载 2017-07-11 11:03:59 · 60453 阅读 · 7 评论 -
使用RateLimiter完成简单的大流量限流,抢购秒杀限流
RateLimiter是guava提供的基于令牌桶算法的实现类,可以非常简单的完成限流特技,并且根据系统的实际情况来调整生成token的速率。通常可应用于抢购限流防止冲垮系统;限制某接口、服务单位时间内的访问量,譬如一些第三方服务会对用户访问量进行限制;限制网速,单位时间内只允许上传下载多少字节等。下面来看一些简单的实践,需要先引入guava的maven依赖。一 有很多任务,但希望每秒原创 2017-07-11 17:54:39 · 12133 阅读 · 1 评论 -
Java并发编程之CountDownLatch,CyclicBarrier实现一组线程相互等待、唤醒
java多线程应用场景不少,有时自己编写代码又不太容易实现,好在concurrent包提供了不少实现类,还有google的guava包更是提供了一些最佳实践。Java并发编程之CountDownLatch,CyclicBarrier原创 2017-07-18 17:19:55 · 2955 阅读 · 2 评论 -
Springboot集成sentinel实现接口限流入门
Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善。来看一下sentinel的简介:https://...原创 2019-05-07 11:40:44 · 34457 阅读 · 15 评论 -
Springboot使用Sentinel限流,集成zookeeper完成规则的持久化
上一篇简单介绍了sentinel限流的基本配置和使用,这一篇我们来稍微深入一点,看看如何将zookeeper继承进来,用以保存添加的流控规则。上一篇中我们启动了dashboard.jar,然后在客户端中指定了dashboard的地址。之后启动项目,随便访问个接口,之后就能在dashboard的界面上看到相应的请求了,并且能在控制台上添加一些规则,保存后客户端就能生效了。基于内存的推...原创 2019-07-02 16:25:58 · 6796 阅读 · 7 评论 -
zuul集成Sentinel,完成对path映射的限流
前面我们讲过了对单体应用的Sentinel限流,以及使用zookeeper对规则的持久化。通过前面的工作,我们可以完成单个实例的细粒度的限流、熔断操作。譬如有一个服务User,在分布式环境下,开启了多个实例,那么每个实例都可以获得如每秒限制10个登录的限流功能。但是有些场景下,我们想要另外一种限流方式,譬如在网关zuul层,想限制对User服务的限流,而不去关心具体它有多少个实例。这时,就需要...原创 2019-07-03 17:18:58 · 3952 阅读 · 9 评论 -
zuul集成Sentinel,使用zookeeper完成动态规则限流
上一篇做了简单的zuul集成Sentinel,是在zuul代码中直接写的rule规则,无法完成动态变化的功能。那么和普通的实例限流一样,zuul的限流也支持动态的。话不多说,直接上代码,在pom中,把我注释掉的部分给放开。还是在原来的config类里加上这一个方法private void initZookeeperApis() { final String r...原创 2019-07-03 17:55:57 · 2501 阅读 · 2 评论