90 | 项目实战一:设计实现一个支持各种算法的限流框架(分析)
王争
该思维导图由 AI 生成,仅供参考
结束了开源实战,从今天开始我们正式进入项目实战模块。在开源实战中,我带你一块剖析了几个著名的开源项目,比如 Spring、MyBatis、Google Guava 等,剖析了它们背后蕴含的设计思想、原则和模式。
如果说前面讲开源实战是学习别人怎么做,那现在我们讲项目实战就是带你一块做。在这个过程中,我会带你实践之前学过的设计思想、原则和模式,给你展示怎么应用这些理论知识,让你开发出跟前面那些著名开源项目一样优秀的软件。
在项目实战中,我找了三个稍微有点难度的项目:限流框架、幂等框架、灰度发布组件,带你一起来实现。针对每一个项目,我都会从分析、设计、实现这三个部分来讲解。当然,还是那句老话,项目本身的讲解不是重点,重点还是学习它们背后的开发套路。这才是最有价值的部分。
接下来的三节课,我们讲第一个实战项目,限流框架。今天,我们先讲其中的分析环节,介绍项目背景,分析项目需求。
话不多说,让我们正式开始今天的学习吧!
项目背景
我们先来讲下需求诞生的背景。这个背景跟我们下一个实战项目幂等框架也有关系,所以要从很久很久讲起,希望你能耐心看完,不然后面可能会看不懂。
公司成立初期,团队人少。公司集中精力开发一个金融理财产品(我们把这个项目叫做 X 项目)。整个项目只做了简单的前后端分离,后端的所有代码都在一个 GitHub 仓库中,整个后端作为一个应用来部署,没有划分微服务。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了一个支持各种算法的限流框架的设计与实现。文章首先介绍了项目背景,讲述了公司发展过程中遇到的问题,如代码质量低、维护成本高等。随后,文章详细描述了对公共服务平台的需求背景,包括接口请求频率过高导致的问题,并提出了开发接口限流功能的建议。作者希望将该功能开发成一个通用的框架,能够应用到各个业务系统中,甚至可以集成到微服务治理平台中。整体而言,本文重点介绍了限流框架的需求背景和设计思路,为读者提供了对该项目的整体认识。 文章进一步对限流框架的需求进行详细分析,包括配置限流规则和提供编程接口验证请求是否被限流。此外,还介绍了框架的非功能性需求,如易用性、扩展性、灵活性、性能和容错性。作者强调了非功能性需求对于框架设计与实现的重要性,并提出了需求分析的方法,如用户用例和测试驱动开发。最后,作者鼓励读者分享自己在项目中遇到的开发问题及解决方案。 总的来说,本文通过介绍限流框架的设计与实现,展现了对项目需求的深入分析和解决方案的探讨,为读者提供了对该技术领域的全面了解和思考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《设计模式之美》,新⼈⾸单¥98
《设计模式之美》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(24)
- 最新
- 精选
- Jxin1.大佬就是大佬,言简意赅。几句话就将大部分小公司发展阶段的场景描述的淋漓尽致。 2.我们公司的项目完全符合上诉故事背景描述。但比这个故事背景更糟糕的是。我们过早的做了微服务拆分,而且做拆分的人感觉真的不会写代码。因为拆分出来的微服务包无法用明确的模型来定义。模型和微服务包呈现了多对多的关联现象。与其说做了微服务拆分,不如说硬是把大单体用rpc技术拆成了多个包。因为耦合严重,无论是软件开发还是计算资源分配上,不仅没有帮助,反而还更糟糕了。 3.更恐怖的是,例子中业务扩展做了项目拷贝的动作,我们也做过。只是上面拷贝的是一个项目,我们拷贝的是从交易平台到供应链总共几十近百的“微服务”。 4.解决方案:硬着头皮,咬着牙齿写功能做维护。反正需求倒排期,出bug连带绩效清0,人走加人。 5.结果:线上bug频繁,人员流动频繁,新人上手困难。 6.请教:如何判断继续维护扩展的成本已经高于重写的成本?如何说服领导开始着手重写?在商业模式不景气时,还有必要做这个吗?
作者回复: 1. 这个也没法量化判断,只能侧面上、主观上、感受上去判断。 2. 给领导说下现状,说下重写计划,说下重写好处,然后立个生死状,剩下的就看领导觉悟了 3. 看领导重不重视,如果重视,你重写好了,你就升职加薪,如果领导不重视,那也别做出力不讨好的事情了
2020-05-292260 - Geek_e9b8c4专栏质量太高!小争哥,下个专栏是什么??不要停
作者回复: 下一步计划 关注我公众号吧”小争哥“
2020-06-061 - 梦倚栏杆老师,这个非功能性需求有常规的考虑list吗?需要考虑哪些点。比扩展性,易用性,容错性更细化一点的常规考虑点
作者回复: 常规的我能想到的就这些了,还有一些非常规的,要根据你的项目来
2020-06-03 - 业余爱好者既有架构演变历史,又有领域驱动设计。既有需求分析,又有测试驱动开发。信息量不小。2020-05-2925
- Jackey做过限流项目,我们的方案是Redis挂了可以降级为本地内存限流,这种可能出现不均衡的问题,但短时间内也可以接受2020-05-2919
- JustRunning部门做网关性产品,之前旧逻辑简单基于redis限流,最近因为redis性能导致服务堵塞,还在考虑怎么修复,初步是打算本地预分配,比如1000/s,有10个容器,每个容器分配阈值90/s和离线100/s,达到90根据redis探测状态是否正常,正常采用redis,异常用离线100/s限流,觉得有点土方法,暂时难点是在线扩缩容后怎么处理,因为扩缩容又是外部厂家的pass平台~希望能从老师这里借鉴一下更好的经验😘😉😘2020-05-29110
- 辣么大哇!信息量大,有实战!好期待争哥后续两节的课程! 大的没做过,科研项目用到的机器人操作系统ROS,做高层的任务规划,可以调用ROS已有的低层的路径规划和机械臂运动规划。程序启动参数使用yaml文件配置。程序实现算法的时候,先是脑中有的大概的思路,然后才开始动手实现。当时运动规划还没实现,就先留了一个接口,但整理流程都能跑的下来,做到了模块相对独立,要等着我运动规划的功能实现,这个算法的完成流程到现在都跑不出来。思路就是把解耦,把功能分开。最后放个github链接吧,一年多主要经历都在做这个:https://github.com/fip-lab/PRobPlan2020-05-2919
- 业余爱好者限流熔断幂等等公共基础功能已经有很多开源组件与框架。重复造轮子,只是为了学习。2020-05-298
- Cutler跨数据库的事务一致性问题,第三方服务与本地服务,mongdb与mysql等场景需要保证最终一致性,目前采用队列,幂等加重试,对业务侵入比较大,正在研发基于saga模型的分布式事务中间件。2020-07-063
- 马以期待下节课2020-05-312
收起评论