• 阿土
    2019-12-13
    令牌桶以及漏桶算法的分布式实现有可以参考的么?

    作者回复: guava 的RateLimit

    
     6
  • 知行合一
    2019-12-18
    感觉都是知道一些概念但是都没有深入展开
    
     4
  • leslie
    2019-12-13
    这周刚开始学习老师的课程,算法训练营刚基本结束,就继续开始知识的强化,下周老师基本上能赶上进度,学习中可能会在后续的提出一些前面课程的困惑希望老师不吝赐教。
       限流的用户体验太差了:令牌桶算法和漏桶算法确实不错,有生产环境用限流不过体验非常差,每年次数不多且.net系的似乎没用好的策略,故而都是暴力的增加带宽去解决。
        老师在课程小结前面的"我们可以在每次取令牌的时候,不再只获取一个令牌,而是获取一批令牌,这样可以尽量减少请求 Redis 的次数。"这个其实稍有问题,个人觉得改成"我们可以在每次取令牌的时候,不再只获取一个令牌,而是通过MQ获取一批令牌,这样可以尽量减少请求 Redis 的次数。"更为符合生成环境的操作。
        数据系统/中间件存储已经不再是当初的CS或BS开发架构:高并发分布式架构其实就是要充分利用这些组件,带来的问题就是运维复杂。不过我记得陈皓老师说过"运维优先,做平台的思路就是一定要能维护好",这其实是许多中小企业不重视的方面且觉得无所谓的方面,从而导致了大量设计思路的错误,造成了大量的不必要的高并发。有时加个组件就能完成-前提是你对它足够了解。
         今年在中小电商平台经历过其多套系统,典型的问题还是系统的合理性已经维护的问题带来了大量的高并发,数据系统中的某些组件性能优化做到后相比过去有了极其显著的提升,让慢查询比例缩短至过去10-15%,可是依然在某些峰之上还是有问题。流量控制其实涉及到的不是数据库而是数据系统和整体系统的性能维护,这是我觉得很多技术负责人没有看到的问题。
         期待老师后续的分享:后续的课程中会有一些前面的问题,还望老师不吝赐教-谢谢。
    展开

    作者回复: 加油~

     2
     3
  • 台风骆骆
    2019-12-13
    听老师的课,每次都有收获,给老师点个赞。
    限流方式有如下:
    1、固定窗口
    2、滑动窗口
    3、漏斗,一般用队列来实现,但是会造成请求有延迟并且也对处理突发流量不友好。
    4、令牌桶,通过往桶内定时放入一个令牌,请求过来时先要申请到令牌才能继续,否则请求失败,这个对于处理突发流量时比较友好,即平时可以攒,到突发流量时可以直接用起来,guava的ratelimiter就是令牌桶算法实现的,分布式令牌桶可以用redis来实现,可以一次申请多个而不是一个这样可以降低每次请求的开销。
    展开

    作者回复: 赞总结,谢谢~

    
     2
  • 阿土
    2019-12-13
    前不久做了一个一句话需求:同一个用户每5秒只能提交一次订单,每天只能提交最多200次订单。采用的方式就是固定窗口请求计数的粗爆算法,简单快捷。最终每天的请求量汇总用来做数据分析。我在考虑是不是可以用令牌桶算法来实现地更优雅一些呢?

    作者回复: 可以的,固定窗口应该会有所说的边界问题

    
     2
  • 大鸡腿🍗
    2019-12-15
    看到评论说业界,没有成熟的方案,这里就要捶你了。开发:rateLimit,semaphore,框架:阿里的sentiel以及它的各种限流产品

    作者回复: 文章中也提到有guava的RateLimit

    
     1
  • ちよくん
    2020-01-27
    批量获取令牌后怎么处理呢?放到服务的本地缓存中吗?还是另起一个新的redis 缓存?如果新开一个redis 缓存,和直接取区别不大吧?如果本地的内存缓存,也不见得比直接从redis 取快多少吧,可能会快一丢丢,毕竟所有的请求都直接从redis 取,压力会比较大,相当于把redis中的数据打散到各个服务再处理

    作者回复: 放在本地内存里面

    
    
  • 梁中华
    2020-01-22
    令牌算法中,一次性从redis获取一批令牌,会不会造成流量不均呢?

    作者回复: 应该不会的

    
    
  • 丁丁历险记
    2019-12-26
    马桶方式比较好。

    作者回复: 马桶是…… 什么鬼

    
    
  • longslee
    2019-12-22
    打卡。 使用令牌桶,如何确保一个消费端一次不正确的消耗了很多个令牌呢?

    作者回复: 这个比较难吧。。

    
    
  • Keith
    2019-12-20
    接着上个问题(好像二次回复通知不到作者), 所以相对于漏桶算法, 为什么推荐使用令牌桶算法呢?
    
    
  • JackJin
    2019-12-19
    原话:我们可以在每次取令牌的时候,不再只获取一个令牌,而是获取一批令牌,这样可以尽量减少请求 Redis 的次数。
    那么获取的一批令牌没使用完,怎么处理呢?或者是基于什么去判断这一批令牌的数量?

    作者回复: 你在请求的时候就要消耗令牌,如果请求的时候发现令牌没有了,就是消耗完了

     1
    
  • Keith
    2019-12-14
    "而令牌桶算法可以在令牌中暂存一定量的令牌,能够应对一定的突发流量,所以一般我会使用令牌桶算法来实现限流方案", 相对于漏桶算法, 令牌桶算法的优势是保证请求的实时处理吗? 怎么是能够应对一定的突发流量? 漏桶算法也可以应对一定的突发流量, 而且更多(至少多一桶), "能够应对一定的突发流量"这个理由有问题吧?

    作者回复: 是说会允许有突发的流量

     1
    
  • 阿卡牛
    2019-12-13
    关于动态限流,目前业界应该没有比较成熟的方案,可以借鉴TCP 协议的拥塞控制的算法。TCP 使用 RTT - Round Trip Time 来探测网络的延时和性能,从而设定相应的“滑动窗口”的大小,以让发送的速率和网络的性能相匹配,可以借鉴在我们的流控技术中。

    作者回复: 有一些令牌桶算法的实现

    
    
  • 阿卡牛
    2019-12-13
    很详细,就是对鲁棒性这个翻译比较不满,不知道是不是业界对robust的统一叫法了。第一眼看真是不明觉厉:(

    作者回复: 额 中国式英语

    
    
  • 斐波那契
    2019-12-13
    这两个方法也是阿里在用的方法 阿里有一本书叫决战双11中提到的限流 就是这两个方法

    作者回复: 是通用的做法

    
    
  • Loony
    2019-12-13
    每次获取一批令牌数,如何确保请求的准确下发呢?

    作者回复: 这个只是获取多个令牌,不会影响请求的下发的

    
    
我们在线,来聊聊吧