猜你喜欢
持续架构实践:敏捷和DevOps时代下的软件架构

持续架构实践:敏捷和DevOps时代下的软件架构

书籍作者:穆拉特·埃尔德 ISBN:9787111717744
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:6863
创建日期:2023-05-27 发布日期:2023-05-27
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

本书为在现实环境中利用持续架构方法提供了实践指南,并阐明了架构在敏捷、DevOps和云平台时代不断变化的角色。


本书将帮助技术人员更新其架构实践,以应对新的软件挑战。


本书使架构师和软件工程师能够快速应用面向交付的知识。它包括了解决当今软件系统关键质量属性和交叉问题的深入指导,例如安全性、性能、可伸缩性、弹性、数据和新兴技术等。通过一个贯穿全书的案例研究,对每项关键技术都进行了演示,反映了作者应对复杂软件环境的丰富经验。


作者简介

穆拉特·埃尔德(Murat Erder)

“持续架构”之父,德意志银行董事、行政办公室CTO、数据办公室主管,在软件研发和架构领域有超过25年的经验,是一位资深的软件架构专家和管理顾问。于2015年在与穆拉特·埃尔德(Murat Erder)合著的《持续架构:敏捷中的持续架构》一书中提出“持续架构”的概念,自此之后,一直在世界范围内以实践、写作、演讲、咨询等方式进行持续架构的深化和布道工作。


皮埃尔·普约尔(Pierre Pureur)

“持续架构”之父,有近35年的软件开发和架构经验,IEEE会员。擅长企业架构、应用架构、信息架构、解决方案架构等几乎所有与架构相关的领域,曾担任某大型金融服务公司的首席企业架构师,在金融领域有丰富的技术和服务经验。于2015年在与穆拉特·埃尔德(Murat Erder)合著的《持续架构:敏捷中的持续架构》一书中提出“持续架构”的概念,并与其共同在世界范围内开展持续架构的布道工作。


伊恩·伍兹(Eoin Woods)

纽交所上市跨国软件公司Endava的CTO,有超过30年的软件开发和架构经验。英国工程技术学会(IET)特许会员,英国计算机协会(BSC)特许会员。于2018年获得获得由卡内基·梅隆大学的美国软件工程研究所(CMU SEI,全球软件工程领域最权威机构)颁发的Linda M. Northrup软件架构大奖。著有《软件系统架构》《软件架构指标》等架构领域的畅销著作。

前言

距离我们(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和云计算,并从架构的宏观视角将这些方法集成起来,并按照业务优先级进行需求交付。本书旨在解释这种我们称为持续架构的方法,并展示如何在实践中有效地利用这种方法。

目录

赞誉
推荐序
译者序
前言
致谢
第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

产品特色