开局之前

限流。这个东哥分享过sentinel,但是我有点忘记具体怎么实现的了,脑瓜子里奔出了什么令牌桶啊等等,
但是我不晓得啊 但是想起一个面试题,要求说某个ip五分钟之内 只能登陆5次,这个怎么实现
这个可以使用redis实现,key是Ip,value 是一个list,list中存储的是时间,如果超过5条则计算下第一条和当前的时间差。。,如果小于则放入即可
具体参考

但是guava的是单机的, 因为请求是随机打到每一个机器上的(这毕竟不像是tcp长连接那种 固定到一个机器基本就一直使用一个机器)所以单机上的限流是不好使的。

令牌桶

什么是令牌,桶是用什么容器实现的?

如何实现令牌桶

直观的想法就是生产者消费者,生产者提供令牌给队列,消费者就是来的请求, 如果令牌不够 ,则阻塞。
这样实现的弊端是,以为限流系统是高并发的场景,所以系统已经在极限了 生产者定时向队列添加令牌其实也是一个线程,会增加系统的消耗

guava是如何实现的?

记录并动态计算下一令牌发放的时间

  1. 桶容量是1

记录并动态计算下一令牌发放的时间

  1. 桶容量是2

如果令牌是从令牌桶中出的,那么 next 就无需增加一个 interval 了。