阿里毕玄:聊聊系统设计的套路

简介: 系统设计我一直觉得是远比Java编程技能更难多了的培训,很容易变成务虚课,全是一堆理论。从和学员的互动中学习到了很多,对系统设计的一些方法论进行抽象总结,所以我和这些捧场的学员们说其实是我们一起在共创系统设计的课程 。

作者:毕玄   
文章来源:微信公众号HelloJava

几个公众号转了我三年前写的我在系统设计上犯过的14个错,阅读量远比当年我发的时候高多了,感谢呀,那篇确实算得上心血之作了,哈哈,正好最近我在内部在做一个系统设计培训的尝试,有了更多感受,在这篇文章里再来写写。

系统设计我一直觉得是远比Java编程技能更难多了的培训,很容易变成务虚课,全是一堆理论,然并卵(想想一堆没怎么做过系统设计的人讲系统设计的课,这纯粹是开玩笑),所以以前从来不敢尝试做这方面的培训,不过今年由于一些情况,决定大胆尝试下,就在内部搞了个民间的培训,结果还真有不少同学捧场,在开始上这门课后,我觉得收获最大的搞不好是我自己,整理思路,从和学员的互动中学习到了很多,能更好的对系统设计的一些方法论进行抽象总结,所以我和这些捧场的学员们说其实是我们一起在共创系统设计的课程 。

我给系统设计培训定的目标是:

  1. 通过这堂课掌握一个思考框架,知道做系统设计的套路,系统设计不是简单的上来就画画框什么,必须按照一定的套路才能更好的进行系统设计;
  2. 拓宽知识面,系统设计中非常重要的是考虑的全面性,以更好的进行权衡取舍,所以能不能借助系统设计培训来拓宽知识面非常重要。

而要达到这样的效果,怎么去上这堂课挑战其实是不小的:

  1. 想要传达的思考框架到底是什么?怎么样变成不是纯粹的理论,务虚的传达,从而让大家能更好的掌握并真正的去运用这个思考框架?

以前真的没仔细的思考过系统设计的思考框架的问题,其实吧很多的系统设计的模板就是一个思考框架,但在不理解的情况下,是很难应用好的。

回顾了下自己做过的几个系统的设计,发现现在自己在做系统设计的时候确实是会按照一个套路去做,这个套路就是:

系统设计的目的->系统设计的目标->围绕目标的核心设计->围绕核心设计形成的设计原则->各子系统,模块的详细设计。

1). 系统设计的目的

是指做这个系统设计的目的到底是什么,很多人在做系统设计时,是搞不清为什么要做一个新系统的设计,或者为什么要做一个系统的重构/演进的设计,如果搞不清楚这个目的,后面的系统设计上是很容易形成偏差的,导致本来是为了解决一个问题,要去做新的系统或重构/升级旧的系统,但最后完全脱离了初心。

另外,还有很重要的一点是,一个大架构师是需要给很多人讲解系统设计的,只有理解并讲清了系统设计的目的,团队才能更好的去实现。

2). 系统设计的目标

围绕上面的目的,能不能形成一些可衡量的目标,从而确保最终系统实现和最初的目的不要出现太大的偏差,相信很多人都经历过最终的系统实现和系统设计偏差极大的现象,主要的原因基本都是没有制定衡量系统设计的目标,并在系统设计上让系统能透出这些目标的情况。

3). 围绕目标的核心设计

这步最重要的就是通过设计如何去实现上面的目标,这个环节中技术的专业、视野、全面的考虑、权衡取舍的主观原则、解题的思路,这是形成最后的核心设计的关键。

在核心设计的这个阶段中,会产生一些新的衡量设计最后实现情况的目标,这些也都要增加到系统设计中,确保最后的实现和设计的偏差度是可视的。

4). 围绕核心设计形成的设计原则

有了上面的核心设计后,可以真正的形成一些设计原则,确保后面的子系统/模块的详细设计中能够遵循,并在详细设计中体现出来,这样才能让整个大的系统设计的一致性。

5). 各子系统/模块的详细设计

这个部分我倒觉得难度不会太大,毕竟有了前面的铺垫,就是解好一个更小范围的题,程序员群体在解题能力上通常是不错的,所以我一直觉得数学功底好是程序员的基本,数学就是典型的解题的学科。

ps: 这就是做分享/培训的好处,借机仔细整理自己的碎片,从而形成体系。

关于怎么更好的让大家能掌握并运用这个思考框架,我的想法就是在讲每个步骤的时候讲讲自己当年在这些步骤上犯的错,实际的经验,这样我觉得也许大家以后在做系统设计时就能想起,所以我觉得系统设计这种培训绝对是需要具备大量实际经验的架构师才能做。

在运用部分,采取的方法就是通过互动,让大家按照同样的思考框架来讲自己的所负责的系统,通过互动来更好的彼此对齐,并借此逐渐变成习惯。

上面只是对每个步骤的简单的阐述,后面会再来细节的写写上面的每个步骤内的点。

2 . 知识面拓宽这个倒还好,讲一个全站的系统架构就好,这样可以让知识面从业务架构、到基础技术架构、到涉及到基础设施的部署架构等。

相关文章
|
Java 程序员
收藏!阿里毕玄16篇文章,深度讲解Java开发、系统设计、职业发展
阿里毕玄结合自己的经历深度讲解Java开发、系统设计、职业发展等问题,快来一键收藏吧。
35107 1
|
缓存 NoSQL 关系型数据库
|
存储 机器学习/深度学习 人工智能
深入浅出 AI 智能体(AI Agent)|技术干货
随着人工智能技术的发展,智能体(AI Agents)逐渐成为人与大模型交互的主要方式。智能体能执行任务、解决问题,并提供个性化服务。其关键组成部分包括规划、记忆和工具使用,使交互更加高效、自然。智能体的应用涵盖专业领域问答、资讯整理、角色扮演等场景,极大地提升了用户体验与工作效率。借助智能体开发平台,用户可以轻松打造定制化AI应用,推动AI技术在各领域的广泛应用与深度融合。
23283 1
|
Java API Spring
spring boot中Excel文件下载踩坑大全
spring boot中Excel文件下载踩坑大全
2352 2
spring boot中Excel文件下载踩坑大全
|
消息中间件 架构师 算法
好家伙!全网开源对标P5~P7程序员技术成长路线,阿里这次是真卷
今年的程序员可以说是最焦虑的一个群体了,面试找工作投简历没人理,有面试机会也面试不过,面试进去还干不长...于是,程序员们纷纷直呼:互联网寒冬又双叒叕来了,环境不好努力也没用躺平算了。
391 1
好家伙!全网开源对标P5~P7程序员技术成长路线,阿里这次是真卷
|
消息中间件 大数据 Kafka
别找了,Kafka视频、书、面试题全给你准备好了~~
别找了,Kafka视频、书、面试题全给你准备好了~~
|
消息中间件 Cloud Native 数据库连接
互联网电商大厂的分布式事务使用案例
事务的原子性、持久性可确保在一个事务内,更新多条数据都成功/失败。在一个系统内部,我们可以使用数据库事务来保证数据一致性。那如果一笔交易,涉及到跨多个系统、多个数据库的时候,用单一的数据库事务就没办法解决了。事务的原子性、持久性可确保在一个事务内,更
437 0
|
安全 Java 开发者
并行流ParallelStream中隐藏的陷阱
这篇文章介绍一下日常开发中并行流ParallelStream中隐藏的陷阱,这个问题其实离我们很近,特别是喜欢使用JDK1.8+的流式编程的伙伴,应该会深有感触。标题中所谓的"陷阱",其实并不是ParallelStream自身的陷阱,而一般是开发者错误使用ParallelStream给自己埋下的陷阱。
726 0
并行流ParallelStream中隐藏的陷阱
|
Java
阿里毕玄:来测试下你的Java编程能力
上篇整理了下后面准备更系统化写的Java编程进阶的思路,如果仅看里面的词,很多同学会觉得都懂,但我真心觉得没有多少人是真懂的,所以简单的想了一些题目,感兴趣的同学们可以来做做看,看看自己的Java编程水平怎么样。
19330 0
|
架构师 Java 程序员
阿里P10毕玄:Java大牛程序员的学习成长路线
阿里巴巴P10毕玄:Java大牛程序员的学习成长路线,阿里巴巴基础设施负责人,HSF创始人、T4创始人、HBase负责人。
20750 0