本书是第一本全面系统介绍DevOps方法和实践的教材,尽可能覆盖DevOps这种互联网时代新型开发模式的理论、方法、实践以及工具等多个方面。全书第一部分首先从时代背景出发,介绍DevOps模式的渊源,然后结合云时代运维的特征,进一步阐明DevOps模式是适应当前软件系统开发、部署和维护的必然选择;第二部分介绍了主流软件开发方法及其流程,重点关注精益生产和看板方法;第三部分则阐述了DevOps模式下的典型实践,例如微服务架构、持续集成、持续交付(部署)、虚拟化、Docker容器、自动化等。
本书可以作为高等院校软件工程或者计算机专业高年级本科生及研究生的教材使用,也适合软件产业的研发和运维人员参考阅读
目录
- 赞誉
- 序
- 前言
- 第1章 DevOps概述 …… 1
- 1.1 互联网时代的转型挑战 …… 1
- 1.2 独角兽公司 …… 4
- 1.2.1 Netflix公司 …… 4
- 1.2.2 Instagram …… 8
- 1.2.3 成功秘诀 …… 9
- 1.3 什么是DevOps …… 10
- 1.3.1 发展渊源 …… 10
- 1.3.2 价值观 …… 12
- 1.3.3 原则 …… 13
- 1.3.4 方法 …… 15
- 1.3.5 实践 …… 16
- 1.3.6 工具 …… 16
- 1.4 DevOps应用与研究现状 …… 17
- 1.4.1 微服务 …… 17
- 1.4.2 持续集成和持续交付 …… 19
- 1.4.3 工具研究和开发 …… 21
- 本章小结 …… 23
- 思考题 …… 23
- 参考文献 …… 23
- 第2章 云时代的运维 …… 26
- 2.1 云计算概述 …… 26
- 2.1.1 IaaS …… 26
- 2.1.2 PaaS …… 28
- 2.1.3 SaaS …… 29
- 2.1.4 XaaS …… 30
- 2.2 IT服务标准介绍 …… 30
- 2.2.1 CMMI-SVC …… 30
- 2.2.2 ITIL …… 33
- 2.2.3 ISO20000 …… 33
- 2.2.4 ITSS …… 36
- 2.3 什么是运维 …… 39
- 2.3.1 运维的价值 …… 39
- 2.3.2 运维的技术与技能 …… 40
- 2.3.3 传统运维的转型之路 …… 40
- 本章小结 …… 41
- 思考题 …… 41
- 参考文献 …… 42
- 第3章 软件架构演进 …… 44
- 3.1 软件架构概述 …… 44
- 3.1.1 什么是软件架构 …… 44
- 3.1.2 软件架构的目标 …… 46
- 3.1.3 软件架构的不同视角 …… 46
- 3.2 软件架构的演进 …… 51
- 3.2.1 传统软件架构的演进 …… 51
- 3.2.2 流量爆炸时代的大型互联网软件架构 …… 54
- 3.2.3 互联网软件架构演进实例 …… 60
- 本章小结 …… 66
- 思考题 …… 67
- 参考文献 …… 67
- 更多阅读 …… 67
- 第4章 软件开发过程和方法 …… 68
- 4.1 软件过程概述 …… 68
- 4.1.1 软件开发方法发展历史 …… 69
- 4.1.2 软件过程的多维视角 …… 77
- 4.2 个体过程和实践 …… 79
- 4.2.1 PSP过程基本原则 …… 80
- 4.2.2 PSP过程度量 …… 81
- 4.2.3 PROBE估算原理 …… 82
- 4.2.4 PROBE估算流程 …… 83
- 4.2.5 通用计划框架 …… 85
- 4.2.6 PSP质量与质量策略 …… 87
- 4.2.7 评审与测试 …… 88
- 4.2.8 评审过程质量 …… 89
- 4.2.9 设计与质量 …… 98
- 4.2.10 设计过程 …… 100
- 4.2.11 设计的层次 …… 101
- 4.3 小组过程和实践 …… 102
- 4.3.1 XP实践 …… 102
- 4.3.2 Scrum方法 …… 105
- 4.3.3 TSP过程 …… 106
- 4.4 软件过程改进 …… 108
- 4.4.1 元模型 …… 108
- 4.4.2 过程改进参考模型与标准 …… 112
- 4.5 DevOps中的开发过程和方法 …… 121
- 本章小结 …… 121
- 思考题 …… 121
- 参考文献 …… 122
- 第5章 精益思想和看板方法 …… 124
- 5.1 从精益思想说起 …… 124
- 5.1.1 精益起源于丰田 …… 124
- 5.1.2 精益实践的传播 …… 124
- 5.1.3 精益作为方法学开始超越生产制造 …… 126
- 5.1.4 上升至精益的价值观 …… 126
- 5.2 精益的三个层面 …… 128
- 5.3 精益产品开发实践体系 …… 129
- 5.3.1 精益产品开发的目标 …… 129
- 5.3.2 精益产品开发的原则 …… 130
- 5.3.3 精益产品开发的运作实践 …… 131
- 5.4 看板方法的起源 …… 132
- 5.4.1 看板的中文意思带来误解 …… 132
- 5.4.2 看板是精益制造系统的核心工具 …… 133
- 5.4.3 看板形成拉式生产方式 …… 135
- 5.5 什么是产品开发中的看板方法 …… 136
- 5.5.1 产品开发中的看板方法的诞生 …… 136
- 5.5.2 看板方法的第一组实践—建立看板系统的3个实践 …… 136
- 5.5.3 看板方法的第二组实践—运作看板系统的2个实践 …… 140
- 本章小结 …… 142
- 思考题 …… 142
- 参考文献 …… 143
- 第6章 微服务软件架构 …… 144
- 6.1 软件架构的发展 …… 144
- 6.1.1 单体架构 …… 144
- 6.1.2 分层架构 …… 144
- 6.1.3 SOA架构 …… 146
- 6.1.4 分布式架构 …… 148
- 6.2 现代应用的12范式 …… 150
- 6.3 什么是微服务架构 …… 150
- 6.4 微服务架构的特征 …… 151
- 6.4.1 通过服务组件化 …… 152
- 6.4.2 围绕业务能力组织 …… 152
- 6.4.3 是产品不是项目 …… 153
- 6.4.4 智能端点和哑管道 …… 153
- 6.4.5 去中心化治理 …… 154
- 6.4.6 去中心化数据管理 …… 154
- 6.4.7 基础设施自动化 …… 155
- 6.4.8 为失效设计 …… 155
- 6.4.9 进化式设计 …… 155
- 6.5 微服务核心模式 …… 156
- 6.5.1 服务注册与发现 …… 156
- 6.5.2 配置中心 …… 157
- 6.5.3 API网关 …… 157
- 6.5.4 熔断器 …… 158
- 6.5.5 分布式追踪 …… 160
- 本章小结 …… 161
- 思考题 …… 162
- 参考文献 …… 162
- 第7章 容器技术基础 …… 163
- 7.1 内核基础 …… 163
- 7.1.1 Linux namespace …… 164
- 7.1.2 Linux CGroup …… 168
- 7.2 Docker架构概览 …… 169
- 7.2.1 Client …… 170
- 7.2.2 Docker Daemon …… 171
- 7.2.3 Docker Registry …… 172
- 7.2.4 Graph …… 173
- 7.2.5 Driver …… 173
- 7.2.6 libcontainer …… 173
- 7.3 镜像管理 …… 174
- 7.3.1 什么是Docker镜像 …… 174
- 7.3.2 Dockerfile、Docker镜像和Docker容器的关系 …… 174
- 7.3.3 Dockerfile …… 176
- 7.4 Docker网络管理 …… 178
- 7.4.1 Docker网络模式 …… 178
- 7.4.2 libnetwork和Docker网络 …… 179
- 7.4.3 Docker的内置Overlay网络 …… 180
- 7.5 Docker存储 …… 181
- 7.5.1 Docker存储驱动 …… 181
- 7.5.2 Docker驱动比较 …… 182
- 7.6 Docker编排 …… 183
- 7.6.1 Docker Swarm …… 183
- 7.6.2 Kubernetes …… 185
- 本章小结 …… 186
- 思考题 …… 186
- 参考文献 …… 187
- 第8章 基于容器技术的DevOps实践 …… 188
- 8.1 概述 …… 188
- 8.2 代码管理 …… 188
- 8.2.1 Git介绍 …… 190
- 8.2.2 Git工作流程 …… 191
- 8.3 持续交付流水线 …… 194
- 8.3.1 预备步骤 …… 194
- 8.3.2 实现持续交付流水线 …… 199
- 8.3.3 持续交付最佳实践 …… 201
- 8.3.4 检查列表 …… 204
- 8.4 持续集成工具 …… 205
- 8.4.1 传统的CI工具 …… 205
- 8.4.2 云计算环境中的CI工具 …… 206
- 8.4.3 用于移动应用的CI工具 …… 206
- 8.4.4 使用Docker的CI工具 …… 207
- 8.5 Java应用持续交付实践举例 …… 207
- 8.5.1 持续集成 …… 207
- 8.5.2 持续部署 …… 209
- 8.5.3 版本管理 …… 211
- 本章小结 …… 212
- 思考题 …… 212
- 参考文献 …… 212
- 第9章 DevOps工具集 …… 214
- 9.1 概述 …… 214
- 9.2 协同开发工具 …… 215
- 9.2.1 JIRA …… 215
- 9.2.2 Kanboard …… 216
- 9.2.3 Rally …… 218
- 9.3 持续集成工具 …… 219
- 9.3.1 Jenkins …… 219
- 9.3.2 Bamboo …… 220
- 9.3.3 Travis CI …… 220
- 9.4 版本管理工具 …… 221
- 9.4.1 Git …… 221
- 9.4.2 GitHub …… 223
- 9.4.3 GitLab …… 223
- 9.4.4 Subversion …… 223
- 9.4.5 Mercurial …… 223
- 9.5 编译工具 …… 224
- 9.5.1 Ant …… 224
- 9.5.2 Maven …… 225
- 9.5.3 Gradle …… 226
- 9.5.4 MSBuild …… 226
- 9.6 配置管理工具 …… 227
- 9.6.1 Chef …… 227
- 9.6.2 Puppet …… 228
- 9.6.3 Ansible …… 228
- 9.7 测试工具 …… 228
- 9.7.1 JUnit …… 228
- 9.7.2 Selenium …… 229
- 9.7.3 Cucumber …… 229
- 9.7.4 FitNesse …… 230
- 9.8 监控工具 …… 231
- 9.8.1 Nagios …… 231
- 9.8.2 Zabbix …… 231