定义
软件架构是对软件整体结构和组件进行抽象描述的概念,其目的是指导大型软件系统在各个方面的设计。软件架构包括软件组件、组件之间的关系、组件特性以及它们之间的相互作用特征。可以将软件架构与建筑物的结构类比。软件架构是构建计算机软件、开发系统和规划工作的基础,可以明确开发团队需要完成的任务。
在软件架构中做决策并对其进行修改的成本很高,因此这些决策是在软件的基本架构上做出的。软件架构中的决策包括在软件设计过程中的一些特殊结构选项,例如,为了控制太空船登陆艇的系统,需要选择适合实时计算的编程语言,并且为了满足可靠性需求,需要使用多个冗余的程序副本,这些副本在不同的硬件上运行,以便进行结果的比对。
软件架构是指你在创建软件的过程中如何组织内容。而这里的“内容”可以指:
- 实现细节(即你仓库的文件夹结构)
- 实现 设计 决策(你是使用服务端还是客户端渲染?使用关系型还是非关系性数据库)
- 你选择的技术(你是使用 REST 还是 GraphQl API? 后端使用 Python/Django 还是 Nod/Express 技术栈?)
- 系统 设计 决策(你的系统是采用单体式架构还是微服务架构?)
- 基础设施决策(你是在本地还是在云提供商上托管软件?)
作用
将软件架构进行文档化有助于与项目相关方之间的沟通,在高层设计阶段就可以进行早期决策,并且可以在不同项目之间重用设计组件。
架构模式
黑板 主从式架构(二层结构、三层结构、n-tier,云端运算会有这类风格) 基于组件的软件工程 资料库中心 事件驱动(或隐式调用) 抽象化(或多层架构) 微服务 单层系统、单体式应用程式 MVC(Model–view–controller) 对等网络(P2P) 管道 插件 表现层状态转换(REST) 规则为基础的系统 面向服务的体系结构 无共享架构 空间为基础的架构 单层系统