(三)go-kit服务接口限流

这篇博客探讨了在Go-kit服务接口中实现限流的原理和方法。通过令牌桶算法来限制接口请求速率,介绍了如何创建限流器以及在main函数中应用该限流器。在调试过程中,当请求超出设定阈值时,服务会返回429状态码并提示'too many requests, please waiting…'" 105064824,5553485,分类模型评估:精确率、召回率与F-score,"['机器学习', '模型评价', '分类算法', '数据挖掘']
摘要由CSDN通过智能技术生成

前言

限流这层按说是应该在网关那做的,这里为了学习go kit暂时放在这里
在middleware/rate.go使用gokit的endpointMiddleWare定义一个限流中间件,在main函数里面将要限流的接口用这个函数装饰一下,这个接口就能实现限流相关功能,本项目地址: github地址

1.限流原理

常见的限流方法有令牌桶和漏桶

  • 令牌桶
    令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。
  • 漏桶
    漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率。
  • 对比
    漏桶的漏出速率是固定的参数,所以即使网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使流突发(burst)到端口速率,因此,漏桶算法对于存在突发特性的流量来说缺乏效率。令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送,对于不稳定情况下的流量有一定的兼容性。本文使用更为常见的令牌桶算法进行限流。

2. 创建限流器

在middleware/rate.go使用gokit的endpointMiddleWare定义一个限流中间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值