什么是架构,架构的关键设计原则是什么?

分类: 架构设计

保留所有版权,请引用而不是转载本文(原文地址 https://yeecode.top/blog/127/ )。

架构是一个来源于传统领域的古老概念,用来指对房屋、桥梁等实体物理结构的设计与研究。

建筑物的架构

后来,架构的概念被引入到软件系统领域,指软件系统总体结构的设计。

我们可以类比传统工程设计领域的概念,将软件系统领域的研究由上到下地分为三层:

  • 理念层面:研究软件系统开发中的理念和思想,例如研究软件的开发模型、评价指标、架构风格等。类比于传统工程领域研究建筑质量标准、研究商业区与居住区的分布关系等。
  • 架构层面:研究如何协调和组织软件系统、子系统、模块之间的关系,从而指导系统实现并提升各类质量指标。类比于规划和设计建筑物的承重结构、功能结构等,并协调各结构的关系等。
  • 技术层面:研究如何高效、可靠、经济地实现软件系统、子系统、模块等。类比于搭建建筑物中的楼梯、墙体、阳台等。

这一样一类比,是不是就比较好理解了。

可见软件架构位于承上启下的中间层。因此,做出良好的架构需要我们对理念层面和技术层面的知识均由较为深刻的认识。

理念层面的知识为我们的架构提供了思路和目标上的指引,技术层面的知识为我们的架构提供了手段和工具上的支撑。

在软件开发过程中,架构发生在需求之后、规划之前。经过需求、架构、规划、开发几个主要步骤后,一个软件便从最初模糊的需求演变为最终可运行的实体。

软件架构是在软件系统结构、行为和属性的高级抽象基础之上展开的全面的系统设计,其主要内容包括概要设计和详细设计两大步骤。

  • 在概要设计阶段,研究构成系统的抽象组件以及组件之间的连接规则;
  • 在详细设计阶段,将这些抽象组件细化为模块、类、对象等实际的组件,并通过设计通信规则完成它们之间的连接。

软件的模块设计

软件系统架构的好坏对软件的质量有着重要的影响。在算法研究中,我们常使用时间复杂度和空间复杂度等指标来衡量算法的性能。然而,在一个完整的软件项目中,算法的研究与优化只是软件开发阶段的一个小环节,其对系统质量的影响是有限的。相比于算法优化,软件系统架构则是从顶层对软件系统的软硬件结构进行设计,其设计的好坏对系统质量的影响更为重大。

因此,要想搭建高性能的系统,要先从架构层面出发对软件进行高性能架构,而不应将责任直接推给算法设计和代码优化。

在了解什么是高性能架构之前,我们需要先了解什么是软件的质量。

作为一名软件开发者和用户,我们经常在工作和生活中接触各种各样的软件,也会从不同的维度对软件进行评判。例如我们会使用“界面漂亮”、“好用”、“容易崩溃”、“功能强大”等各种类似的词语来描述一个软件,其实这都从不同的维度反映了一个软件的质量。

那有没有确切的标准来衡量一个软件的质量呢?

ISO/IEC 25010:2011是软件工程-产品质量评价国际标准。它给出了软件质量模型(Product Quality Model)并将软件质量划分成了八个特性维度,如图所示。

软件质量的八个特性维度

这八个特性维度的介绍如下:

  • 功能性(Functional suitability):在特定条件下使用时,产品或系统提供满足指定和隐含需求的功能的程度。这里仅对是否满足功能做要求,而对功能的规范性不做要求。
  • 效率(Performance efficiency):在指定条件下,软件产品对资源的占用。资源包括其他软件产品、系统的软件和硬件配置等。
  • 兼容性(Compatibility):产品、系统或组件可以与其他产品,系统或组件交换信息或执行其所需功能,同时共享相同的硬件或软件环境的程度。
  • 易用性(Usability):指定用户可以使用产品或系统在指定的使用环境下以有效、高效和满意的方式达到指定目标的程度。
  • 可靠性(Reliability):系统、产品或组件在指定条件下在指定时间内执行指定功能的程度。这里所说的指定功能涵盖可用性、安全性、可维护性等。因为软件不会在运行过程中损耗,所以其不可靠是由于软件需求、设计、实施中的错误引发,或者是执行上下文变化引发。
  • 安全性(Security): 产品或系统保护信息和数据的程度,以便人员或其他产品或系统具有与其权限类型和授权级别相适应的数据访问程度。
  • 可维护性(Maintainability):预期的维护者可以修改产品或系统的有效性和效率的程度。
  • 可移植性(Portability):系统、产品或组件从一种硬件,软件或其他操作或使用环境转移到另一种环境的有效性和效率的程度。

以上八个特性维度共同构成了软件的质量。例如我们所说的“好用”、“界面漂亮”是在从易用性维度评价软件质量,“容易崩溃”是在从可靠性维度评价软件质量,“功能强大”是在从功能性维度评价软件质量。

在软件架构设计过程中,我们应该尽量保证设计出的软件能够在以上八个维度都有较好的表现。

当然也有很多时候,我们不得不做出取舍,为了某些重要的特性维度指标而牺牲一些次要的指标。例如为了界面漂亮(易用性高)而导致界面的加载时间变长(效率降低),需要不断权衡。

愈发美观的界面是以降低易用性为代价的

如果大家要学习架构方面的知识,可以参阅《高性能架构之道(第二版)》,这是一本理论联系实际的架构书籍,详细介绍了实现高性能架构的手段,涵盖分布式、并发编程、数据库调优、缓存、IO、高可用、前端性能优化等众多知识。最后还运用书中知识完成了一个实际软件项目的架构设计工作,向大家完整展示了软件架构的全过程。

高性能架构之道(第二版)

《高性能架构之道(第二版)》

这本书还出版了繁体版,叫《巨型服务架构》。繁体版贵得很。

《巨型服务架构》

就先说这么多吧。

对于程序员而言,开始关注架构就是重大进步。就已经从单纯写代码的层次里跳了出来,至少从“增删改查”中跳了出来,能以更宏观的视角去思考代码、思考软件工程!而在AI编程迅猛发展的今天,编码能力则逐步弱化,而架构能力则更为重要。


好了,我是软件架构师易哥。

可以关注我,我会偶尔出没分享编程干货!

可以访问个人知乎阅读更多文章:易哥(https://www.zhihu.com/people/yeecode),欢迎关注。

作者书籍推荐

作者书籍推荐 作者书籍推荐