本书从软件架构师视角讲解了引入DevOps实践所需要掌握的技术能力,涵盖了运维、部署流水线、监控、安全与审计以及质量关注。通过3个经典案例研究,讲解了在不同场景下应用DevOps实践的方法。这对于想应用DevOps实践的组织具有切实的指导意义。
目录
- 译者序
- 前言
- 第一部分 背 景
- 第1章 DevOps是什么 …… 2
- 1.1 概述 …… 2
- 1.1.1 定义DevOps …… 2
- 1.1.2 DevOps实践 …… 3
- 1.1.3 持续部署的例子:IMVU …… 5
- 1.2 为什么是DevOps …… 5
- 1.2.1 发布过程 …… 5
- 1.2.2 配合不佳的原因 …… 7
- 1.2.3 运维人员能力有限 …… 7
- 1.3 DevOps视角 …… 8
- 1.3.1 自动化 …… 8
- 1.3.2 开发团队的职责 …… 9
- 1.4 DevOps与敏捷 …… 9
- 1.5 团队结构 …… 10
- 1.5.1 团队规模 …… 10
- 1.5.2 团队角色 …… 10
- 1.6 协作 …… 13
- 1.6.1 协作的形式 …… 13
- 1.6.2 团队协作 …… 14
- 1.6.3 跨团队协作 …… 14
- 1.7 障碍 …… 15
- 1.7.1 文化及组织类型 …… 15
- 1.7.2 部门类型 …… 16
- 1.7.3 筒仓思维方式(Silo Mentality) …… 17
- 1.7.4 工具支持 …… 17
- 1.7.5 人员问题 …… 17
- 1.8 小结 …… 18
- 1.9 更多阅读材料 …… 18
- 第2章 云即平台 …… 20
- 2.1 概述 …… 20
- 2.2 云的特性 …… 21
- 2.2.1 虚拟化 …… 22
- 2.2.2 IP和域名系统管理 …… 23
- 2.2.3 平台即服务 …… 25
- 2.2.4 分布式环境 …… 25
- 2.3 独特的云特性对DevOps的影响 …… 30
- 2.3.1 环境 …… 30
- 2.3.2 轻松创建虚拟机 …… 31
- 2.3.3 数据考量 …… 31
- 2.4 小结 …… 32
- 2.5 更多阅读材料 …… 33
- 第3章 运维 …… 34
- 3.1 概述 …… 34
- 3.2 运维服务 …… 34
- 3.2.1 供给硬件 …… 34
- 3.2.2 供给软件 …… 35
- 3.2.3 IT功能 …… 36
- 3.2.4 服务级别协议 …… 36
- 3.2.5 容量规划 …… 36
- 3.2.6 业务连续性和安全 …… 37
- 3.2.7 服务策略 …… 38
- 3.2.8 服务设计 …… 39
- 3.2.9 服务移交 …… 39
- 3.2.10 服务运维 …… 40
- 3.2.11 服务运维概念 …… 40
- 3.3 服务运维功能 …… 41
- 3.4 持续服务改进 …… 42
- 3.5 运维和DevOps …… 43
- 3.6 小结 …… 44
- 3.7 更多阅读材料 …… 44
- 第二部分 部署流水线
- 第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