软件架构的重要性
软件架构对于软件系统的开发和维护至关重要。以下几个方面阐述了软件架构的重要性:

降低开发风险和成本
软件架构在系统构建之前就能分析系统行为,验证系统是否满足利益相关者的需求,从而大大降低了开发风险和成本。同时,软件架构元素和决策在多个系统中的复用,也节省了设计成本并降低了设计错误的风险。

指导系统开发、部署和维护
软件架构支持对系统开发、部署和维护生命周期产生重大影响的早期设计决策。做出正确的高影响力决策,可以防止进度和预算超支。

促进与利益相关者的沟通
软件架构有助于利益相关者理解他们提出的需求以及基于这些需求做出的设计决策的后果,从而更好地满足他们的需求。在系统实现之前,软件架构就能让人们就设计决策进行交流,这时调整决策相对容易。

提供架构可视化
架构图能够清晰地展示系统组件和结构,帮助利益相关者准确识别并快速解决问题。它们还有助于识别系统扩展的高效方式,如显示架构是集中式还是分布式。分布式组件通常比整体式组件更易扩展。
软件架构种类
软件架构是软件系统设计和开发的关键组成部分,它定义了系统的整体结构、组件及其相互关系。根据不同的关注角度,软件架构可以分为以下三种类型:
逻辑架构
描述了软件系统中各个元素之间的逻辑关系,包括外部接口、软件界面、业务功能模块、数据库等。逻辑架构关注系统的功能分解和模块化设计,确保系统各部分之间的协作和集成。
物理架构
描述了软件元件在硬件系统中的部署位置和物理拓扑结构。例如,在分布式系统中,软件的各个组件可能部署在不同的物理服务器或虚拟机上。物理架构关注系统的可靠性、可扩展性和性能等非功能需求。
系统架构
是一个更高层次的概念,包括业务架构和软件架构两个方面。
- 业务架构描述了业务领域的主要模块及其组织结构,定义了业务流程和业务实体。
- 软件架构是对软件系统整体结构的规划和设计,类似于系统的蓝图。它确定了系统的主要组件、它们的职责分工以及相互之间的交互关系。
软件架构设计是一个关键的决策过程,需要权衡各种质量属性(如可维护性、可扩展性、性能等)和约束条件(如技术栈、成本、时间等)。良好的软件架构设计可以确保系统满足功能和非功能需求,提高系统的可维护性、可扩展性和可演化性。
五种常用的软件架构

分层架构
分层架构是最基础和最广为人知的软件架构模式之一,也被称为标准架构。它将应用程序划分为多个水平层次或层,每一层都负责特定的职责和功能。典型的分层架构包括表示层(UI 层)、业务逻辑层和数据访问层。这种架构模式的优点是清晰的分离关注点、高内聚低耦合、易于维护和扩展。然而,随着应用程序复杂度的增加,分层架构可能会变得笨重和低效。

事件驱动架构
事件驱动架构是一种软件架构模式,其中应用程序的组件通过生产、检测、消费和响应事件来进行通信和协作。事件可以是任何有意义的事情,如用户交互、系统通知或外部因素的变化。事件驱动架构强调松散耦合、高可伸缩性和响应性,非常适合于需要实时处理大量并发事件的分布式系统。该架构模式广泛应用于物联网、实时数据处理和消息驱动的应用程序中。

微核架构
微核架构也被称为"插件架构",它将应用程序划分为一个微小但功能强大的内核,以及围绕内核的可插拔组件或插件。内核负责提供最小的基本功能,而插件则扩展了应用程序的功能。这种架构模式的优点是高度模块化、可扩展性强、易于定制和维护。微核架构常见于操作系统、浏览器、IDE 和游戏引擎等领域。

微服务架构
微服务架构是服务导向架构(SOA)的一种演进形式,它将单一的整体式应用程序拆分为一组小型、自治且松散耦合的服务。每个微服务都运行在自己的进程中,围绕业务功能构建,使用轻量级机制进行通信,可独立部署和扩展。微服务架构强调敏捷性、可伸缩性、弹性和技术异构性,非常适合于构建云原生应用程序和支持 DevOps 实践。但同时也带来了分布式系统固有的复杂性。

云架构
云架构的最大亮点就是它强调扩展性,因此它也被称为"最容易扩展的架构",擅长应对软件系统的高并发访问。云架构通过利用云计算的按需资源调配、自动化和弹性伸缩等特性,使应用程序能够根据实际需求动态扩展或收缩资源。云架构通常采用微服务架构、无服务器架构或容器化架构等模式,并与云原生技术相结合,以实现高度的可伸缩性、可靠性和成本效率。云架构广泛应用于电子商务、在线游戏、物联网和大数据分析等领域。
软件架构设计的原则
软件架构设计是一个复杂的过程,需要遵循一些基本原则来确保系统的质量和可维护性。以下是软件架构设计的一些关键原则:

信息隐藏原则
这是软件架构设计的一个基本原则。它要求模块内部的信息对其他不需要该信息的模块是不可访问的。这样可以减少模块之间的耦合,提高系统的可维护性和可扩展性。

抽象、封装、模块化和层次化原则
这些原则通常被统称为 PHAME 原则。它们要求系统被划分为清晰的抽象层次,每个层次都封装了特定的功能,并通过定义良好的接口与其他层次交互。这种设计方式可以提高代码的可重用性和可维护性。

考虑替代方案
软件架构设计不应受到"隧道视野"的影响,应该考虑多种可行的替代方案,并根据具体需求选择最优方案。同时,设计应该可追溯到分析模型。

最小化智力距离
软件架构设计应该尽量缩小软件与所要解决的实际问题之间的"智力距离",即软件的结构应该尽可能地反映问题域的结构。这样可以提高软件的可理解性和可维护性。

满足非功能性需求
软件架构设计的重点是选择合适的基础设施和结构,以实现所需的功能,并满足系统的非功能性需求,如性能、可靠性和可扩展性等。

促进沟通和重用
通过记录软件架构,可以促进利益相关者之间的沟通,并允许在不同项目之间重用设计组件,从而提高开发效率。
软件架构评估的方法

反射模型评估
反射模型评估是一种主要的软件架构评估方法,它将系统架构师提供的高层次模型与源代码实现进行比较。通过这种方式,可以发现架构与实际实现之间的差异,从而评估软件架构的质量。

领域特定语言评估
另一种评估软件架构的方法是使用专注于指定和检查架构约束的领域特定语言。这些语言可以定义架构规则和约束,然后对实际实现进行检查,以确保其符合预期的架构设计。

架构恢复评估
软件架构恢复,也称为逆向工程或重构,是一种从现有信息(包括实现和文档)中发现软件系统架构的方法。当文档已过时或架构随时间发生演变时,这种方法尤为必要。通过架构恢复,可以重新构建系统的架构视图,为后续的架构评估和优化奠定基础。

架构分析评估
架构分析是理解拟建系统将运行的环境并确定系统需求的过程。这可能涉及分析功能需求、运行时非功能需求(如可靠性和性能)以及开发时非功能需求(如可维护性)。可以使用 ATAM 等技术来执行此类架构分析,从而评估软件架构的质量和适用性。
软件架构与代码质量的关系
软件架构与代码质量的关系十分密切。良好的软件架构设计能够为高质量代码奠定基础,反之亦然。以下几个方面阐述了二者之间的关联:
满足质量属性需求
软件架构设计的关键考虑因素之一是满足系统的各种质量属性需求,如容错性、向后兼容性、可扩展性、可靠性、可维护性、可用性、安全性和可用性等。合理的架构设计能够确保这些质量属性得到满足,从而提高代码质量。
促进利益相关者沟通
软件架构有助于与利益相关者的沟通,确保系统能够更好地满足他们的需求。从利益相关者的角度交流复杂系统有助于他们理解需求和基于需求做出的设计决策。架构设计使得在系统实现之前就能够进行沟通和调整。
降低开发风险和成本
软件架构允许在实际构建系统之前分析和验证系统行为,确保满足利益相关者的需求,从而降低开发风险和成本。此外,架构设计阶段做出的决策将影响系统的开发、部署和维护,做出正确的决策可以避免进度和预算超支。
提高代码质量
模块化和可重用性是高质量代码的关键特征,这需要良好的软件架构支持。可扩展、易于更新和修改的代码也依赖于整体的软件架构设计。此外,模块化和松耦合的架构有利于代码的可测试性,从而提高代码质量。
软件架构演进的过程
软件架构的演进过程是一个持续的活动,涉及多个关键环节和技术。整个过程可以概括为以下几个阶段:
架构恢复与重构
在软件系统的生命周期中,原有的架构文档可能会过时或丢失。此时需要通过架构恢复和重构技术,从现有的系统实现和文档中重新发现和提取出软件的架构。这是架构演进的基础工作。
架构侵蚀的应对
随着时间推移,系统的实现和维护决策可能会偏离最初设计的架构。这种架构侵蚀现象需要通过一系列技术来解决,包括架构一致性检查、演进管理、设计强制执行,以及通过恢复、发现和协调等手段进行架构修复。
架构违规检测
反射模型和领域特定语言是两种主要技术,用于检测系统实现与高层架构模型之间的违规情况。它们通过比较实现系统与架构模型,发现潜在的架构违规。
持续演进活动
软件架构的演进是一个循环过程,需要分析、综合、评估和演进等多个环节的支持,同时还需要知识管理、沟通和文档化等实践作为保障。在整个过程中,不断添加新功能、维护现有功能和系统行为是核心目标。
欢迎加入亚马逊云科技培训中心
欢迎加入亚马逊云科技培训中心
-
快速上手训练营
-
账单设置与查看
-
动手实操
-
快速上手训练营
-
第一课:亚马逊云科技简介
本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。
亚马逊云科技技术讲师:李锦鸿第二课:存储与数据库服务
您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。
亚马逊云科技资深技术讲师:周一川第三课:安全、身份和访问管理
在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。
亚马逊云科技技术讲师:马仲凯 -
账单设置与查看
-
-
动手实操
-
快速注册账号 享用免费套餐
跟随注册步骤详解,三分钟快速创建账号,领取免费权益
打开中国区账号注册页面
01 填写您 注册账号的邮箱,点击“继续”
02 查看您的 注册账号邮箱
注: 发件箱 no-reply@register.signin.amazonaws.com.cn
03 输入 邮箱中收到的验证码,点击“继续”
注: 该链接中的内容显示语言是与您的网页浏览器设置相一致的,您可以根据需要自行调整语言栏。

填写用户名密码
.04e59cc081d6b1b4de2e80dca972273ad0cd7ace.jpg)
填写账号联系人以及公司信息
01 填写公司联系人 姓名全称
02 填写公司联系人的 联系电话
03 填写 公司名称
注: 公司名称请务必与您所提供的营业执照公司名称保持一致
04 填写 公司办公地址
注: 省份/自治区/直辖市 - 城市 - 区 - 街道门牌号以及楼层信息 - 邮政编码
05 请选择 是否需要发票
注: *附件-申请发票流程 供您参考
06 点击查看 客户协议 勾选方框表示您已阅读,并同意客户协议的条款
.dcb511571e7913a6581f0ae803797a01c918ac61.jpg)
企业信息验证
01 在此上传 企业注册执照
02 请填写网络安全负责人的 姓名
注: 该字段务必与您下方提供的身份证号匹配或与证件上的姓名保持一致
03 请填写网络安全负责人的 联系方式
注: 有效的电子邮件地址 - 有效的中国内地 手机号码 - 座机号码(如无座机,请填写正确有效的手机号码)
04 在此上传网络安全负责人的 身份证件
注: 当您选择证件类型为“身份证”时,您需要填写正确的身份证号码,选择其他证件类型时,您需要上传证件扫描稿
.8252245bf937985f0b90aaa376899e8932e71a49.jpg)
手机验证与支持计划
.7122fd576282aebfbd9ed8927a918a378c59550d.jpg)