《DevOps:软件架构师行动指南.》导读

简介:

本节书摘来自华章出版社《DevOps:软件架构师行动指南.》一书中作者伦恩·拜斯(Len Bass)

[澳]   英戈·韦伯(Ingo Weber)    著

朱黎明(Liming Zhu)

胥峰 任发科 等译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

96f4f1bcf48c37178928d1c06a8e0bbe911cbcee

 

前言  
多年以来,我们一直在探索研究运维中的问题。自然而然地,我们也一直在追踪DevOps运动。它正在沿着Gartner成熟度曲线向上发展。这种现象有着坚实的业务原因。我们能够找到从信息技术经理视角对DevOps的探讨(例如小说《凤凰项目:一个IT运维的传奇故事》),也能找到从项目经理视角对DevOps的探讨(例如《持续交付:发布可靠软件的系统方法》)。而且,关于文化变革和文化变革对于打破组织单元之间障碍的意义,也有大量的资料。
然而,令我们感到失望的是,鲜有从软件架构师角度对DevOps探讨的资料。把运维人员视为首要干系人并且聆听他们的需求当然是非常重要的。使用工具来支持运维和项目管理也是非常重要的。然而,我们强烈感觉到,DevOps并不仅仅是关于干系人管理和工具使用的。
事实上,正是因为目前缺少这方面的资料,所以我们才决定撰写本书,把这些缺失的内容填充起来。DevOps与设计、过程、工具化和组织结构之间的相互作用令人着迷。我们试图回答两个主要问题:作为软件架构师,我需要做出什么样的技术决策才能够实现DevOps目标?DevOps领域的其他参与者会对我产生什么样的影响?
以上这些问题的答案是,实现DevOps目标可能包含着对你的系统架构和角色以及责任做出重大变更,在把系统部署到生产环境以及在生产环境中支持这些系统时,需要以上角色及责任。
正如软件架构师必须理解他们所设计与构建的系统的业务情境和目标一样,理解DevOps也要理解组织和业务情境,同时也要理解技术和运维情境。我们探索了所有这些内容。
本书的主要读者是那些曾经被问过或者将被问到“这个项目或者组织是否应该采用DevOps实践”这个问题的执业软件架构师。甚至他们不是被追问这个问题,而是他们有可能被告知是否应该采用DevOps实践。与所有书一样,我们期望还有其他类型的读者。那些有兴趣学习更多关于软件架构实践的学生应该可以在本书中找到一些感兴趣的资料。那些想探索研究DevOps课题的研究人员可以在本书中找到重要的背景资料。然而,我们的主要读者还是那些执业软件架构师。
概述
在本书的开始,我们讨论了DevOps的背景。在第一部分中,我们研究了DevOps的目标以及期望使用DevOps来解决的问题。我们会涉及组织和文化问题,也会涉及DevOps实践和敏捷方法学的关系。
在第2章中,我们研究了云。随着云即平台(Cloud as a Platform)的增长,DevOps实践也得到了发展。理论上,DevOps和云即平台是可分开的,但是事实上,虚拟化和云是推动DevOps实践的重要力量。
在介绍背景知识的最后一章(第3章)中,我们按照信息技术基础设施库(Information Technology Infrastructure Library,ITIL)的理论研究了运维。ITIL是对运维组的最重要功能进行组织的体系。不是所有的运维工作都包含在DevOps实践中,但是理解运维组的职责却会提供重要的上下文信息,特别是当需要理解角色和职责时。
第二部分描述了部署流水线(Deployment Pipeline)。在这一部分中,我们首先探索了微服务架构风格,这出现在第4章中。为了应用DevOps实践而以微服务风格进行系统架构并不是必需的,但是,却能用微服务架构风格来解决DevOps所需要解决的一些问题。
在第5章中,我们简略介绍了构建和测试过程以及工具链。理解这些内容很重要,但它们不是我们的焦点。我们介绍了把系统部署到生产环境所关联的各种不同环境以及在这些环境上执行的不同类型的测试。因为在DevOps中用到的很多工具也在构建和测试过程中被用到了,所以我们提供了理解这些工具和如何控制它们的上下文信息。
我们以讨论部署结束第二部分。DevOps的目标之一是加速部署。实现这个目标的一种技术是,使得每个开发团队可以在完成准备后独立地部署他们的代码。独立部署带来了很多一致性的问题。我们将讨论不同的部署模型;管理同时运行在生产环境中不同版本的系统;在发生错误时回滚;以及与实际把系统部署到生产环境中有关的其他主题。
第二部分提供了从功能视角观察部署实践的内容。然而,与其他任何系统一样,质量视角常常是控制系统设计和系统接受度的主要因素。在第三部分中,我们聚焦在横切关注点上。我们首先在第7章中讨论了监控和现场测试(live testing)。现代软件测试实践在将系统部署到生产环境中以后并没有结束。首先,系统被广泛地监控以检测问题;其次,在将系统部署到生产环境以后,测试正以各种形式继续进行。
另一个横切关注点是安全。我们在第8章中讨论了该内容。我们展示了环境中各种不同类型的安全控制,包括组织范围和特定系统范围的安全控制。我们讨论了与实现安全相关联的不同角色以及在安全审计案例中如何评估这些角色。
安全不是质量关注的全部。在第9章中,我们讨论了与DevOps实践有关的其他方面的质量。我们讨论的主题包括部署流水线的性能、可靠性和可修改性。
第三部分的最后,我们在第10章中讨论了业务关注。像DevOps这种涉及面广泛的实践,如果得不到来自管理层的支持,是无法被采用的。业务计划是寻求这种支持的一种典型方法。因此,我们描述了为引进DevOps所需要准备的业务计划的组成元素,然后讨论了如何进行论证、推出和测量业务计划。
在第四部分中,我们描述了3个案例研究。这些实施了DevOps实践的组织给我们讲解了他们所采用的一些技巧。第11章讨论了为了实现业务连续性如何维护两个数据中心;第12章展示了一个持续部署流水线的细节;第13章描述了一个组织是如何迁移到微服务架构上的。
作为本书的结尾,我们在第五部分展望了DevOps的未来。第14章描述了我们的研究以及它是如何基于把运维视作一系列过程来进行的。第15章预测了未来3~5年DevOps将如何发展。
致谢
本书离不开众多人的帮助。在此,感谢Chris Williams、John Painter、Daniel Hand和Sidney Shek,他们为案例研究做出了贡献。同时,感谢Adnene Guabtni、Kanchana Wickremasinghe、Min Fu和Xiwei Xu在有些章节中提供的帮助。
感谢Manuel Pais帮助我们编排了案例研究。感谢Philippe Kruchten、Eoin Woods、Gregory Hartman、Sidney Shek、Michael Lorant、Wouter Geurts和Eltjo Poort对本书做出了评论或者为本书的某些方面做出了贡献。
下列人士对第13章做出了评论,在此表示感谢:Jean-Michel、Lemieux、Greg Warden、Robin Fernandes、Jerome Touffe-Blin、Felipe Cuozzo、Pramod Korathota、Nick Wright、Vitaly Osipov、Brad Baker和Jim Watts。
在出版阶段,Addison-Wesley出版社的编辑用他们一贯的专业和高效的工作为本书顺利出版做出了贡献。他们的专业知识和工作经验提升了本书的质量。
最后,感谢NICTA和NICTA的管理层。NICTA是由澳大利亚政府通过通信部(Department of Communications)和由澳大利亚研究委员会(Australian Research Council)通过ICT卓越中心(Centre of Excellence)项目组建的。如果没有他们的慷慨支持,本书将难以完成。
图例说明
对于图,我们使用了4种不同的图例。我们使用架构标注法来识别我们使用的关键架构概念;使用业务流程建模标注(Business Process Model and Notation,BPMN)来描述一些过程;使用波特价值链标注(Porter’s Value Notation)来描述一些其他的过程;使用UML时序图来组织活动的顺序。这里没有给出UML时序图标注。我们给出了通过其他方法进行的标注。
架构

图P-1 人员,包括个体和组

图P-2 组件(运行时实体)、模块(代码时实体集合)和数据流

图P-3 特殊化的实体

图P-4 实体集合
业务流程建模标注
我们使用业务流程建模标注来描述事件和活动[OMG 11]。

图P-5 事件标识

图P-6 活动和活动序列
波特价值链
该标注用来描述过程(包含在业务流程建模标注中建模的活动)。

图P-7 价值链中的条目


目录  


第一部分 背  景
第1章 DevOps是什么 
第2章 云即平台
第3章 运维
第二部分 部署流水线
第4章 整体架构 …… 48
4.1 DevOps实践是否需要架构调整 …… 48
4.2 架构结构总览 …… 49
4.2.1 协作模式 …… 50
4.2.2 资源管理 …… 51
4.2.3 架构元素之间的映射 …… 52
4.3 微服务架构的质量 …… 52
4.3.1 可靠性 …… 53
4.3.2 可修改性 …… 54
4.4 团队的亚马逊规则 …… 55
4.5 现有系统的微服务方案 …… 56
4.6 小结 …… 56
4.7 更多阅读材料 …… 57
第5章 构建与测试 …… 58
5.1 概述 …… 58
5.2 在部署流水线中移动系统 …… 59
5.2.1 可追溯性 …… 59
5.2.2 环境 …… 60
5.3 横切关注点 …… 61
5.4 开发及提交前测试 …… 63
5.4.1 版本控制与分支 …… 63
5.4.2 功能开关 …… 65
5.4.3 配置参数 …… 66
5.4.4 在开发和提交前测试中的测试 …… 67
5.5 构建与集成测试 …… 67
5.5.1 构建脚本 …… 67
5.5.2 打包 …… 68
5.5.3 持续集成与构建状态 …… 69
5.5.4 集成测试 …… 70
5.6 用户验收测试/预发布/性能测试 …… 70
5.7 生产环境 …… 71
5.7.1 早期发布测试 …… 71
5.7.2 错误检测 …… 72
5.7.3 现场测试 …… 72
5.8 事件 …… 73
5.9 小结 …… 73
5.10 更多阅读材料 …… 74
第6章 部署 …… 75
6.1 概述 …… 75
6.2 部署管理的策略 …… 76
6.2.1 蓝/绿部署 …… 76
6.2.2 滚动升级 …… 77
6.3 逻辑一致性 …… 78
6.3.1 相同服务的多个版本同时存在 …… 78
6.3.2 兼容数据库中保存的数据 …… 81
6.4 打包 …… 82
6.5 多环境部署 …… 84
6.6 部分部署 …… 86
6.6.1 金丝雀测试 …… 86
6.6.2 A/B测试 …… 87
6.7 回滚 …… 87
6.8 工具 …… 89
6.9 小结 …… 90
6.10 更多阅读材料 …… 90
第三部分 横切关注点
第7章 监控 …… 94
7.1 概述 …… 94
7.2 监控什么 …… 95
7.2.1 故障检测 …… 96
7.2.2 性能下降检测 …… 96
7.2.3 容量规划 …… 97
7.2.4 用户交互 …… 98
7.2.5 入侵检测 …… 99
7.3 如何监控 …… 99
7.3.1 基于代理的监控和无代理的监控 …… 101
7.3.2 监控运维活动 …… 102
7.3.3 收集和存储 …… 102
7.4 什么时候变更监控配置 …… 103
7.5 解释监控数据 …… 103
7.5.1 日志 …… 104
7.5.2 绘图和展示 …… 105
7.5.3 警报和警告 …… 105
7.5.4 诊断和反应 …… 106
7.5.5 监控DevOps过程 …… 106
7.6 挑战 …… 107
7.6.1 挑战1:持续变更下的监控 …… 107
7.6.2 挑战2:自下向上与自上向下和在云中的监控 …… 108
7.6.3 挑战3:监控微服务架构 …… 109
7.6.4 挑战4:处理大容量的分布式(日志)数据 …… 109
7.7 工具 …… 109
7.8 从监控数据中诊断出异常——Platformer.com的案例 …… 110
7.8.1 背景 …… 111
7.8.2 数据收集 …… 112
7.8.3 检测异常 …… 112
7.8.4 思考 …… 113
7.9 小结 …… 113
7.10 更多阅读材料 …… 114
第8章 安全与安全审计 …… 115
8.1 安全是什么 …… 115
8.2 威胁 …… 117
8.3 需要保护的资源 …… 118
8.4 安全角色和活动 …… 120
8.5 身份管理 …… 122
8.5.1 认证 …… 123
8.5.2 授权 …… 125
8.6 访问控制 …… 126
8.6.1 阻止访问 …… 127
8.6.2 谁负责预防控制 …… 129
8.7 检测、审计和拒绝服务 …… 129
8.8 开发 …… 130
8.9 审计者 …… 130
8.10 应用设计考虑 …… 131
8.11 部署流水线设计考虑 …… 132
8.12 小结 …… 133
8.13 更多阅读材料 …… 134
第9章 其他非功能需求 …… 135
9.1 概述 …… 135
9.2 可重复性 …… 136
9.2.1 在恰当的层级上定义和执行过程 …… 136
9.2.2 版本控制所有事物 …… 138
9.3 性能 …… 139
9.3.1 测量重要的事物 …… 139
9.3.2 提高资源使用率 …… 140
9.4 可靠性 …… 141
9.4.1 理解不同服务的可靠性特性 …… 141
9.4.2 早期检测和修复错误 …… 142
9.5 可恢复性 …… 142
9.6 互操作性 …… 143
9.6.1 注意接口的互操作性 …… 143
9.6.2 理解现有的数据模型 …… 143
9.7 可测试性 …… 144
9.8 可修改性 …… 145
9.8.1 一个工具内的修改 …… 145
9.8.2 工具之间交互行为的修改 …… 146
9.9 小结 …… 146
9.10 更多阅读材料 …… 147
第10章 业务关注点 …… 148
10.1 概述 …… 148
10.2 业务案例 …… 148
10.2.1 问题和解决问题所带来的好处 …… 149
10.2.2 成本 …… 149
10.2.3 干系人影响 …… 150
10.2.4 风险及其减缓 …… 151
10.2.5 推出计划 …… 153
10.2.6 成功标准 …… 154
10.3 度量和对DevOps实践的合规性 …… 155
10.3.1 测量DevOps实践的成功度 …… 155
10.3.2 测量对DevOps实践的合规性 …… 156
10.3.3 测量干系人的满意度 …… 157
10.4 Dev和Ops之间的交互点 …… 157
10.4.1 许可 …… 157
10.4.2 事故处理 …… 158
10.5 小结 …… 159
10.6 更多阅读材料 …… 159
第四部分 案 例 研 究
第11章 支持多数据中心 …… 162
11.1 概述 …… 162
11.2 当前的情况 …… 163
11.3 业务逻辑和Web层 …… 163
11.3.1 应用逻辑 …… 163
11.3.2 基础设施 …… 164
11.3.3 增加一个应用 …… 164
11.3.4 发现基础设施 …… 165
11.4 数据库层 …… 167
11.4.1 事务数据 …… 167
11.4.2 基础设施支持 …… 168
11.4.3 会话数据 …… 168
11.5 其他基础设施工具 …… 168
11.5.1 gem存储库服务器 …… 169
11.5.2 Elasticsearch …… 169
11.5.3 域名系统 …… 169
11.6 数据中心切换 …… 170
11.6.1 受控切换步骤 …… 170
11.6.2 非受控切换 …… 174
11.6.3 定义和自动化切换步骤 …… 175
11.7 测试 …… 177
11.7.1 数据中心切换应用程序 …… 177
11.7.2 基础设施测试 …… 177
11.7.3 持续交付流水线 …… 177
11.8 小结 …… 178
11.9 更多阅读材料 …… 179
第12章 实施企业的持续部署流水线 …… 180
12.1 概述 …… 180
12.2 组织背景 …… 180
12.3 持续部署流水线 …… 182
12.3.1 持续部署流水线工具 …… 183
12.3.2 使用AWS CloudFormation的环境定义 …… 184
12.3.3 标准化的应用程序生命周期概览及其使用 …… 186
12.3.4 标准化的应用程序生命周期阶段 …… 188
12.3.5 管理复杂的应用程序和流水线状态 …… 194
12.3.6 管理持久化 …… 196
12.4 让安全成为持续部署流水线的基础 …… 196
12.4.1 使用Amazon CloudFormation分离职责 …… 196
12.4.2 身份和访问管理 …… 197
12.5 高级概念 …… 198
12.5.1 最小化生产环境和非生产环境之间的偏移 …… 198
12.5.2 解决供应商的限制 …… 198
12.5.3 厂商锁定 …… 199
12.5.4 新的AWS内置服务的展望 …… 199
12.6 小结 …… 199
12.7 更多阅读材料 …… 200
第13章 迁移到微服务 …… 202
13.1 Atlassian概述 …… 202
13.2 构建部署微服务的平台 …… 203
13.3 BlobStore:一个微服务例子 …… 206
13.3.1 架构 …… 206
13.3.2 通过纯函数式架构和编程实现安全性和性能 …… 207
13.3.3 解决“非功能需求” …… 210
13.4 开发过程 …… 210
13.4.1 开发人员和支持 …… 211
13.4.2 构建和部署流水线 …… 212
13.4.3 客户应用的生产环境的零停机时间路径 …… 214
13.5 BlobStore演进 …… 215
13.6 小结 …… 219
13.7 更多阅读材料 …… 219
第五部分 走 向 未 来
第14章 作为过程的运维 …… 222
14.1 概述 …… 222
14.2 动机和概览 …… 223
14.3 离线活动 …… 224
14.4 在线活动 …… 227
14.4.1 错误检测 …… 227
14.4.2 错误恢复 …… 229
14.5 错误诊断 …… 229
14.6 监控 …… 231
14.7 小结 …… 231
14.8 更多阅读材料 …… 231
第15章 DevOps的未来 …… 232
15.1 概述 …… 232
15.2 组织问题 …… 233
15.2.1 DevOps活动中可能涉及的其他组 …… 233
15.2.2 所有关系和重组 …… 234
15.2.3 授权与控制 …… 234
15.3 过程问题 …… 235
15.3.1 厂商锁定和标准 …… 235
15.3.2 计费模型 …… 235
15.3.3 变更的速度 …… 236
15.4 技术问题 …… 237
15.4.1 持续部署流水线概念 …… 237
15.4.2 在持续部署流水线中获得质量 …… 239
15.4.3 实现 …… 239
15.5 错误报告和修复 …… 240
15.6 结束语 …… 240
15.7 更多阅读材料 …… 240
参考文献 …… 241
相关文章

热门文章

最新文章