11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

聊聊系统设计的套路

  • 2019-08-08
  • 本文字数:1797 字

    阅读完需:约 6 分钟

聊聊系统设计的套路

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


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


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


  1. 通过这堂课掌握一个思考框架,知道做系统设计的套路,系统设计不是简单的上来就画画框什么,必须按照一定的套路才能更好的进行系统设计;

  2. 拓宽知识面,系统设计中非常重要的是考虑的全面性,以更好的进行权衡取舍,所以能不能借助系统设计培训来拓宽知识面非常重要。


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


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


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


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


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


1). 系统设计的目的


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


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


2). 系统设计的目标


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


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


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


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


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


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


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


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


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


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


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


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


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


本文转载自公众号 HelloJava(ID:hellojavacases)


原文链接


https://mp.weixin.qq.com/s/n25LljA5P4JgIzAQxNVi1g


2019-08-08 08:003152

评论

发布
暂无评论
发现更多内容

如何推动与影响中型前端团队的成长

堂主

研发管理 大前端 团队建设

TOTO 2020再次荣获iF、红点两项国际设计大奖

极客编

MySQL数据类型DECIMAL用法

Simon

MySQL

想退休,可能没机会了

池建强

读书感悟

CDN云课堂 | EdgeRoutine技术专家教你把JS代码跑到CDN边缘

阿里云Edge Plus

Java CDN edge

CDN百科 | 最近,你的APP崩了吗?

阿里云Edge Plus

CDN

可视化 Tekton 组件 Tekton Dashboard

郭旭东

Kubernetes cicd

延时任务的几种实现方式

郭儿的跋涉

Java 延时任务 延时消息

使用jdbcSstoragerHandler 处理mysql、oracle 、hive数据

飞哥

GrowingIO 微服务 SaaS 与私有部署运行实践

GrowingIO技术专栏

大数据 微服务 SaaS

DD 测试linux性能

HU

KubeFATE:在Kubernetes上部署联邦学习平台

亨利笔记

人工智能 学习 FATE KUBEFATE

CDN百科 | 假如没有CDN,网络世界会变成什么样?

阿里云Edge Plus

视达荣登ChinaBang Awards 2020智慧零售榜Top10

极客编

CDN云课堂 |可编程CDN – EdgeScript应用场景、语言速览和实操演示

阿里云Edge Plus

用SpreadJS实现在线Excel的录入与展示,提升企业医保信息化服务水平

葡萄城技术团队

SpreadJS 医保信息化 在线excel

我常用的在线工具清单

彭宏豪95

效率 效率工具 工具

交易上链——中心化数字资产交易所的完美解决之道

MaxHu

区块链 智能合约 数字货币 去中心化网络 数字资产

基于XGB单机训练VS基于SPARK并行预测(XGBoost4j-spark无痛人流解决方案)

黄崇远@数据虫巢

学习 算法

由丰巢快递柜引发的思考

Neco.W

创业 思考 丰巢

聊聊Serverless

kimmking

《Linux就该这么学》笔记(二)

编程随想曲

Linux

算法工程师的发展路径

薛梁Lucien

谈谈控制感(2):怎么让我们更健康

史方远

个人成长 心理

Java 编程基础

michaelliu

工作两年简历写成这样,谁要你呀!

小傅哥

面试 小傅哥 简历优化 找工作

多个 SSH keys 的配置,方便 Git 对不同仓库的使用与管理

与光

git GitHub SSH

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (四)关于单元测试的常见错误观念和做法

编程道与术

Java 编程 软件测试 TDD 单元测试

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (五)第一个单元测试

编程道与术

Java 编程 软件测试 TDD 单元测试

通过一个聊天应用学习 Deno

寇云

typescript 后端

智浪

Neil

后浪 智能时代 智浪

聊聊系统设计的套路_文化 & 方法_BlueDavy_InfoQ精选文章