推荐一个比go官方实现更简洁+更正确有效的限流器 watchdog
watchdog
的优势有2点:
实现更简单。
watchdog
基于简单的零点移动机制实现了token bucket算法,比官方实现golang.org/x/time/rate
更简单,更容易理解机制更可靠。
watchdog
对token进行了正确的计算,它提供的限流机制更加可靠。因为golang.org/x/time/rate
在计算取消事件的归还token时考虑了reserved tokens,逻辑是不对的。相关讨论可以参考:https://github.com/golang/go/issues/56924
https://stackoverflow.com/questions/70993567/rate-limiting-cancellation-token-restore
而
watchdog
的零点移动机制轻松修复了这个bug
在使用层面,watchdog
完全覆盖了golang.org/x/time/rate
的功能,并保持了相似的接口,因此使用起来无需过多的心智负担
具体介绍和实现机制可以参考https://github.com/1996Paul-Wen/watchdog#readme
