《架构整洁之道》之边界刨析

一个系统的架构是由一系列软件组件以及它们之间的边界共同定义的。而这些边界有着多种不同的存在形式。

一、跨边界调用

在运行时,跨边界调用指的是边界线一侧的函数调用另一侧的函数,并同时传递数据的行为。

二、令人生畏的单体结构

在单体结构中,组件之间的交互一般情况下都只是普通的函数调用,迅速而廉价,这就意味着这种跨源码层次解耦边界的通信会很频繁。

由于单体结构的部署需要编译所有源码,并且进行静态链接,这就意味着这些系统中的组件一般都会以源码形式交付。

三、部署层次的组件

系统架构最常见的物理边界形式:动态链接库。这种形式包括.Net的DLL、Java的jar文件、Ruby Gem以及UNIX的共享库等。这种类型的组件在部署时不需要重新编译,因为它们都是以二进制形式或其他等价的可部署形式交付的。这里采用的就是部署层次上的解耦模式。部署这种类型的项目,就是将其所有可部署的单元打包成一个便于操作的文件格式,例如WAR文件,甚至可以只是一个目录(或者文件夹)。

四、线程

单体结构和按部署层次划分的组件都可以采用线程模型。当然,线程既不属于架构边界,也不属于部署单元,它们仅仅是一种管理并且调度程序执行的方式。一个线程既可以被包含在单一组件中,也可以横跨多个组件。

五、本地进程

系统架构还有一个更明显的物理边界形式,那就是本地进程。本地进程一般是由命令行启动或其他等价的系统调用产生的。本地进程往往运行于单个处理器或多核系统的同一组处理器上,但它们拥有各自不同的地址空间。一般来说,现有的内存保护机制会使这些进程无法共享其内存,但它们通常可以用某种独立的内存区域来实现共享。

每个本地进程都既可以是一个静态链接的单体结构,也可以是一个由动态链接组件组成的程序。在前一种情况下,若干个单体过程会被链接到
同一个组件中。而后一种情况下,这些单体过程可以共享同一个动态链接的可部署组件。

六、服务

系统架构中最强的边界形式就是服务。一个服务就是一个进程,它们通常由命令行环境或其他等价的系统调用来产生。服务并不依赖于具体的运行位置,两个互相通信的服务既可以处于单一物理处理器或多核系统的同一组处理器上,也可以彼此位于不同的处理器上。服务会始终假设它们之间的通信将全部通过网络进行。

文章目录
  1. 一、跨边界调用
  2. 二、令人生畏的单体结构
  3. 三、部署层次的组件
  4. 四、线程
  5. 五、本地进程
  6. 六、服务