从程序员往架构师转型的路上,蔡学镛老师总结的“四维架构设计方法论”对我很有帮助,让我对架构设计有了更立体化、系统化的认知,现将学习心得分享出来供须要的小伙伴参考。html
这套方法论经过空间(X、Y、Z)三个维度及时间T维度将问题域解构成能够轻松应对的小方块,分而治之。同时,空间(X、Y、Z)三个维度联动,专门为单个维度解决不了的问题提供解决方案。时间 T 维度将问题分解到一个时间范围内,分步骤按节奏逐一解决。多维度、立体化、分层次、动态演进,这是我对这套方法论特色的总结。接下来,让咱们进入这个四维的架构时空一探究竟!前端
图1 四维座标系统程序员
先后端维度(X1 … X7)面试
先后端维度被分解为交互、业务、领域、资源四大层,其中业务能够细分为应用X2、框架X3,领域能够细分为服务X4、核心X5,资源也能够细分为代理X6、数据X7,共分为七个层次。服务X4能够实现API,若是公开,就是开放接口,调用服务层的接口,一般须要受权。代理X6能够实现SPI,隔离耦合,避免核心X5 依赖特定的外部系统或数据库。每一个层次作到高内聚,层与层之间作到低耦合。数据库
图2 X轴分层结构后端
在系统实现过程当中,能够综合考虑现状,X2应用和X3框架能够不分拆,X4服务和X5核心能够不分拆,待后续时机成熟能够再重构分层,这样变动范围仅在内部。缓存
表2 X轴七层架构模型及其定位架构
分层类型框架 |
分层名称前端优化 |
颜色 |
代号 |
分层定位 |
交互 |
界面层 |
红 |
X1 |
界面更像是用户的延伸,而非应用的延伸。界面可被视为用户代理。根据用户喜爱、语言、平台(手机、电脑、平板等)开发各类用户界面。 |
业务 |
应用层 |
橙 |
X2 |
一个应用能够有多个界面,根据市场需求,开发各类应用,并以接口的方式展示。 |
框架层 |
黄 |
X3 |
将经常使用的应用流程设计成框架,后续开发同类型应用时,只要经过参数或者 DSL,就能够轻易订制应用,减小开发成本。框架也能够用接口的方式开放让外部调用。 |
|
领域 |
服务层 |
绿 |
X4 |
服务层针对领域对象进行操做,并提供弹性的调用接口。服务层接口一般数目很少,但每一个接口一般参数至关多。服务层没有状态,也不作缓存。 |
核心层 |
蓝 |
X5 |
核心层反映领域模型,核心层的接口基本就是对此领域模型进行操做。创建领域模型,一方面帮助接口设计,另一方面帮助数据存储设计,梳理出弹性的存储方式。 |
|
资源 |
代理层 |
靛 |
X6 |
具有下列做用:数据代理,表明外部系统或数据库;缓存,为了效率或提升可用性(当外部系统掉线);数据模块,支持读写分离;转接或转发,转接到外部系统,转发到日志系统;数据备份系统(经过事件钩子);热备系统接入。 |
数据层 |
紫 |
X7 |
数据是公司最重要的资产。根据数据的特性,数据库能够是:关系式数据库;列数据库;Associative DB;Key-Value;文件数据库;日志。 |
业务维度(Y1 ... Yn)
从业务维度进行划分,按照业务类型对系统进行分类。业务系统的划分更多依赖业务领域的知识,这个维度设计最经常使用的方法论就是领域驱动设计DDD。
当Y轴的一个业务系统须要调用Y轴的另一个业务系统时,兼顾效率和耦合,这套架构设计方法论给出了具体的架构原则:
图3 Y轴不一样业务系统之间调用关系
系统维度(Z1...Zn)
该维度主要关注软件、容器、运行时、操做系统、虚拟机、到硬件等这些与业务无关系统的架构。Z轴的系统能够分别用于前端优化、应用优化、平台优化、资源优化等层面。
图4 Z轴分层结构
时间维度(T1 … Tn)
对于一个新产品来讲,架构不是一次成型的,从初始到成熟要通过一个不断演进的过程。对于一个已有产品来讲,架构的优化也是要结合实际状况分步骤实施。
除了技术上的考虑以外,咱们还须要考虑市场及投资等方面的状况。一般,在研发的初期,产品自己的定位还不太清晰,须要快速地迭代投放市场获取先发优点,以及验证想法,不断地明确产品的定位。这个阶段产品需求变更很是频繁,许多架构的驱动因素还没有明确,若是过于关注架构,那产品推向市场就会遥遥无期。随着产品定位的逐步清晰,架构的驱动因素及约束条件都逐渐浮出水面,这个时候架构设计的重要性就显现出来了。另外,咱们还须要根据投资预算来调整架构设计。若是投入比较充裕,那咱们就能够投入更多的人力来提早将架构驱动因素研究清楚,甚至能够针对不肯定的约束提供多套备选方案。
今天先分享到这里,后续我还会继续分享各个维度的架构设计心得,请感兴趣的小伙伴记得关注哦!坚持原创写做不易,若是你以为有价值,麻烦动动手指点个 「赞」,老兵哥会更有动力坚持。另外,我还会持续分享职业规划、应聘面试、技能提高、影响力打造等经验,关注 「 IT老兵哥 」,赋能程序人生!
近期文章索引: