引言:为什么需要限流器?
在现代分布式系统中,限流是保护服务稳定性的重要手段。无论是防止恶意攻击、控制资源消耗,还是实现公平的服务质量保证,限流器都扮演着关键角色。Go 官方提供的 golang.org/x/time/rate 包实现了基于令牌桶算法的限流器,它简洁高效,是 Go 生态中最常用的限流方案之一。
本文将深入探讨 time/rate 限流器的原理、使用方法和实战案例,帮助你在实际项目中灵活运用这一强大工具。
令牌桶算法原理
核心概念
令牌桶算法(Token Bucket)是一种流量整形和速率限制算法。其核心思想是:
- 令牌桶:系统维护一个固定容量的桶,用于存放令牌
- 令牌生成:以恒定速率向桶中添加令牌
- 令牌消费:每个请求需要消费一定数量的令牌才能通过
- 溢出处理:当桶满时,新生成的令牌会被丢弃