当我们谈论架构时我们在说什么

109 阅读4分钟

1 架构一词的含义

按百科的定义,汉语“架构” 一词最早出自龚自珍在《干禄新书》自序中,关于馆阁体书法的一段评论:论点画波磔之病百有二十,论架构之病二十有二。由此可以看出“架构”就是“间架结构”的意思,即对某对象的内部组成元素及元素间相互关系的描述。拿汉字来说,任何一个汉字其组成元素就是点画波磔(捺)等各种笔画,笔画间的组成关系有左右结构、上下结构、包围半包围结构等。

2 什么是软件架构

类比来看,软件系统的架构就是在说,组成软件的组件和组件间的依赖关系。这里软件或系统可以是简单的桌面应用程序,也可以是比较复杂的互联网系统,如OA系统、CRM系统、电商平台等等。从互联网公司的实际情况来看,绝大多数软件系统基本都属于B/S架构的系统。所谓B/S架构,也就是C/S架构的一种特例,而CS架构是有因特网以来最常见的软件架构模式,即一个系统由Client和Server两部分组成,Client和Server运行于网络中不同的机器上。BS架构的B也就是浏览器,一种通用的Client。

通常当我们谈论架构时,就是在说,系统由什么样的客户端端程序和服务端程序组成,客户端和服务的又由哪些组件或子系统构成,以及客户端和服务端的通信模型是什么样的,他们之间会经过什么样的网络环境,中间有哪些网络代理等中间件(例如前向代理、后向代理、负载均衡、API网关等等)。

3 如何描述软件架构

上面我们简要说明了什么是软件架构,哪当我们设计一套系统或学习掌握一个已经存在的系统时,该如何描述其架构呢?当然是使用架构图呢。所以这个问题其实在问,我们要如何画系统的架构图。

Philippe Kruchten于1995在《IEEE Software》上发表的题为《The 4+1 View Model of Architecture》的论文应该算是最早的有关架构描述的理论文章了。4+1视图法最终被RUP所采纳,现在已经成为架构设计的结构标准。不过根据我的观察,实际工作中很少有人用这种方法表达架构,想来可能是因为其太繁琐了。另外还有一种类似描述架构的方法叫“五视图法”。下面是关于这两种方法的简单图解,详细说明读者朋友可以自行百度,这里不做赘述。

  • 4+1视图法
    image.png
  • 五视图法
    image.png

无论是4+1视图法还是五视图法,其核心思想都体现了这么一个观念,即描述系统架构不是简单的事,需要从不同的维度和视角去表达,因此他们都有好几种视图来表达一个架构。这的确是个非常重要和正确的观念,因为一个系统不像一个汉字那般简单,想要表达清楚系统的架构,只从一个视角和用一张图来描述,其表达力是非常有限的。

然而现实工作当中,又要考虑实用性和便宜性,因此,我个人的建议是,采用两个图来表达架构就可以了,即:逻辑架构和系统架构,简单介绍如下。

逻辑架构 是从产品和用户的视角去审视软件系统,主要描述系统的功能模块,以及各功能模块间的相互依赖关系。

系统架构 是从程序员的视角去审视软件系统,主要从运行时状态去看待组成系统的各进程及其之间的依赖关系。系统架构要能够让人清楚地看出整个系统被划分成了多少个进程(也就是工程或线上环境部署的集群),以及这些进程之间的相互调用关系。《aPaaS设计思考》一文给出了关于aPaaS平台设计的逻辑架构和系统架构,可参考阅读。

扩展阅读