架构实战案例解析_21_20_从务实的角度给你架构设计的重点知识和学习路径
你好,我是王庆友。
那到目前为止呢,我们已经讲完了业务架构和技术架构的相关内容。
相信你现在对架构有了更深入的理解。
那学习架构要掌握的东西很容,那是不是开始担心自己一辈子都学不完呢?其实我们也不需要一下子铺开学习所有的架构技能,重要的呢是把控好学习的节奏。
那适当的时间学习适当的内容。
这里呢可以结合实际工作,一步步的成长,是今天天一讲讲想想你提供一些架构,学习的重点方向和路径建议。
那在技术架构篇,我针对系统的高可用、高性能、可伸缩和低成本,给你介绍了很多的架构设计原则。
那不同的原则呢它对应不同的架构目标。
重里呢我把这些架构原则和目标绘制成一个表格,来帮助你更直观的了解他们。
你可以参考一下文稿中的图片。
那限于篇幅呢,这里我挑选几个原则来重点说一下。
那首先是可回滚和可禁用原则,那可回滚原则,它确保了系统可以向后兼容。
当系统升级出现问题的时候,我们可以回滚到旧版本,保证系统始终可用。
不过有些时候啊系统的回滚很困难。
那举个例子,如果数据库的新旧表结构差异很大,那我们除了回滚代码,还要回滚数据库,这样操作起来往往需要很长时间,系统的可回滚性就比较差。
所以在设计时,我们要尽量考虑数据库修改和代码的兼容性,并提前做好系统回滚的预案。
那可禁用原则要求我们提供功能是否可用的配置。
在系统出现故障的时候,我们能够快速下线相应的功能。
那比如说新的商品推荐算法有问题,我们可以通过程序开关禁用这个功能。
那第二个原则呢是使用成熟的技术。
那作为开发人员,我们都很想尝试新技术,但我们知道新的技术还没有经过充分的验证,它往往会存在很多隐藏的bug.所以作为架构师,我们在做方案设计的时候,一方面要从系统的稳定性出发,尽量选择成熟的技术,避免因为新技术的坑而导致系统的可用性出现问题。
另外一方面,选择成熟的技术,也意味着选择团队熟悉的技术,这样学习成本低、落地快。
那第三个原则是使用同质化的硬件。
我们在做硬件选型的时候,要尽量选择相同的硬件和相同的配置。
那比如说对于服务器,我们选择同样的CPU和内存配置,以及同样的操作系统版本。
这样我们更加容易通过统一的自动化脚本对节点进行配置,对系统做水平扩展时也会更加容易好。
这些架构原则都是我们要深入理解,并在实践中要逐渐运用和掌握的那接下来呢我说一下架构的具体落地过程,帮助你更好的理解架构师的职责和技能要求。
那简单的说,架构师的职责就是负责设计架构并跟踪架构的实施过程,解决过程中出现的疑难问题,确保架构能够顺利落地。
那在第一讲的架构的本质中,我和你介绍过架构师的能力模型,比如说抽象思维、平衡、取舍、沟通能力等。
那那接来呢我就结合架构的落地过程和架构构的的力模型型来具体说一下架构师是如何开展工作的那架构师的工作从接到项目需求或者说他自己主动识别系统当前的问题开始,他的工作过程呢可以分为三个阶段。
那第一个阶段呢,架构师要和产品经理或者业务人员沟通了解业务和开发人员沟通了解系统。
那第二阶段呢我们在了解完系统和业务后,架构师接下来就要设计具体的方案。
那方案设计呢要分三步骤。
首先呢架构师针对业务需求分解相应的功能呢,到现有的各个系统,把系统的各个部分呢能够串起来。
那这个第一版的方案,它至少要能够在表面上解决当前的问题。
这样呢我们就得到一个草根的方案。
然后呢架构师要进一步思考业务的本质,对现有的草根方案进行升华。
比如说通过抽象让方案更加通用,可以解决多个类似的或者潜在的业务需求。
这样呢草根的方案就变成了一个高大上的方案。
这里面呢很考验架构师,透过问题看本质和抽象总结的能力。
那接下来呢基于现有的各项约束,比如说时间、资金、人员、技术能力等因素,架构师呢要对这个方案进行简化,把高大上的方案变成一个接地气的方案,以最小的代价实现最大的价值。
这里呢很考验架构师的平衡取舍能力。
那方案设计好以后呢,最后阶段我们还要进行宣讲,架构师需要说服相关的人员接受方案。
并且在后续的方案执行中呢,负责跟踪架构的落地。
如果过程中有疑难问题,架构师还要协助解决。
所以我们可以看到架构师在设计方案的时候会有个反复迭代的过程,最终呢才能得到一个简约而不简单的方案。
并且在方案设计的前后,架构师还需要和大量人员进行沟通,这些都需要架构师具备宽广的知识面和良好的沟通能力。
那么架构师都需要掌握哪些具体的技能呢?这里我给你提供了一个简化的架构师技能图谱,可以帮助你循序渐进的学习这些架构技能啊,你可以到文稿中去看一下。
首先,作为架构师,我们需要了解计算机应件和操作系统的相关知识,他们是负责具体干活的。
如果我们对他们有深入的了解,我们就能知道系统底层它是怎么执行的那我们在做具体设计的时候,我们就可以做各种的优化。
那比如说我们在设计IPC通讯框架的时候,可以通过IO、多路复用和内存零拷贝技术来提升服务端并发处理请求的能力。
那在这个之上呢,就是具体技术相关的内容。
那由浅到深可以分为三个部分。
第一个部分呢是开发相关的基本知识,比如说数据结构和算法啊,具体的某一门开发语言,常用的设计模式以及开发框架等等。
这样呢你就具备了基本的开发能力。
那第二部分呢是各种中间件知识啊,常用的中间件,包括数据库缓存、消息系统、微服务框架等等。
对这些核心中间件,我们不但要了解具体的用法,还要独立理解它们的适用场景。
这样呢你就能写出高效健状代码,能要独立承担一个子系统的开发。
那继续往下深入呢,你还要学习分布式系统相关的知识,包括底层网络和分布式通信技术。
这样呢你就可以了解系统,它是怎么连接在一起的那除此之外呢,你还了解一些周边的系统,比如大数据平台、运维监控系统、接入系统等等。
这样呢你就可以了解系统端到端的运行过程,从技术架构上保证系统的稳定可用。
那掌握了这些技术能力之后,你就可以逐渐往全面的架构式发展了。
比如说你可以结合业务来设计,应用体系,包括数据模型设计和服务设计。
那你可以了解各种应用架构模型,知道他们优缺点和适用场景。
那能够定义一个良好的应用依赖关系。
在网上呢就成为业务领域专家。
在这个阶段呢,你已经知道如何通过业务的拆分,实现业务实际的解耦,如何通过业务抽象,实现业务的扩展和重用。
那到最后呢,你已经对各种架构设计的目标和架构原则都非常了解。
那直到面对一个具体问题,大致都有哪些解决手段。
然后呢,通过大量的实践,你能够把技术架构、应用架构和业务架构呢融会贯通,并针对具体的情况,对架构的各个目标做良好的平衡。
当然你作为架构师,还需要和一系列人员打交道。
这时候呢就需要你培养更多的软技能,能把复杂的架构问题以简单的方式表达出来。
那现在你已经清楚了,作为一个架构师,他需要具备什么样的知识结构?那如果你想成为一名架构师,那在不同的成长阶段呢,你需要学习不同的内容。
这里我以java为例,进一步给出学习的重点内容,给你提供更具体的参考。
第一个阶段呢就是初级开发阶段。
那在这个阶段,你需要深入学习数据结构和算法,并且一定要深入掌握单体应用的分层架构。
因为这是架构设计的基础。
另外呢,对JDK的一些核心类,你不能仅仅停留在使用层面,而是要深入去读它的源代码,了解它的内部设计。
这样你就知道如何开发一个高效的程序,如何进行各种代码级的调优。
那第二个阶段呢是高级开发阶段。
在这里呢首先你需要非常了解设计模式,那每个设计模式都可以看出这个小型的架构设计。
这里面有很好的设计原则和抽象思维。
你在做系统设计时可以借鉴他们。
然后呢,你需要非常了解核心的中间件,包括DBV微服务框架缓存和消息系统要清楚的了解他们的适用场景。
比如说消息系统用于消分解耦和异步等等,知道如何对他们进行调优以及了解。
他们都有哪些常见的坑等等。
这些核心中间件是我们做技术选型的基础。
那同时呢你要深入掌握数据库设计和服务结构设计,了解他们的最佳设计实践。
他们承载了系统核心的业务数据和业务逻辑。
那最后呢你需要进一步的研读源码。
那源代码它是活的教材,包含大量使用的设计原则和技巧。
这里我建议你选择一些开源的开发框架和RBC通信框架,去深入了解它们的内部实现原理。
比如spring和netty.那第三个阶段呢是架构设阶阶呢,你成为一个技术专家啊,首先呢你需要深入了解网络通讯,比如说网络的分层和HTTPTCP协议,还有各种常见的IPC通讯框架,了解它们的特性和应用场景。
这样你在设计一个分布式系统时呢,就能够进行合理的技术选型。
然后呢,你还去了解底层系统,包括JVM操作系统和硬件原理,再往上延伸到系统的各个接入部分,了解常见的负载均衡特性和算法。
这样子呢你就可以对系统整体一个透彻的了解,能够把各个环节很好的衔接起来。
这里呢我特别建议你去读下java和JVM的规格说明书,了解java的一个底层设计。
最后呢你需要熟练掌握各种设计工具和方法论,比如领域驱动设计和UML.那了解常用的架构设计原则,这样呢你就能够结合业务选择合适的应用架构和技术架构并进行落地。
在这一阶段呢,对你总的要求就是能够从端到端的角度进行业务分析和系统设计。
第四阶段是大师阶段。
在这个阶段呢,你需要对价格的各个目标都非常了解。
那除了业务系统设计,你还要对运维和监控有深入的认知。
同时呢需要了解业界的架构,实践跟踪技术的最新发展趋势。
如果出了一下新技术,你可以比较准确的对它进行定位,把它呢纳入到自己的能力体系当中。
另外在这个阶段,相信你也通过大量的实践,已经培养了很好的软技能,比如沟通能力、项目管理能力等等。
最后呢你就能做到技术和业务的融会贯通,可以平衡各种架构目标设计非常实用和接地气的架构,并保障它的顺利落地。
那你可以发现架构式的能力,它是个逐步提升升的过程。
那么从架构式的境界来看,由浅到深可以分为四层。
第一层呢是看山不是山,第二层呢看山是山,第三层是看山,不是山,第四层是看山还是山,这是一个螺旋式上升的过程。
那究竟什么意思呢?在你刚接触项目的时候,你对业务还不太了解,经常呢会被业务方冒出的术语啊,弄得一愣一愣的那如果说把现有的问题,比如说山,那就是能够成林侧成峰,你根本摸不透。
此时呢看山不是山。
那经过业务梳理和深入了解系统以后,你就能够设计一个简单的方案。
那各个系统的起题能解决当前的问题。
对,当前这个山呢能够看清楚全貌,这个时候就做到了。
看山是山,但这样的方案设计呢弄得设计不够,只能解决表面问题。
那碰到其他类似的问题或者问题稍会变形,系统呢还需要重新开发。
那然后呢通过进一步抽象,你能够发现问题的本质,明白了原来这个问题是共性的,后续还会有很多类似的问题。
那你对设计呢进行总结和升华,得到一个通用的方案。
它不光能解决当前的问题,还可以解决当前的问题。
这个时候呢你看到的已经是问题的本质,看三不是善。
但这样的方案呢往往会过度设计,太追求通用化,会创造出过多的抽象概念,理解起来和实现起来都特别困难,过犹不及。
最后呢回到问题的本身,你能够去除过度的抽象,给出的设计呢解决明了增值一分显肥,减脂一分呢显瘦。
既能够解决当前的问题,又保留了一定的扩展能力。
这个时候呢,问题还是那个问题,三呢还是那个三这样的方案呢?在了解问题本质的基础上,同时考虑了现状,评估到未来不多做也不少做。
你可以对照这四个境界来评估你当前的架构能力,不断的提升对自己的要求。
最后呢我对今天的内容做个总结。
今天我汇总了常见的技术架构设计原则,他们都是实践的总结。
你在做架构设计的时候呢,可以参考这些原则,在项目中采取相应的手段来实现架构目标。
那值得注意的是在做具体的架构设计的时候,你需要对设计进行反复的迭代,最终呢得到一个高性价比的方案。
那针对架构师的成长,我也给你提供了相应的知识结构和可行的进阶之路,希望你能够一步步成长,最终实现自己的理想。
读万卷书,行万里路,万构思的成长尤其如此。
架构呢它没有速成之路。
我们先要读万卷书,学习各种架构需要的技能,然后行万里路,通过大量的实践,把架构知识变成架构能力。
最后给你留条思考题一个架构方案。
他从调研到设计架构落地,你觉得最困难的地方是什么?欢迎在留言结合我互动,我会第一时间给你反馈。
如果觉得有收获,也欢迎你把这篇文章分享给你的朋友,感谢收听,我们下一期再见。