1.4 “5视图法”架构设计
前面的讲解让大家明白了什么是架构设计,以及如何成长为合格的架构师,乃至顶级的架构师。然而,如何进行架构设计,特别是,如何进行高质量的架构设计呢?以往在进行架构设计的过程中,我们遇到的最大问题是架构设计要做的工作太杂太散,方方面面的内容都要涉及。既要整理需求、规划业务架构,又要技术选型、制订技术架构,甚至还要考虑系统性能、安全性、可靠性等非功能性需求,最后还要落实到物理架构。
要涉及那么多内容,很容易让人东一榔头西一棒槌,乱了章法与思路,导致架构设计的质量不高,设计不够全面,遗漏许多关键的内容,也未能提前识别关键风险。这样的架构设计就无法发挥应有的作用。
怎样做高质量的架构设计呢?我们需要按照一定的章法,一步一步地进行,以避免遗漏关键内容。同时,在这个过程中,将项目可能出现的风险在架构设计的各个步骤中一个一个地排除。
此外,人的脑容量是有限的,不可能一次性地同时将各个方面的问题全都考虑清楚。当面对复杂问题时,最有效的解决思路就是“分而治之”,也就是将复杂问题划分为多个相对独立的问题,分别去考量、去解决。这样,要思考的问题就得到了简化,人就能够思考清楚,进而解决问题。而这种“分而治之”的思想同样体现在了架构设计上。在架构设计时,可以运用“5视图法”,将要设计的复杂系统从5个不同的维度、用5个不同的视图进行分析思考。只要把这5个维度的问题都思考清楚了,做出来的架构设计就是全面的、高质量的。
那么,具体是哪5个视图呢?那就是逻辑架构、数据架构、开发架构、运行架构与物理架构。
在使用“5视图法”进行架构设计的时候,不是5个视图同时进行的,而是按照一定的顺序。这个顺序不是绝对的顺序,不是“只有上一个步骤完成了,才能开始下一个步骤”的顺序,而是“从不同时间点开始并行进行”的顺序。
使用“5视图法”进行架构设计,通常都是从逻辑架构开始的,因为所有的架构设计都应当以需求为依据。也就是说,在架构设计中做出的所有决策,都是基于对用户需求的考量。在这个过程中特别忌讳“经验主义”,即基于上一个项目的经验去做决策。而逻辑架构的设计,就是对当前用户需求的梳理,确认当前系统应当包含哪些功能。
接着,在逻辑架构的基础上,进行数据架构与开发架构的设计。数据架构就是对业务流程的梳理,即功能性需求的梳理。一个系统对功能性需求的梳理是一项工作量非常庞大的工作,但在架构设计阶段,往往是“抓大放小,抓住主要问题”。而“数据”就是功能性需求的主要问题,所有的业务流程都是围绕着它展开的。只要抓住了数据结构,及对这些数据架构的处理,就抓住了功能性需求的核心,这就是数据架构。
从逻辑架构到数据架构是一个由粗到细的过程,而从数据架构到开发架构则是一个由细再回到粗、总结归纳的过程。通过对逻辑架构与数据架构的分析,我们对这个复杂的系统有了比较全面的认识,那么在开发架构这个阶段,就可以开始总结归纳共性,对整个系统进行规划,从更高的层次进行规范,为开发团队大规模地入场参与设计开发做好准备。
在分析清楚功能性需求以后,架构师就可以着手那些关于性能、响应速度、吞吐量等非功能性需求的分析,即运行架构的设计。以往运行架构的设计特别容易被忽略,但在未来互联网越来越严苛的运行环境中,它将变得越来越重要。
最后,所有对性能、安全、可靠性的设计调优,最终都将落实到服务器节点、资源设备、网络拓扑等物理设备上,这就是物理架构的设计。需要多少物理设备、多少网络带宽、各系统组件如何部署,都是在物理架构这个阶段落实下来的,它是对运行架构的进一步细化与落地。
这就是采用“5视图法”进行架构设计的整个过程。在接下来的章节中,我们看看具体应该如何采用“5视图法”进行架构设计。