速率限制、单元格和通用漏桶算法(GCRA)

主要观点

  • 速率限制是开发者可能会涉及的机制,有多种用途,如共享有限资源、保障安全、创造收入等。
  • 介绍了几种不同的速率限制算法,包括时间桶、漏桶和通用信元速率算法(GCRA)。

关键信息

  • 时间桶算法:通过在桶中存储剩余限制,按固定时间周期更新,简单但可能导致用户和服务器的问题。
  • 漏桶算法:类似真实世界的漏桶,有固定容量和漏水速率,能产生平滑的速率限制效果,但存在“滴水”过程的弱点。
  • GCRA 算法:基于“理论到达时间”跟踪剩余限制,通过比较当前时间和计算出的时间来决定是否允许请求,对时间敏感,需注意机器间的时钟同步。
  • Throttled:同事升级的开源 Go 库,实现了 GCRA 算法,文档完善、测试充分,已在 Stripe 生产环境使用,很快也将在 Heroku 使用。

重要细节

  • 时间桶算法的伪代码及在 Redis 中的实现方式(使用SETEX命令)。
  • 漏桶算法的可视化表示及通常的实现方式(使用后台进程模拟漏水)。
  • GCRA 算法中各种变量的含义及计算方式,如“理论到达时间”“发射间隔”等。
  • Throttled 库中 GCRA 实现的代码位置(rate.go文件)。
阅读 11
0 条评论