DevOps:原理、方法与实践
书籍作者:荣国平 |
ISBN:9787111581918 |
书籍语言:简体中文 |
连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 |
下载次数:6893 |
创建日期:2021-02-14 |
发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
内容简介
本书由南京大学软件学院三位资深教师联合行业一线专家编写而成,系统全面地介绍DevOps——这一互联网时代新型软件开发模式的原理、方法和实践。内容详实、结构清晰、表述浅显易懂,非常适合在校学生学习使用,也可以作为产业界DevOps初学者学习参考。
全书第一部分首先从时代背景出发,介绍DevOps模式的渊源;结合云时代运维的特征,进一步阐明DevOps模式是适应当前软件系统开发、部署和维护的必然选择。第二部分介绍了主流软件开发方法及其流程;作为DevOps的基础理论,精益生产和看板方法是这部分的重点。第三部分则重点阐述了DevOps模式下的典型实践,例如:微服务架构、持续集成、持续交付(部署)、虚拟化、Docker容器、自动化等。
作者简介
荣国平,南京大学软件学院教师,长期从事软件过程改进相关的工作。从2006年开始,多次赴美参加SEI的相关培训,并在当年成为国内唯*的SEI授权PSP培训师和TSP团队教练。在JSS、软件学报等期刊以及包括ICSE、ESEM、ICSSP、EASE、CSEE&T、APSEC等在内的一流国际会议上发表论文40余篇。DevOps中国技术社区发起人之一。
张贺,南京大学软件工程教授、博士生导师,入选登峰人才计划(A-层次),澳大利亚联邦科学院(CSIRO)主任科学家。在欧洲和澳洲从事软件工程研究与实践十余年,2013年起就职于南京大学。长期从事软件过程、软件体系结构、服务计算、经验软件工程领域的科研和实践。负责主持爱尔兰(欧盟)、澳大利亚、中国等多个国家*科研基金项目。著有英文专著两部,并在国际重要软件工程学术期刊和会议上发表论文百余篇,其中10篇会议长文获*佳论文奖。
邵栋,南京大学软件学院副教授,嵌入式技术系主任,软件学院院长助理。主要从事软件工程教学研究工作,研究方向为软件过程、高科技市场理论、敏捷软件开发、软件工程教育等。2005、2009、2014年三次获得教育部颁发的“国家*教学成果奖二等奖”,是国家*教学团队“软件工程主干课程教学团队”骨干成员,编写教材一部,担任国家精品课程“计算与软件工程”主讲教师,两次获得“南京大学我*喜爱的老师”称号。
编辑推荐
深度解析互联网时代开发运维模式DevOps。每一个想学习DevOps理论与实践的人都应该研读的*一本书。工业界和学术界的一次思想碰撞——实用具体和严谨全面的有机融合。
李兵刘超王青汪浩洪绯王润郭峰徐峰郭蕾吴超英沈海峰黄丽果祝立明联名推荐。
前言
近年来DevOps开发模式对软件产业产生了深远影响,相当多的软件企业开始采用这种新的模式。来自权威机构的预测报告甚至认为,未来全球排名前2000的软件企业中,超过80%都将转向DevOps模式。事实上,DevOps发展速度之快和影响范围之广都大大超出了人们的预期。
DevOps之所以会产生如此巨大的影响,我们认为这不是偶然的。这种方法本身具有的特性非常适合在需求很难确定、快速响应变更、快速提供价值和高可靠性要求这样的所谓互联网时代软件环境中得到应用。由此,作为软件工程教育者,我们不得不思考DevOps给现代软件工程教育所带来的影响。一方面,我们的教育本身就需要教会学生把经过实践检验的优秀管理方法和适用的具体开发技术相结合,应用过程化思想和系统化的方法去开发和维护各类软件系统。从这个意义上说,DevOps是满足上述目标的极好载体。因此,忽视DevOps,不仅仅会错过一个实现软件工程教育目的的好机会,更为糟糕的是,可能会由此扩大学校教育和业界实际实践之间的差距。另一方面,将DevOps引入大学课堂,也面临着诸多挑战。首要的就是目前尚缺一本专门以DevOps为主题,全面系统地涵盖DevOps各个方面的教材。有鉴于此,我们编著了这样一本教材,试图弥补这一缺憾。
考虑到本书主要面向DevOps的初学者,因此,在内容的选择和组织上,我们并没有一味罗列DevOps的流行词汇和工具,而是尽可能把DevOps方法背后的理论基础解释清楚。对于具有典型DevOps特征的软件工程技术和实践,例如微服务架构演进、精益管理、容器技术等,我们则不吝笔墨地大篇幅介绍。由此,我们试图传递出一个概念,即DevOps作为一种方法学,不能简单等同于某类实践或者工具,而是涵盖管理的基础理论、技术以及工具的有机整体。综合起来,本书具有如下特点:
全面系统地覆盖DevOps的各个方面,便于读者以此书作为DevOps的基础(尽管内容并不基础!)入门书籍。
保持客观、中立和审慎的态度。尽管我们推崇DevOps,但绝不盲从。在材料的组织和内容表述方面,我们以解决实际问题为导向来介绍DevOps。同时,我们也清晰表达观点—DevOps并不抗拒其他方法学。
部分知识点和相应的案例直接来源于一线业界专家的工作经历,可以增强读者的代入感,同时,也有助于读者更好地理解DevOps。
本书具体分工如下:第1章由王天青、邵栋、张贺以及任群合作编写;第2章由腾灵灵和宋骏合作编写;第3章由蒋孟杰编写;第4章由荣国平编写;第5章由何勉编写;第6~8章由王天青编写;第9章由吴昊编写。此外,荣国平、张贺和邵栋对全书进行统稿和润色。由于时间仓促,再加上编者的水平所限,书中难免有错误与不妥之处,恳请读者指正和赐教。
荣国平
2017年7月于南大北园
目录
赞誉
序
前言
第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
9.9 工具网址 …… 232