go-zero中怎么扛住流量冲击(go-zero,编程语言)

时间:2024-05-04 09:57:31 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    go-zero%E4%B8%AD%E6%80%8E%E4%B9%88%E6%89%9B%E4%BD%8F%E6%B5%81%E9%87%8F%E5%86%B2%E5%87%BB

从整体上令牌桶生产token逻辑如下:

用户配置的平均发送速率为r,则每隔1/r秒一个令牌被加入到桶中;

假设桶中最多可以存放b个令牌。如果令牌到达时令牌桶已经满了,那么这个令牌会被丢弃;

当流量以速率v进入,从桶中以速率v取令牌,拿到令牌的流量通过,拿不到令牌流量不通过,执行熔断逻辑;

go-zero 在两类限流器下都采取 lua script 的方式,依赖redis可以做到分布式限流,lua script同时可以做到对 token 生产读取操作的原子性。

下面来看看 lua script 控制的几个关键属性:

上述可以看出 lua script :只涉及对 token 操作,保证 token 生产合理和读取合理。

从上述流程中看出:

有多重保障机制,保证限流一定会完成。

如果redis limiter失效,至少在进程内rate limiter兜底。

重试 redis limiter 机制保证尽可能地正常运行。

go-zero 中的 tokenlimit 限流方案适用于瞬时流量冲击,现实请求场景并不以恒定的速率。令牌桶相当预请求,当真实的请求到达不至于瞬间被打垮。当流量冲击到一定程度,则才会按照预定速率进行消费。

但是生产token上,不能按照当时的流量情况作出动态调整,不够灵活,还可以进行进一步优化。此外可以参考Token bucket WIKI中提到分层令牌桶,根据不同的流量带宽,分至不同排队中。

本文:go-zero中怎么扛住流量冲击的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:有哪些JAVA必须掌握的数据结构和算法下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18