https://c4model.com/

System Context

  • 方块指代的是软件系统
  • 蓝色表示我们聚焦的系统,也就是我开发的系统(也可能是我分析的系统,取决于我是谁)
  • 灰色表示我们直接依赖的系统
  • 虚线框表示的是企业的边界

Container

借用了进程模型,代指有自己独立进程空间的一种存在。不管是在服务器上的单独进程空间,还是在浏览器里的单独进程空间,只要是单独的进程空间就可以看作一个容器。

C4 模型 - 图1

Component

C4 模型 - 图2

Code

UML里的类图之类很细节的图。
一般是不画的,都是代码生成出来。除非非常重要的且还没有写出代码的组件才画代码图。

企业全景图

企业的全景图,可以帮助理解局部的正确定位以做好局部设计为全局优化服务。比上下文图(system content)更丰富的系统级别的表达。不像上下文图只关注聚焦系统和它的直接关系,连一些间接相关的系统都会标示出来,那些系统的用户以及用户之间的关系也会标示出来,只是内部的用户会用灰色标记。

动态图

不同于其他表达静态关系的图,它是用来表达动态关系的,也就是不同的元素之间是如何调用来完成一个业务的。所以动态图不仅仅适用于一个层面上,它在系统级、容器级和组件级都可以画,表达的目标是不一样的。
C4 模型 - 图3

部署图

图上最大的的实线框不同于虚线框,它表达的是数据中心,当你开始考虑异地载备的时候它就有了意义。数据的同步、实例的数量都会影响部署图的内容。部署图基本都是容器级的,它能很好的表达出来容器到底部署了几个实例,部署在什么样的操作系统上,一个节点部署了几个容器之类,我们在实际使用中,发现需要考虑的信息太多,自己就抽象出了类似于亚马逊上实例规格的Small、Large之类的术语来表达机器配置,增进了开发和运维之间的交流准确性。
C4 模型 - 图4