性能之道:分布式系统全栈性能优化
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 软件架构的时空定义

计算机学科以及软件工程中的很多概念都是从其他学科借鉴而来的,架构的概念也不例外,借鉴自建筑学中的architecture一词。IEEE从空间的视角对软件架构做出了定义:架构是系统的基本结构,这种结构体现在组件内系统之间的关系、系统与环境之间的关系,以及指导系统设计与演化的原则上。

IEEE的这个定义侧重于空间的视角,软件架构表征的是软件的空间组成结构。软件存在的空间既包括物理空间,如软件运行所需的计算机硬件空间、网络物理空间等,也包括虚拟空间,如软件执行所需的指令空间和地址空间等。空间是客观存在的,所以架构也是客观存在的。不论人们是否关注或有意识地考虑架构,它都存在于系统的具体环境中,而且并不孤立,有着自己明确的目标。IEEE的定义中提及了系统的设计和演化,因此不可避免地融入了时间的因素。在考虑演化时,需要结合软件的生命周期,否则演化将失去意义。

计算机专家Grady Booch对软件架构给出了不同的定义:软件架构代表形成系统的重要设计决策,这些决策涉及软件的组织、组成系统的结构化元素及其接口的选择、元素之间协作时特定的行为、结构化元素和行为元素形成更大子系统时所用的组合方式、引导这一组织(也就是这些元素及其接口)的协作风格等。其中,不同对象的重要程度用其变化带来的成本变化来衡量。这个定义侧重于时间的视角,更注重一系列动作。这个定义通过“重要设计决策”形成流程,并指出架构与成本之间的相关性。

关于软件架构,还有很多类似的定义和理解,但基本上可以分为两类:从空间角度看,是面向体系结构建设的“组成论”;从时间角度看,是面向设计流程实现的“决策论”。然而,空间和时间是密不可分的。维基百科上对软件架构的定义就是从时空统一的视角给出的:软件架构是规划、设计和构建软件及其组成结构的过程和最终成果。

任何概念都有其时空边界,软件架构也有自己的环境约束。引入约束条件后,软件架构就可为软件提供一个高级抽象,其中包括结构、行为和属性。软件架构由组件的描述、组件间的相互作用、指导组件集成的模式和这些模式的约束组成。软件架构不仅显示了软件需求和软件结构之间的对应关系,还规定了整个软件的组织和拓扑结构,并提供了一些设计决策的基本原理。

综上所述,笔者认为:软件架构是软件的空间体系结构和系统构建的时间决策流程的统一。