当前位置: 首页 > 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 {}
}

相关文章:

  • Unity Text文本实现滚动跑马灯效果
  • (MATLAB)第五章-矩阵运算
  • okHttp MediaType MIME格式详解
  • Java的堆如何分代的?
  • 吴恩达机器学习笔记十六 如何debug一个学习算法 模型评估 模型选择和训练 交叉验证测试集
  • SpringCloudGateway理论与实践
  • 【docker基础学习之】镜像构建
  • VLAN FAQ
  • WiFi模块助力少儿编程:创新学习与实践体验
  • 【kvm企业级虚拟化】之初级篇
  • uniapp直接连接wifi(含有ios和安卓的注意事项)
  • MySQL通过SQL语句进行递归查询
  • python 蓝桥杯之并查集
  • 自动驾驶功能场景 逻辑场景 具体场景解释
  • 【Linux系统】线程
  • 03Go 类型总结
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • gf框架之分页模块(五) - 自定义分页
  • Intervention/image 图片处理扩展包的安装和使用
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Making An Indicator With Pure CSS
  • PermissionScope Swift4 兼容问题
  • React+TypeScript入门
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vue2.x学习三:事件处理生命周期钩子
  • web标准化(下)
  • 安卓应用性能调试和优化经验分享
  • 飞驰在Mesos的涡轮引擎上
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 欢迎参加第二届中国游戏开发者大会
  • 解析带emoji和链接的聊天系统消息
  • 蓝海存储开关机注意事项总结
  • 前端路由实现-history
  • 学习笔记TF060:图像语音结合,看图说话
  • 一道闭包题引发的思考
  • 自动记录MySQL慢查询快照脚本
  • 走向全栈之MongoDB的使用
  • 阿里云ACE认证学习知识点梳理
  • 阿里云服务器购买完整流程
  • ​configparser --- 配置文件解析器​
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #控制台大学课堂点名问题_课堂随机点名
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (多级缓存)缓存同步
  • (二)fiber的基本认识
  • (二十三)Flask之高频面试点
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)ssm高校实验室 毕业设计 800008
  • (蓝桥杯每日一题)love
  • (三)mysql_MYSQL(三)
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net Remoting(分离服务程序实现) - Part.3