Go 服务开发高手课
徐逸
头部大厂资深 Go 技术专家、前腾讯资深工程师
1239 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 25 讲/共 28 讲
开篇词 (1讲)
Go 服务开发高手课
15
15
1.0x
00:00/00:00
登录|注册

24|限流:不用Redis,如何搞定高并发低延时服务限流?

你好,我是徐逸。
通过上节课的学习,相信你已经清楚,当下游服务过载时,借助熔断和降级机制,我们能够有效提升服务的稳定性。不过,换个角度看,倘若我们自身作为其他服务的下游,在面对可能出现的突发流量时,怎样才能有效避免自身服务陷入过载状态呢?
今天,咱们就来聊一聊,当上游服务的调用流量突然增加时,如何保障我们的服务不出现过载的状况。

什么是服务限流?

我们知道,许多热门旅游景点会通过限制门票销售数量来控制景区的人数。当门票售罄后,后续的游客需要等待或改日再来。这种限流措施可以有效避免景区内过度拥挤,确保游客的安全和体验。
与之相似,在秒杀、大促抢购这类场景中,为避免超出预期的流量冲击,导致服务出现过载、性能下降乃至崩溃的状况,我们通常会给服务添加限流机制,限制服务在单位时间内处理的请求数量,当请求量超过预先设定的阈值时,就直接拒绝超出部分的请求。正如下方图示所呈现的,一旦触发限流,前端便会显示 “活动太火爆啦,请稍后重试” 之类的提示文案。
图1 秒杀限流

如何实现服务限流?

知道了什么是服务限流,那么我们该如何实现限流机制呢?

限流算法

首先,我们来一起看看常见的限流算法,主要包括下面四种。
先来看固定窗口算法,也称为计数器算法。就像下面的图展示的一样,计数器算法需要设定一个固定的时间窗口,在这个时间窗口里,每收到一个请求,计数器就加 1 。当计数器的值达到设定的限流阈值时,这个时间窗口内后续收到的请求就会被限流,直接拒绝或者排队,直到进入下一个周期后,计数器重置为 0,重新开始计数。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. 服务限流是为了避免服务出现过载、性能下降乃至崩溃的状况,通常通过给服务添加限流机制,限制服务在单位时间内处理的请求数量来实现。 2. 常见的限流算法包括固定窗口算法、滑动窗口算法、漏桶算法和令牌桶算法,它们各有优势和适用场景。 3. 令牌桶算法能够出色地应对短时突发流量,有效保障服务稳定、流畅,特别适用于微服务架构实践中的上游服务限流。 4. 集中式限流与单机本地限流是常见的限流方式,集中式限流能够精确控制整个服务的流量,但可能增加请求延迟,而本地限流的延迟极低,且无需依赖任何外部组件,但应用场景相对受限。 5. 在选择限流对象时,需要综合考虑多个因素,将上游服务标识、本服务接口名称、本服务集群名称以及上游服务的集群名称进行组合,形成限流的关键标识(key),以此来实现精准的限流控制。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 服务开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
什么是服务限流?
如何实现服务限流?
限流算法
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)