分层架构

一个优秀的系统架构,最重要的是其“有序性”。分层架构方法是解决有序性最为广泛的架构方式。如网络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. 实际层级拆分难度。层级粒度与耦合、内聚、可重用性、易修改性等多项指标相关,在拆分决策上难度颇大,在执行过程中也可能出现邻层之间再合并、再拆分的反复重构行为。

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据