转载

架构金字塔

最近在思考于如何更好的设计系统架构,以及如何对系统的架构进行守护。对于这个问题来说,我想到的第一步是:分解大泥球。于是乎,问题的第一步就是,分解架构设计的所有概念。第一个产物便是​:架构金字塔。虽然不是非常合适,勉强用这个名称吧。

架构金字塔,即把软件架构按照不同的粒度进行分组。通过分组的细分,我们能有针对性地对系统架构,进行更好的管理和设计。

架构金字塔

一个软件系统是由一系列的应用组成的,而一个应用则由一系列的模块组成,进一步的模块是由代码组成的。举个示例,一个现代的系统是由一系列的后端服务、客户端应用组成的;拆解开一个微服务,则是由一系列的模块组成的……。

结合康威定律,对于复杂的软件系统来说,其组织结构需要与架构模式对齐。因此,我们可以看到对于大型系统来说,它的组织模式是以类似的方式展现。不同层级的人员,需要对不同的分组负责、守护,因此便有了:

  • 某一应用中的某一部分的核心开发人员(关注于代码级别的守护)
  • 某一应用的核心设计者(关注于模块间守护)
  • 系统的核心实施者(关注于应用间的守护)
  • 系统的核心架构师(关注于系统的设计)

在《前端架构:从入门到微前端》一书中,我们提出了设计架构时所需要的层次要素,便有了架构金字塔。

架构金字塔

为此,我们划定了架构的四个层级 + 基础设施层:

  • 系统级,即整个系统内各部分的关系,诸如于如何通讯,以及如何与第三方系统如何集成等。
  • 应用级,即单个应用的整体架构,及其与系统内单个应用的关系等。
  • 模块级,即应用内部的模块架构,如代码的模块化、数据和状态的管理等。
  • 代码级,即从代码级别保障架构实施。

:图中的服务导向架构出自于《演进式架构》,包含了 SOA、微服务架构及基于服务的架构等;而聚合导向架构指的则是客户端的架构模式,客户端以聚合来展示一致性,诸如前端领域的微前端、移动应用的插件化等。

这种架构模式,特定符合我们日常设计架构的特点: 先自顶向下设计,再自底向上实践 (适应)。这部分的详细内容可以见: 构建质量可信的软件系统 (https://www.phodal.com/blog/build-trusted-software-system/)

战略设计与战术设计

于是乎,基于架构金字塔,我们有了系统架构的战略设计与战术设计的完美结合(来源于 DDD 的设计思想)。便有了基于演进式架构的架构设计的模式:

架构金字塔

在上图中:

  • 战略设计 ,在组织架构下,借鉴于演进式架构的三大原则,我们有了指导架构设计的三大思想:适应度函数、增量变更、架构耦合。它用于指导架构师如何进行系统架构设计。
  • 战略实施 ,结合组织环境与人员能力,挑选、设计出基本的系统架构模式。诸如于系统的架构模式、部署流水线、持续交付等。
  • 战术设计 ,挑高、设计出适合于应用、模块级别的技术设计方案。诸如于采用领域驱动设计(DDD)的思想,来驱动出更好的系统架构。
  • 战术实施 ,对系统进行最后的设计,选择适合于组织的技术实施方案与协作方式。

其与架构金字塔的对应关系:

  • 战略设计 <-> 架构原则
  • 战略实施 <-> 系统级架构
  • 战术设计 <-> 应用级、模块级架构
  • 战术实施 <-> 代码级架构

你说呢?

原文  http://www.phodal.com/blog/architecture-pyramid/
正文到此结束
Loading...