前言
作为一个架构师,主要的职责就是做全局的技术规范,建立同一的规范,建立完备的基础构建,这一切都要落地,也要让一个项目里面的产品、开发都建立共识,明白架构的设计理念。
而架构图就是这样一个工具,可以很好地表达出架构师的设计,让项目内的人都能达成共识,并且按照设计的架构进行开发。
架构图
架构图不是一张图一个角度就能描述清楚的。4+1视图是一种经典的视图模型,包含场景视图,逻辑视图,物理视图,处理流程视图和开发视图,5个视图结合起来才能反映整个系统的架构。这里就不具体介绍4+1视图了,下面会介绍C4模型,一种更直观,更容易理解的模型。
这里明确下我们画架构图的目的是为了让清晰的展现我们系统的设计,让组内人员更容易沟通,架构图也分很多种信息,不同的人可能需要不同的角度,所有我们画哪一种图,首先得明白什么图是给什么人看的,搞清楚目的了,那我们应该怎么去画了,一个好的架构图应该是可以自描述的,让人一看就懂,如果不是,那就是没有画清楚。
C4模型包含4种核心图和3张扩展图可以让我们更容易地画出更好的架构图
C4
C4(https://c4model.com),从上图中可以看到是由容器、组件和代码描述一个系统的静态结构。一个系统由多个容器组成,一个容器由多个组件组成,一个组件由多个代码组件。
System Context diagram(系统上下文图)
系统上下文图是对一个软件系统很好的一个开始的图,可以看到整个系统的全貌。该图是可以给非技术人员、技术人员和外部人员看的。该图画法也很简单:把你自己的系统放在中间,然后被用户和其他需要交互的系统围绕在你系统身边就可以了。
上图蓝色的就是一个互联网银行系统(Internet Banking Systen)放在中间,上面是用户(Personal Banking Customer)使用互联网银行系统,银行系统又调用外部的大型银行系统,并调用邮件系统向用户发送邮件。
Container diagram(容器图)
有了上下文图,我们可以知道我们的系统和外部系统以及用户是怎么交互的,接下来就是需要把我们的系统进一步展开,相当于是把上一张图中互联网银行系统进行展开,这就是容器图,展现了软件系统的整体架构以及职责的分布,同时也显示了主要技术的选择以及容器和容器之间,容器和其他系统之间的交互方式。
该图是可以给内部技术人员、外部技术人员和运维人员看的。
Component diagram(组件图)
组件图就是把一个容器中的组件进行展开,容器是由哪些组件组成的以及组件之间的关系。
这个图主要是给内部技术人员看的。
Code(代码)
每个组件都有实现的代码,可以使用UML类图和展现。该图就是UML图了,主要是给内部技术人员看。
还有三种扩展图可以从其他视角对系统进行展示:
System Landscape diagram(系统全景图)
这张图和系统上下文图差不多,不过比系统上下文更详细,展示了一个企业里面软件系统的集合。这样更容易理解企业各个系统之间的边界,从IT的视角展示了系统的全景。
Dynamic diagram(动态图)
动态图很像UML的时序图,表达系统元素之间的调用关系展示你的用例和故事。
Deployment diagram(部署图)
部署图是基于UML部署图的,展示了容器是怎么部署到部署节点中的。部署节点可以是物理基础设施(例如物理服务器或设备)、虚拟化基础设施(例如IaaS、PaaS、虚拟机)、容器(例如Docker)、执行环境(例如数据库服务器、JavaEE Web /应用服务器),可以嵌套部署节点。部署图对运维人员是很重要的。
C4总结
C4的图就是上面这些了。还有一些是需要注意的,就是怎么画,什么颜色,什么形状(圆的、方的)、虚线、实线。C4并没有规定任何特定的符号,官网上有一些建议,这里就不具体说了,大家可以去官网看看。
总结
本文主要介绍了使用C4方法怎么去画架构图。架构图一定要清晰,让人很容易理解。并且不是一定要把所有的图都画出来,针对不同的人有不同的图。
希望对大家有所帮助,有帮助记得点赞哦!可以关注下,后面持续分享技术文章,谢谢!