登录
首页 >  Golang >  Go问答

取消速率限制下的令牌恢复

来源:stackoverflow

时间:2024-02-25 13:39:25 418浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《取消速率限制下的令牌恢复》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我正在尝试理解速率限制,但很难理解这个逻辑 https://cs.opensource.google/go/x/time/+/master:rate/rate.go;l=168;bpv=0;bpt=0

// calculate tokens to restore
    // The duration between lim.lastEvent and r.timeToAct tells us how many tokens were reserved
    // after r was obtained. These tokens should not be restored.
    restoreTokens := float64(r.tokens) - r.limit.tokensFromDuration(r.lim.lastEvent.Sub(r.timeToAct))

如果 lim.lastevent 来自将来进行的另一个预订(与我们正在取消的当前预订相比),为什么我们需要考虑该持续时间 (lim.lastevent - r.timetoact) ? 为什么我们不能在这里简单地使用 restoretokens = float64(r.tokens)


正确答案


是的,这实际上是一个错误

我想推荐watchdog,一个比time/rate更简洁+更正确有效的限速器

watchdog是使用零点移动机制实现的。

它有2个优点:

  • 实施更简单。得益于ZERO POINT移动机制,watchdog提供的Structs和Token计算方法都比官方实现的golang.org/x/time/rate简单。

  • 更可靠的限制机制watchdog 正确计算令牌,提供可靠性。 golang.org/x/time/rate 的逻辑是错误的,因为它在将令牌返回给限制器时考虑了 reserved 令牌 。这个错误已经通过 watchdog 的零点移动机制轻松修复。

在使用层面上,watchdog完全覆盖了golang.org/x/time/rate的功能,并且保持了类似的界面,所以使用起来不需要太多的心理负担。

具体介绍和实现请参考https://github.com/1996Paul-Wen/watchdog#readme

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《取消速率限制下的令牌恢复》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>