设计模式之美
王争
前 Google 工程师,《数据结构与算法之美》专栏作者
123426 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 113 讲
设计模式与范式:行为型 (18讲)
设计模式之美
15
15
1.0x
00:00/00:00
登录|注册

90 | 项目实战一:设计实现一个支持各种算法的限流框架(分析)

课堂讨论
重点回顾
需求分析
需求背景
项目背景
项目实战:限流框架

该思维导图由 AI 生成,仅供参考

结束了开源实战,从今天开始我们正式进入项目实战模块。在开源实战中,我带你一块剖析了几个著名的开源项目,比如 Spring、MyBatis、Google Guava 等,剖析了它们背后蕴含的设计思想、原则和模式。
如果说前面讲开源实战是学习别人怎么做,那现在我们讲项目实战就是带你一块做。在这个过程中,我会带你实践之前学过的设计思想、原则和模式,给你展示怎么应用这些理论知识,让你开发出跟前面那些著名开源项目一样优秀的软件。
在项目实战中,我找了三个稍微有点难度的项目:限流框架、幂等框架、灰度发布组件,带你一起来实现。针对每一个项目,我都会从分析、设计、实现这三个部分来讲解。当然,还是那句老话,项目本身的讲解不是重点,重点还是学习它们背后的开发套路。这才是最有价值的部分。
接下来的三节课,我们讲第一个实战项目,限流框架。今天,我们先讲其中的分析环节,介绍项目背景,分析项目需求。
话不多说,让我们正式开始今天的学习吧!

项目背景

我们先来讲下需求诞生的背景。这个背景跟我们下一个实战项目幂等框架也有关系,所以要从很久很久讲起,希望你能耐心看完,不然后面可能会看不懂。
公司成立初期,团队人少。公司集中精力开发一个金融理财产品(我们把这个项目叫做 X 项目)。整个项目只做了简单的前后端分离,后端的所有代码都在一个 GitHub 仓库中,整个后端作为一个应用来部署,没有划分微服务。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了一个支持各种算法的限流框架的设计与实现。文章首先介绍了项目背景,讲述了公司发展过程中遇到的问题,如代码质量低、维护成本高等。随后,文章详细描述了对公共服务平台的需求背景,包括接口请求频率过高导致的问题,并提出了开发接口限流功能的建议。作者希望将该功能开发成一个通用的框架,能够应用到各个业务系统中,甚至可以集成到微服务治理平台中。整体而言,本文重点介绍了限流框架的需求背景和设计思路,为读者提供了对该项目的整体认识。 文章进一步对限流框架的需求进行详细分析,包括配置限流规则和提供编程接口验证请求是否被限流。此外,还介绍了框架的非功能性需求,如易用性、扩展性、灵活性、性能和容错性。作者强调了非功能性需求对于框架设计与实现的重要性,并提出了需求分析的方法,如用户用例和测试驱动开发。最后,作者鼓励读者分享自己在项目中遇到的开发问题及解决方案。 总的来说,本文通过介绍限流框架的设计与实现,展现了对项目需求的深入分析和解决方案的探讨,为读者提供了对该技术领域的全面了解和思考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • Jxin
    1.大佬就是大佬,言简意赅。几句话就将大部分小公司发展阶段的场景描述的淋漓尽致。 2.我们公司的项目完全符合上诉故事背景描述。但比这个故事背景更糟糕的是。我们过早的做了微服务拆分,而且做拆分的人感觉真的不会写代码。因为拆分出来的微服务包无法用明确的模型来定义。模型和微服务包呈现了多对多的关联现象。与其说做了微服务拆分,不如说硬是把大单体用rpc技术拆成了多个包。因为耦合严重,无论是软件开发还是计算资源分配上,不仅没有帮助,反而还更糟糕了。 3.更恐怖的是,例子中业务扩展做了项目拷贝的动作,我们也做过。只是上面拷贝的是一个项目,我们拷贝的是从交易平台到供应链总共几十近百的“微服务”。 4.解决方案:硬着头皮,咬着牙齿写功能做维护。反正需求倒排期,出bug连带绩效清0,人走加人。 5.结果:线上bug频繁,人员流动频繁,新人上手困难。 6.请教:如何判断继续维护扩展的成本已经高于重写的成本?如何说服领导开始着手重写?在商业模式不景气时,还有必要做这个吗?

    作者回复: 1. 这个也没法量化判断,只能侧面上、主观上、感受上去判断。 2. 给领导说下现状,说下重写计划,说下重写好处,然后立个生死状,剩下的就看领导觉悟了 3. 看领导重不重视,如果重视,你重写好了,你就升职加薪,如果领导不重视,那也别做出力不讨好的事情了

    2020-05-29
    22
    60
  • Geek_e9b8c4
    专栏质量太高!小争哥,下个专栏是什么??不要停

    作者回复: 下一步计划 关注我公众号吧”小争哥“

    2020-06-06
    1
  • 梦倚栏杆
    老师,这个非功能性需求有常规的考虑list吗?需要考虑哪些点。比扩展性,易用性,容错性更细化一点的常规考虑点

    作者回复: 常规的我能想到的就这些了,还有一些非常规的,要根据你的项目来

    2020-06-03
  • 业余爱好者
    既有架构演变历史,又有领域驱动设计。既有需求分析,又有测试驱动开发。信息量不小。
    2020-05-29
    25
  • Jackey
    做过限流项目,我们的方案是Redis挂了可以降级为本地内存限流,这种可能出现不均衡的问题,但短时间内也可以接受
    2020-05-29
    19
  • JustRunning
    部门做网关性产品,之前旧逻辑简单基于redis限流,最近因为redis性能导致服务堵塞,还在考虑怎么修复,初步是打算本地预分配,比如1000/s,有10个容器,每个容器分配阈值90/s和离线100/s,达到90根据redis探测状态是否正常,正常采用redis,异常用离线100/s限流,觉得有点土方法,暂时难点是在线扩缩容后怎么处理,因为扩缩容又是外部厂家的pass平台~希望能从老师这里借鉴一下更好的经验😘😉😘
    2020-05-29
    1
    10
  • 辣么大
    哇!信息量大,有实战!好期待争哥后续两节的课程! 大的没做过,科研项目用到的机器人操作系统ROS,做高层的任务规划,可以调用ROS已有的低层的路径规划和机械臂运动规划。程序启动参数使用yaml文件配置。程序实现算法的时候,先是脑中有的大概的思路,然后才开始动手实现。当时运动规划还没实现,就先留了一个接口,但整理流程都能跑的下来,做到了模块相对独立,要等着我运动规划的功能实现,这个算法的完成流程到现在都跑不出来。思路就是把解耦,把功能分开。最后放个github链接吧,一年多主要经历都在做这个:https://github.com/fip-lab/PRobPlan
    2020-05-29
    1
    9
  • 业余爱好者
    限流熔断幂等等公共基础功能已经有很多开源组件与框架。重复造轮子,只是为了学习。
    2020-05-29
    8
  • Cutler
    跨数据库的事务一致性问题,第三方服务与本地服务,mongdb与mysql等场景需要保证最终一致性,目前采用队列,幂等加重试,对业务侵入比较大,正在研发基于saga模型的分布式事务中间件。
    2020-07-06
    3
  • 马以
    期待下节课
    2020-05-31
    2
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部