最近我的同事在使用uber-go/ratelimit这个限流库的时候,遇到了两个大bug。这两个bug都是在这个库的最新版本(v0.3.0)中存在的,而这个版本从7月初发布都已经过半年了,都没人提bug,难道大家都没遇到过么?我先前都是使用juju/ratelimit这个限流库的,不过我不太喜欢这个库的复杂的“构造函数”,后来尝试了uber-go/ratelimit这个库后,感觉SDK设计比较简单,而且使用起来也不错,就一直使用了。当时的版本是v0.2.0,而且我也不会设置它的slack参数,所以也相安无事。最近我同事在做项目的时候,把这个库更新到最新的v0.3.0,发现在发包一段时间后,突然限流不起作用了,发包频率狂飙导致程序panic。很容易通过下面一个单元测试复现这个问题:12345678910111213funcTestLimiter(t *testing.T) {limiter := ratelimit.New(1, ratelimit.Per(time.Second), ratelimit.WithSlack(1))fori :=0; i <25; i++ {ifi ==1{time.Sleep(2* time.Second)}limiter.Take()fmt.Println(time.Now().Unix(), i)// burst}}这个单元测试尝试在第二个周期中
...
继续阅读
(164)