Dubbo 源码剖析与实战
何辉
平安壹钱包架构师
4711 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
开篇词 (1讲)
Dubbo 源码剖析与实战
15
15
1.0x
00:00/00:00
登录|注册

09|流量控制:控制接口调用请求流量的三个秘诀

你好,我是何辉。今天我们探索 Dubbo 框架的第八道特色风味,流量控制。
在上一讲中,我们通过增加缓存解决 App 首页加载缓慢的问题,再来回顾下整体调用链路:
每当上下班的时候,App 被打开的频率非常高,首页加载的请求流量在短时间内居高不下,随之出现页面打开卡顿、渲染慢的情况。身为架构师团队中的一员,为了保住用户体验,保住流量,你提议采取以空间换时间的方式增加一层缓存,解决了问题。
然而随着时间的推移,平台在慢慢做大,不能再像前期快速增长的阶段那样,无限接收用户请求,力保有求必应,而是需要在系统的健壮性、稳定性层面做一定考量,要对访问的流量进行有效的控制,保证哪天网关的 QPS 流量出现前所未有的暴增时,不会引发一系列服务的雪崩效应。
对于这样的需求,在消费方和提供方如何进行流量控制呢?我们开始今天的学习。

生活限流案例

对于这样一种从未接触过的流量控制,到底怎么做才算控制住了?这是我们首先要思考清楚的问题。
联想一下生活中的流量控制场景,我们可以类比成小朋友玩滑梯的例子:
游玩区有三个滑梯可以玩,每个滑梯一次只能上一个小朋友,但休息区有一堆小朋友都想玩,于是很多小朋友还没有看清滑梯是否空闲,就冲上去了,经常发生碰撞。机智的你会怎么办呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Dubbo框架流量控制的重要性及实现方法是本文的核心内容。作者通过生动的比喻和具体的实现细节,向读者展示了Dubbo框架流量控制的深入理解和实践指导。文章首先以滑梯游玩场景类比流量控制,引出了流量控制的基本概念。接着介绍了单机限流的逻辑,并强调了抽象思维的重要性,提出了利用过滤器拦截机制进行统一计数处理的方法。此外,文章还讨论了计数逻辑的实现细节,包括对方法名、方法参数列表等因素的考量,最终提出了通过服务名加方法名构成唯一的规范约束来实现计数逻辑。随后,文章进一步探讨了分布式限流的实现方法,引入了Redis来处理分布式限流,并详细介绍了相关的改造点和逻辑实现。通过这些内容,读者可以深入了解Dubbo框架流量控制的原理和实际操作,为实际项目中的流量控制提供了有益的参考。文章内容深入浅出,既有理论指导又有实际操作,对于想要深入了解Dubbo框架流量控制的读者具有很高的参考价值。文章还提出了一些思考题,引导读者进一步思考和实践,增强了文章的实用性和互动性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Dubbo 源码剖析与实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 廉思夏
    qps应该每秒的吞吐量吧,但是这里面的限流提到的qps是当前时刻在dubbo方法中未结束的请求数

    作者回复: 你好,廉思夏:这里提到的是未结束的请求数,只要 qps 的值不是 0,就说明还有多少个业务在处理中,还未结束。

    2023-09-14归属地:广东
  • yYe
    // 若当前的计数值大于或等于已配置的限流值的话,那么返回 false 表示无法获取计数资源 if (currentCount.get() >= qpsValue) { return false; } 这个代码没有并发的问题吗,如果两个线程进去都是 > qpsValue, 就像多卖是的

    作者回复: 你好,yYe的留言:你发现的很仔细。这段代码的确有你所说的多线程问题。 从业务角度来思考的话,限的是一个值,多一个计数,少一个计数,其实无大碍,关键是这个值要能起作用限住。 如果这种多一个少一个计数,对于业务不能容忍的话,那其实就还是去使用那种线程安全的单机计数或分布式计数。

    2023-08-20归属地:浙江
  • Geek_090fe2
    限流没有时间区间吗

    作者回复: 你好,Geek_090fe2:你说的这个时间区间,这里没有去深层次实现,该案例只是一个如何应用 dubbo 限流的引导。不过,这个是可以自行根据自己的业务诉求来处理,可以是自定义实现,也可以是引用第三方插件,只要能满足你的诉求都是可行的。

    2023-04-23归属地:浙江
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部