描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111717744丛书名: 架构师书库
(1)紧贴科技热点:Gartner权威发布2023年十大科技趋势之一“可持续IT架构”,可持续架构得到越来越多从业人员认同。
(2)作者权威:“持续架构”之父新作!三位作者有着丰富的软件架构经验。
(3)内容翔实:本书用自顶向下的方法阐述“持续架构”,在持续架构六准则下,结合敏捷和DevOps和云时代等环境因素综合考虑可伸缩性、性能、安全、数据等维度的架构决策,辅以策略和案例。本书是应对软件规模和复杂度的革命性方法。
(4)超强专家阵容推荐:5位全球知名专家联袂推荐。
(5)译者阵容强大:中国持续架构领域4位领路人倾情翻译 。
【持续架构研讨会】4位译者老师教你应用架构视角和准则来加速软件开发和交付过程
观看平台:视频号“IT阅读排行榜 ”
本书为在现实环境中利用持续架构方法提供了实践指南,并阐明了架构在敏捷、DevOps和云平台时代不断变化的角色。
本书将帮助技术人员更新其架构实践,以应对新的软件挑战。
本书使架构师和软件工程师能够快速应用面向交付的知识。它包括了解决当今软件系统关键质量属性和交叉问题的深入指导,例如安全性、性能、可伸缩性、弹性、数据和新兴技术等。通过一个贯穿全书的案例研究,对每项关键技术都进行了演示,反映了作者应对复杂软件环境的丰富经验。
赞誉
推荐序
译者序
前言
致谢
第1章 软件架构的重要性更胜往昔 1
1.1 我们所说的架构到底是什么 1
1.2 当今的软件行业 2
1.3 当前软件架构的挑战 4
1.3.1 关注技术细节而不是业务
场景 4
1.3.2 认为“架构不能增加价值” 4
1.3.3 架构实践也许太慢了 5
1.3.4 一些架构师可能并不适应
云平台 6
1.4 敏捷化世界里的软件架构 6
1.4.1 一切的开始:软件架构与
极限编程 6
1.4.2 我们究竟在哪一步:架构、
敏捷性还是持续交付 7
1.4.3 未来的方向 7
1.5 持续架构的引入 8
1.5.1 持续架构的定义 8
1.5.2 持续架构的收益 10
1.6 应用持续架构 11
1.7 案例研究介绍 12
1.8 本章小结 14
第2章 架构实践:基本活动 15
2.1 基本活动概述 16
2.2 架构决策 17
2.2.1 架构决策的制定和治理 18
2.2.2 敏捷项目中的架构决策 19
2.3 质量属性 21
2.3.1 质量属性和架构策略 22
2.3.2 使用质量属性 22
2.3.3 构建质量属性效用树 23
2.4 技术债务 23
2.4.1 捕获技术债务 25
2.4.2 如何管理技术债务 26
2.5 反馈循环:架构演进 27
2.5.1 适应度函数 28
2.5.2 持续测试 29
2.6 当今软件架构实践中的共同
主题 30
2.6.1 以准则为架构指南 30
2.6.2 由团队负责的架构 31
2.6.3 模型与符号 32
2.6.4 模式和风格 33
2.6.5 架构作为决策流 33
2.7 本章小结 34
第3章 数据架构 36
3.1 数据即架构的考虑 37
3.1.1 什么是数据 37
3.1.2 通用语言 38
3.2 关键技术趋势 39
3.2.1 SQL统治地位的消亡:NoSQL和多种持久化 40
3.2.2 可伸缩性和可用性:终
一致性 43
3.2.3 事件与状态:事件溯源 45
3.2.4 数据分析:来自信息的智慧
和知识 47
3.3 其他架构考虑事项 51
3.3.1 数据所有权和元数据 51
3.3.2 数据集成 53
3.3.3 数据(模式)演进 55
3.4 本章小结 56
3.5 拓展阅读 57
第4章 架构之安全性 59
4.1 架构场景中的安全性 59
4.1.1 当今的安全形势正在变化 60
4.1.2 我们所说的安全性到底是
什么 61
4.1.3 从无到有建立安全性 61
4.1.4 安全性左移 62
4.2 面向安全性设计架构 62
4.2.1 什么是安全风险 62
4.2.2 持续的风险建模和缓解
风险 63
4.2.3 风险识别技术 64
4.2.4 划分风险等级 67
4.2.5 其他方法 68
4.3 缓解风险的架构策略 68
4.3.1 身份验证、授权和审计 68
4.3.2 信息的隐私和完整性 69
4.3.3 拒绝抵赖 70
4.3.4 系统可用性 70
4.3.5 安全监控 71
4.3.6 密钥管理 72
4.3.7 缓解社会工程学攻击 74
4.3.8 零信任网络 75
4.3.9 实现TFX的安全性 75
4.4 维持安全性 78
4.4.1 安全性的实施 78
4.4.2 人员、流程和技术 79
4.4.3 薄弱的一环 79
4.4.4 持续提供安全性 79
4.4.5 为不可避免的失败做好
准备 80
4.4.6 安全舞台与安全实现 81
4.5 本章小结 81
4.6 拓展阅读 82
第5章 架构之可伸缩性 84
5.1 架构场景中的可伸缩性 85
5.1.1 什么改变了:可伸缩性的
假设 86
5.1.2 影响可伸缩性的因素 87
5.1.3 可伸缩性的类型和误解 88
5.1.4 云计算的影响 91
5.2 可伸缩性架构:架构策略 92
5.2.1 TFX可伸缩性需求 93
5.2.2 数据库可伸缩性 94
5.2.3 数据分发、复制和分区 96
5.2.4 面向可伸缩性的缓存 97
5.2.5 使用异步通信实现可伸
缩性 99
5.2.6 其他应用程序架构的注意
事项 101
5.2.7 实现TFX的可伸缩性 105
5.3 本章小结 107
5.4 拓展阅读 109
第6章 架构之性能 111
6.1 架构场景中的性能 111
6.1.1 影响性能的因素 112
6.1.2 架构关注点 112
6.2 性能架构 114
6.2.1 新兴趋势对性能的影响 114
6.2.2 围绕性能建模和测试构建
应用程序 116
6.2.3 现代应用程序的性能策略 118
6.2.4 现代数据库的性能策略 121
6.2.5 实现TFX的性能 124
6.3 本章小结 128
6.4 拓展阅读 128
第7章 架构之弹性 131
7.1 架构场景中的弹性 132
7.1.1 变化:失败的必然性 133
7.1.2 直面系统失败的可靠性 133
7.1.3 业务场景 134
7.1.4 MTTR,不仅是MTBF 134
7.1.5 MTBF和MTTR与RPO
和RTO的对比 135
7.1.6 逐渐好转 136
7.1.7 弹性组织 137
7.2 面向弹性的架构设计 137
7.2.1 允许失败 137
7.2.2 测量与学习 139
7.3 面向弹性的架构策略 140
7.3.1 故障识别策略 141
7.3.2 隔离策略 142
7.3.3 保护策略 145
7.3.4 缓解策略 148
7.3.5 实现TFX的弹性 151
7.4 维护弹性 152
7.4.1 运营的可见性 153
7.4.2 面向弹性的测试 153
7.4.3 DevOps的角色 154
7.4.4 检测与恢复、预测与缓解 155
7.4.5 事故处理 155
7.4.6 灾难恢复 156
7.5 本章小结 157
7.6 拓展阅读 157
第8章 软件架构与新兴技术 159
8.1 使用架构处理新技术引入的
技术风险 160
8.2 人工智能、机器学习和深度
学习简介 160
8.2.1 机器学习的类型 161
8.2.2 什么是深度学习 162
8.3 在TFX中使用机器学习 163
8.3.1 机器学习解决的问题类型、
先决条件和架构考虑 163
8.3.2 在TFX中使用文档分类 164
8.3.3 在TFX中实现一个聊天
机器人 169
8.4 在TFX中使用共享分类账 174
8.4.1 共享分类账、区块链和分布
式分类账技术简介 174
8.4.2 共享分类账解决的问题类型、
先决条件和架构考虑 175
8.4.3 共享分类账的能力 176
8.4.4 在TFX中实现一个共享
分类账 178
8.4.5 架构导向方法的好处 182
8.5 本章小结 183
8.6 拓展阅读 183
第9章 持续架构实践的结论 185
9.1 变与不变 185
9.2 更新架构实践 186
9.3 数据 187
9.4 关键的质量属性 188
9.4.1 安全性 189
9.4.2 可伸缩性 189
9.4.3 性能 190
9.4.4 弹性 190
9.5 当今时代的架构 190
9.6 实践中的持续架构 191
附录A 案例研究 192
附录B 共享分类账技术实现对比 212
术语表 214
距离我们(Murat和Pierre)出版《持续架构》一书已经好几年了,这期间发生了很多变化,尤其是技术领域。因此,我们与Eoin Woods一起着手更新这本书。刚开始只是简单的修订,但慢慢地就演变成了这本新书。
《持续架构》主要是对概念、思想和工具进行概述和讨论,而本书则提供了更多基于实践的建议,侧重于指导读者如何利用持续架构方法,并涵盖了有关安全性、性能(performance)、可伸缩性、弹性、数据和新兴技术等主题的深入且最新的信息。
我们重新审视了架构在敏捷、DevSecOps、云和以云为中心的平台中的作用,也为技术人员提供了一份实用指南,指导他们通过不断更新经典软件架构实践的方式来应对当今应用程序所面临的一些复杂挑战。我们还重新审视了软件架构的一些核心主题:架构师在开发团队中的角色;如何满足软件涉众的质量属性需求;架构在实现如安全性、可伸缩性、性能和弹性等关键交叉需求方面的重要性。对上述每个领域,我们都提供了使架构实践有意义的一种新方法,这种方法通常建立在上一代软件架构相关书籍给出的传统建议之上,并解释了如何在现代软件开发环境中应对这些领域的挑战。
本书的结构如下:
第1章提供场景,定义术语,并概述在每章都会使用的案例研究(附录A包含了有关案例研究的详细信息)。
第2章列出我们的主要思想,希望读者了解如何在当今的软件开发环境中开展架构工作。
第3~7章探讨对现代应用程序开发来说至关重要的相关架构主题:数据、安全性、可伸缩性、性能和弹性。我们解释软件架构方法,尤其是持续架构方法,探讨如何在解决各个架构问题的同时保持敏捷的工作方式,以持续地向生产环境交付变更。
第8章和第9章主要着眼于未来,讨论架构在处理新兴技术方面的作用,并总结当今敏捷和DevOps时代下架构实践遇到的挑战以及应对这些挑战的一些潜在方法。
我们希望想成为软件架构师的读者了解该领域的经典基础知识(可能来自Software Architecture in Practice或Software Systems Architecture之类的书籍),同时认识到需要更新方法以应对当今快速发展的软件开发环境所带来的挑战。想要了解架构和设计的软件工程师也可能会被书中实用的、面向交付的重点内容所吸引。
为了使本书只涉及必要的内容并专注于上一本书以来发生的变化,我们假设读者已经熟悉包括信息安全、云计算、基于微服务的架构以及常见的自动化技术(例如自动化测试和部署流水线)在内的主流技术基础知识。我们希望读者熟悉架构设计的基本方法,了解如何创建软件的可视化模型以及领域驱动设计(Domain-Driven Design,DDD)等相关方法。如果读者对架构设计基础没有把握,我们建议从定义明确的方法开始,例如软件工程研究所的属性驱动设计或其他更简单的方法(如Software Systems Architecture第7章中概述的方法)。虽然软件建模被忽视了几年,但似乎正在重新回归主流实践。对于一开始错过了这些知识的人,Software Systems Architecture的第12章提供了一个起点,另外Simon Brown的著作对软件建模的介绍更新且更易于理解。
本书中未涉及的另一个基础架构实践是如何评估软件架构。该主题在我们上一本书的第6章、Software Systems Architecture的第14章和Software Architecture in Practice的第21章都有介绍。读者还可以上网搜索有关架构评估方法的信息,例如架构权衡分析方法(Architecture Tradeoff Analysis Method,ATAM)。
此外,我们还假设读者具备敏捷开发的相关知识,如敏捷、Scrum和规模化敏捷框架(Scaled Agile Framework,SAFe),因此对软件开发生命周期过程不做深入讨论,也不对DevSecOps等软件部署和操作方法做或深或浅的讨论,并且特意去除了数据库、安全性、自动化等特定技术领域的详细信息。当然,我们会在相关的地方引用这些主题,但假设读者熟悉这些知识。在上一本书《持续架构》中,我们涵盖了这些主题,但没有涉及技术细节。另外请注意,术语表中定义的术语首次出现在本书中时会以粗体突出显示。
过去几年,软件架构的基础并没有改变,架构的总体目标依然是使正在开发的软件能够尽早并持续地交付业务价值。不幸的是,许多架构从业者并不会优先考虑这个目标,甚至不理解这个目标。
我们三人称自己为架构师,因为我们相信日常工作中所做的事情至今没有更好的解释。我们曾就职于软硬件供应商、管理咨询公司和大型金融机构,主要从事软件和企业架构相关的工作。但是,当说自己是架构师时,我们觉得有必要对其进行限定,就像需要一个解释来将我们与不增加任何价值的IT架构师的刻板印象区分开来。读者可能比较熟悉这样一种表达方式:“我是一名架构师,但我也交付、编写代码,与客户打交道 (填写你认为有价值的活动)。”
不管怎样,我们相信,表现出抽象派疯狂科学家、技术工匠或演讲狂人等品质的架构师只是少数从业者。作为软件交付团队的一部分,大多数架构师能够有效地工作,很多时候甚至可能不自居为架构师。实际上,无论你理解与否,所有软件都有一个架构,且大部分软件产品都会有一小组高级开发人员来创建一个可行的架构,而不论这个架构是否被记录下来。因此,最好将架构视为一种技能而非一种角色。
我们相信时代已经永久地摆脱了先前以文档为中心的软件架构实践,或许也已经摆脱了传统的企业架构。然而,根据经验,我们一致认为仍然需要一种架构方法,涵盖敏捷、持续交付、DevSecOps和云计算,并从架构的宏观视角将这些方法集成起来,并按照业务优先级进行需求交付。本书旨在解释这种我们称为持续架构的方法,并展示如何在实践中有效地利用这种方法。
“我一直为这几位作者乐于分享的精神感到高兴,且深受鼓舞。他们的第一本书为理解如 何演进软件密集型系统架构奠定了基础,而这本书在他们的第一本书的基础上增加了一些非常可行的方法。”
—— Grady Booch ,IBM 研究院软件工程首席科学家
“本书抓住了当今软件架构师的几个主要关注点,如安全性、可伸缩性和弹性,并为机器 学习、深度学习和区块链等新兴技术的管理提供了宝贵的见解。推荐大家阅读!”
——Jan Bosch,瑞典查尔姆斯理工大学软件工程系教授和软件中心主管
“本书精心梳理了现代软件架构,解释了架构思维‘左移’的重要性,为交付和持续架构 的演进奠定了坚实的基础。我非常喜欢质量属性这部分内容,通过一个真实的案例研究,书中提供了一种方法来突出真实世界中权衡不同解决方案的复杂性。此外,一系列参考资料也令人印象深刻,对刚接触软件架构领域的读者来说非常有用。”
——Simon Brown ,Software Architecture for Developers
“在谈论敏捷软件的相关实践时,我们可能会忽视软件架构。但是,架构对软件系统而言 很重要,而且这种重要性会一直延续下去。作者在本书中讨论了这一重要主题,并提供了决定系统成败的相关建议,涵盖了数据、安全性、可伸缩性和弹性。在当今快速发展的技术环 境中,这是一本非常值得推荐的书,可以为系统开发涉及的所有角色提供实用指导。”
——Ivar Jacobson
“本书着眼于持续的趋势,并在实际案例中应用了持续架构的准则。作者没有选择可能很快就不再适用的流行工具,而是着眼于那些会影响架构决策的趋势。对任何想要设计和构建 与时俱进的软件系统的人来说,这本书都是必不可少的读物。”
—— Patrick Kua,首席技术官教练兼导师
“在‘基于设计的架构’和‘基于演进的架构’之间 20 多年的博弈中,软件架构师 通常很难找到有意义的折中方案。本书为架构师提供了一条行之有效的途径。本书是一 个巨大的飞跃:我喜欢作者对架构策略这种尚未被充分利用的设计工件更为系统化的使 用。此外,作者将架构技术债务的概念摆在了技术和管理决策制定过程中更为突出的位置。”
——Philippe Kruchten,软件架构师
“现在是时候让敏捷架构从自相矛盾演变为它真正需要成为的样子了:一种精益的、可以加速下一代弹性可伸缩的企业级系统开发和交付的实践。本书是向该目标迈出的又一大步,为进行能响应不断变化的需求和技术的设计提供了实用指南。”
——Dean Lef?ngwell,规模化敏捷框架(SAFe)创立者
评论
还没有评论。