当前位置: 首页 > news >正文

【Go】令牌桶限流算法

1. 限流

限流,顾名思义,限制用户请求流量,避免大规模并发导致系统宕机。

2. 令牌桶算法

令牌管理员以恒定的速率向令牌桶里放置一个令牌。如果桶满,就丢弃令牌。
请求到达时,都要先去令牌桶里取一个令牌,如果取到令牌,则进行后续业务逻辑操作,否则直接返回。

3. Go简单实现

package mainimport ("fmt""time"
)const (rate     = 2    // 限制令牌发送速率capacity = 1024 // 令牌桶的容量reqNum   = 10   // 并发到达的请求数
)func main() {bucket := make(chan struct{}, capacity)go func() {ticker := time.NewTicker(time.Second / rate) // tps=ratedefer ticker.Stop()for range ticker.C {select {case bucket <- struct{}{}: // 令牌桶未满default: // 令牌桶已满}}}()for i := 0; i < reqNum; i++ {go func(i int) {for {select {case <-bucket: // 获取令牌fmt.Printf("[%d]: get a token, perform subsequent service processing\n", i)default:}}}(i)}select {}
}
http://www.lryc.cn/news/317946.html

相关文章:

  • go的slice学习
  • 软件设计师17--磁盘管理
  • 学点Java打小工——Day2Day3一点作业
  • 【话题】2024年AI辅助研发趋势,有那些应用领域
  • 蓝桥杯——数组切分
  • 【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项
  • 数据库是什么?数据库连接、管理与分析工具推荐
  • 【C#算法实现】可见的山峰对数量
  • Selenium 隐藏浏览器指纹特征的几种方式
  • k8s发布nacos-server,nodeport配置注意事项
  • 伪分布式Spark集群搭建
  • Android 监听卫星导航系统状态及卫星测量数据变化
  • 鸿蒙培训开发:就业市场的新热点~
  • 【C++】string的底层剖析以及模拟实现
  • Unity的PICO项目基础环境搭建笔记(调试与构建应用篇)
  • 电脑远程桌面选项变成灰色没办法勾选怎么办?
  • 2024.3.14
  • chatGPT的耳朵!OpenAI的开源语音识别AI:Whisper !
  • C语言冒泡排序
  • vue2 elementui 封装一个动态表单复杂组件
  • 基于智慧灯杆的智慧城市解决方案(2)
  • 「Paraverse平行云」亮相HKSTP OPENHOUSE活动
  • CubeMX使用教程(5)——定时器PWM输出
  • superset连接Apache Spark SQL(hive)过程中的各种报错解决
  • Pulsar IO实战
  • Linux/Ubuntu/Debian基本命令:文本操作
  • Self-supervised Contextual Keyword and Keyphrase Retrieval with Self-Labelling
  • 新 树莓派4B 温湿度监测 基于debian12的树莓派OS
  • 人工智能入门之旅:从基础知识到实战应用(一)
  • GNN/GCN自己学习