软件架构基础(Fundamentals of Software Architecture)》被誉为和《设计数据密集型应用》一样经典的后端书籍,架构师的入门指南。本篇为该书第一章的读书笔记,2021 年第一个目标就是和大家一起读完这本书。
如今,全球范围内“架构师”这一头衔炒得十分火热,但没有真正的指南来帮助开发人员成为软件架构师。
这本书主要有三部分内容:基础、架构风格、技术和软技能。基础部分是关于软件体系结构的一般概念;架构风格部分介绍了不同的架构风格,并以一些架构特征标准进行评价;技术和软技能部分涵盖了很多好的概念,包括做出健康的架构决策、风险分析技术、演讲能力、管理团队关系、谈判、架构师职业规划等。
架构就是关于重要的东西......不管那是什么。—— Ralph Johnson
1. 什么是软件架构
学习架构就像学习艺术一样,读者必须要在特定的背景下去理解它。
在一个动态系统中,不存在一劳永逸的解决方案。
学习架构时,必须放在上下文中理解。架构师做的许多决定都是基于他们所处的实际情况。
例如,在 20 世纪末的主要目标是有效地利用共享资源,因为当时所有的基础设施都是昂贵的商业化产品:操作系统、服务器和数据库等等。如果你在 2002 年告诉主管,“我有一个革命性的架构好主意,每个服务都运行在自己隔离的机器上,有自己的专用数据库……(即描述今天的微服务架构)所以,我需要 50 个 Windows 的许可证,另外 30 个服务器许可证,以及至少 50 个数据库许可证。”在 2002 年想构建这样的微服务架构成本之高难以想象。然而这几年,随着开源运动的兴起,以及 DevOps 的出现,我们可以合理地构建一个如上所述的架构。
整个行业都在努力精确定义“软件架构”,有些称为系统的蓝图,有些定义为开发的路线图。本书关于架构的定义主要从四个方面:
-
系统的结构(Structure)
-
系统所支持的架构特性、能力(Architecture characteristics)
-
架构决策(Architecture decisions)
-
设计原则(Design principles)
系统的结构指的是系统实现架构风格的类型(如微服务、分层或微内核)。但仅仅通过结构来描述一个架构,并不能完全阐明一个架构。

架构特性多