分层架构

一个优秀的系统架构,最重要的是其“有序性”。分层架构方法是解决有序性最为广泛的架构方式。如网络ISO模型,在架构设计上称之为经典。应用层、表示层分别处理的业务是什么,两层之间的数据通过何种介质、接口进行连接,定义的十分清楚。但架构层次的过于细分,也会增加应用的复杂度,所以,在出现了一些反架构的行为,将一些层进行整合合并,形成了广泛使用的TCP/IP模型。

系统分层架构方案的步骤包括:

  1. 设计有限的N层;
  2. 定义为N+1层提供的服务,将子任务委托给N-1层;
  3. 可能需要N层其他模块的协作。

良好的分层实践包括:

  1. 将实体概念抽象为层。比如标准互联网接入程序中,按照信息流分层为用户、网络连接、路由及转发、程序逻辑处理、数据校验及存储。
  2. 确定抽象层数。层数过多导致不必要的开销,过少则结构不清晰。先尽可能的抽象,然后再决定将相邻的特定的合并为一层。
  3. 为层命名。可以为层取一个简单扼要的名字,是层划分合理性的重要证明。不要使用第0层,逻辑1层这样的通用字眼,而应该用该层提供的服务内容进行命名。
  4. 服务通讯规范。各层应该仅调用连接相邻的层,不能跨层调用。

关于服务层之间的通讯,在实际工作中常出现反模式。比如常见的系统架构图,会画成三横一纵的架构,纵轴常常为了实现管理功能、刻意的避免业务校验、消息中间件等,直接绕过业务横轴模块,与底层模块进行直接交互。

最为糟糕的设计下层再次对上层进行依赖,形成数据流打结式流动。该反模式一般是借用重用代码之名。

分层架构优势:

  1. 各层可复用;
  2. 抽象层功能单一,可标准化;
  3. 依赖关系明确;
  4. 层可更换

缺点:

  1. 单层异常可能导致整个系统奔溃;
  2. 逐层传递引发的效率问题;
  3. 不必要的工作;包括跨层之间调用需要进行的逐层代理、异步回调机制建设等。
  4. 实际层级拆分难度。层级粒度与耦合、内聚、可重用性、易修改性等多项指标相关,在拆分决策上难度颇大,在执行过程中也可能出现邻层之间再合并、再拆分的反复重构行为。

软件架构认知

在软件研发领域,软件专业的职业发展路劲一般是软件工程师、高级工程师、架构师、高级架构师。

在各个职业阶段,对软件知识体系及架构的认知具有较强的偏向性:

  1. 软件工程师(互联网方向)。架构就是了解MVC,能够对前端、后端,接口进行定义,对接。
  2. 高级工程师: 架构就是设计模式,将软件设计模式的思路,扩展到系统之间的调用。能够通过Adapter、Proxy等方式,封装外部系统的调用。
  3. 架构师: 架构就是中间件。应用系统、缓存、关系型数据库、消息中间件,通过合适的方式,将他们连接、组装在一起。
  4. 高级架构师: 架构就是抽象。网络iSO、TCP/IP是分层架构,数据流处理应该用管道架构更合适,MVC是分层架构,也是交互式系统。不良的企业系统架构也是一个架构,泥团架构。

后续在专栏将以高级架构师的视角,来对常用的抽象架构进行剖析,比如分层架构,可交互架构,分布式架构,看板架构等。