当我们在讨论软件系统架构的一些概念的时候,经常会借助一些其他学科(如造船、建筑等)的概念进行描述。例如当我们讨论"架构"这个概念的时候,我们就会借助微处理器的内部结构、机器的内部结构、组织网络、软件架构和其他许多东西进行对比和理解。今天主要介绍一下软件架构、架构元素、架构描述和一些其他相关内容。
什么是软件架构
在现在社会中到处都可以看到计算机的身影,不仅仅是数据中心的桌面上,甚至在汽车、洗衣机和信用卡上。这些计算机无论体积大或小、结构简单或者复杂,所有的计算机都是由三个基本组成部分:硬件、软件和数据。
当我们研究计算机系统的时候,首先要了解的就是计算机的组成部分的功能,以及各个部分是如何在一起工作的,换句话讲就是研究计算机的架构。通常我们认可的对计算机架构的概念是由坐落在匹兹堡的卡耐基-梅隆大学的软件体系结构研究所定义的。
该组织定义:一个软件系统的体系结构,包括软件元素,软件元素之间的关系,以及这些元素的外部可见特性。接下来让我们具体了解一下定义中的两个关键部分,即系统的结构和其外部可见性。
系统结构
对软件架构师来讲,系统结构包括静态(设计时的组织结构)和动态(运行时的组织结构)两个方面。
静态的体系结构,定义了内部元素的设计和元素的排列。它告诉我们设计时的组织形式和软件元素是如何组织的。内部元素包括:
内部软件元素可以是模块、类或包、存储过程、服务或者其他独立的代码单元。
内部数据元素可以使类、关系数据库的实体或表、数据文件等。
内部硬件元素包括计算机或其他组成部分(如磁盘或者CPU)。
内部网络元素包括电缆、集线器、路由器等。
以上这些内部元素之间相关关联、相互依靠,共同构成了我们的软件体系结构。
动态的体系结构,定义了系统运行时的元素和他们之间的相互作用。它说明了系统是如何工作的,系统运行时发生了什么,如何响应外部请求等。元素之间的相互作用可以是信息在元素之间的流动,可以是并行或顺序执行的任务,也可以是元素对于数据的影响。
外部可见性
外部可见性主要包括两个方面,一个是外部可见的行为(系统做了什么),另一个是质量特性(系统如何做)。
外部可见的行为可以告诉我们一个软件系统从外部观察者的角度是什么,即告诉我们系统与环境之间相互作用的功能是什么。这些相互作用的功能包括系统内外信息的流动,系统对外部请求的响应,对外提供的约定和API等。外部行为即对待系统的方式,我们可以将系统的看做一个黑盒子,外部行为不需要考虑和知道内容的实现,仅仅需要知道系统内部完成了哪些功能和处理。
质量属性可以告诉我们一个系统的行为从外部观察者的角度是什么,即告诉我们系统的外部可见的非功能特性,如性能、安全和可伸缩性。质量属性所关注的范围包括系统如何在较低的负载下执行,特定硬件的吞吐量在峰值的是什么,如何防止系统的恶意使用,系统运行多长时间崩溃,系统的运行、维护、管理怎么更容易,更便于残疾人使用等等,这些特性都属于系统质量属性所需要优先考虑的范围。
到此为止,我们对系统架构的概念就介绍完毕了,接下来继续讲解软件系统架构的其他内容。
……