前言
随着信息和网络技术的飞速发展,计算模式从最初的把任务交给大型计算机集中计算,逐步发展为更有效率的基于集群的分布式任务处理模式。互联网的发展使得基于互联网的相关服务增加,使用和交付模式也发生了变化,在这样的背景下,云计算依托相关技术从概念逐步变为现实。云计算被看作第三次IT浪潮,是我国政府“互联网+”战略规划的重要组成部分,云计算已经给人们的生活、生产方式和商业模式带来了根本性改变,是近年来全社会关注的热点。
云计算和大数据是两个密切相关的概念,随着大数据时代的来临,云计算作为大数据的处理架构,其重要性日益凸显。目前,我国高校的计算机、软件工程、物联网等专业都开设了云计算技术的相关课程。这些专业的专业基础课程都是以讲述基础的程序开发知识和系统运维技能为主。实际上,如果要开发大型的软件项目,则需要用到分布式数据库、分布式文件系统、分布式计算框架等云计算相关技术,大型软件的运维和部署更是离不开容器编排、虚拟集群管理这些云计算核心技术的支持。因此,云计算技术相关课程既能帮助学生深入理解和融会贯通程序设计、操作系统、计算机网络、数据库等专业基础课的知识,又能很好地培养学生解决复杂工程问题的能力。
根据面向工程教育专业认证的需要,我们认为,云计算技术的课程目标可分为3个层次: 一是了解云计算的产生背景、概念和体系结构,理解云计算的特征和关键技术,了解虚拟化技术、分布式计算和云存储的基本原理和关键技术;二是掌握PaaS的实现(基于Hadoop)、IaaS的实现(基于OpenStack)和容器技术(基于Docker、Kubernetes等)的应用,对云计算的部署和实施有宏观上的了解;三是初步掌握云计算相关项目的开发和运维方法,具备基于云计算应用需求完成设计任务和解决复杂工程问题的能力,能够综合利用开源云计算软件开发和部署云计算平台。
为了达成以上课程目标,本书在编写过程中注重解决以下几个问题。
(1) 由于云计算技术主要应用在大型软件的开发和运维上,对于学生有能力开发的小型项目,云计算技术很难有用武之地,导致学生觉得云计算技术在平时编程开发时用不上,从而丧失对云计算的学习热情。
(2) 云计算系统相对复杂,很多开源的云计算软件内部组件十分丰富,不同组件具有不同的作用且相互之间紧密联系。想要搭建一个云计算平台并不是一件容易的事,如何搭建一个云平台的学习环境并让学生在上面进行操作实践,提升动手能力是本课程的教学难点和重点。
(3) 云计算技术课程内容比较庞杂,且技术更新的速度非常快。云计算技术课程内容可根据云计算的核心技术分为虚拟化技术、云存储和分布式计算三大块,每一块技术的实现都需要大型开源云计算软件的支持。如何根据项目需求选用合适的软件创建一个云计算系统是实现本课程的课程目标的关键。
本书精选云计算技术的主流和核心内容,既不面面俱到,又考虑到初学者的能力,不过于深入,不过分追求知识体系的完备性,以问题导向的叙述方式为主,目标是帮助初学者理解云计算的本质思想和核心技术。云计算技术的知识体系庞杂,更新速度快,本书力求让初学者迅速入门,并对读者深入探究云计算技术起到先导的作用。
本书按照云计算的三大核心技术将内容划分为3部分,即虚拟化技术、云存储技术、分布式计算,每部分内容既有基本理论的讲述,又有实现软件的阐述。
云计算技术课程对实验教学的要求是很高的,本书安排了和云计算软件紧密相关的实验课程。这些实验课程的内容已经过多年教学环节验证,具有复杂程度适中、可操作性好的特点。
本书是微课版,对关键内容和软件操作录制了14个微课视频,能有效帮助学生完成各项实验内容。
本书的教学大概需要48学时,其中实验不少于16学时。
本书为教师提供了教学用多媒体课件、实例源文件和实验大纲,可登录清华大学出版社网站免费下载。
本书由唐四薪、唐琼、郑光勇、唐金娟编著,唐四薪编写了第3~10章的内容,郑光勇、唐琼编写了第1章和第2章的部分内容,唐金娟编写了第2章的部分内容。
限于编者水平和教学经验,书中不妥之处在所难免,欢迎广大读者和同行批评指正。
编者2026年2月
目录
第1章云计算概述1
1.1云计算的产生背景1
1.1.1云计算的实现原理1
1.1.2云计算的定义和特点3
1.1.3云计算的必要性7
1.2云计算的体系结构和关键技术9
1.2.1云计算的体系结构9
1.2.2云计算的核心技术10
1.3云计算的资源封装层次11
1.3.1IaaS13
1.3.2PaaS14
1.3.3SaaS14
1.4云计算的部署模式16
1.5云计算相关技术及应用16
1.5.1云计算与大数据17
1.5.2集群18
1.5.3边缘计算19
1.5.4云计算的应用领域21
习题22第2章虚拟化技术24
2.1虚拟化技术概述24
2.1.1虚拟化技术的发展历史24
2.1.2虚拟化技术的层次25
2.1.3常用的虚拟机软件27
2.1.4虚拟化和云计算的关系28
2.2系统虚拟化29
2.2.1系统虚拟化的原则29
2.2.2原生虚拟化与寄宿虚拟化29
2.2.3系统虚拟化的特性31
2.3系统虚拟化的技术实现33
2.3.1CPU指令类型和运行模式33
2.3.2CPU的指令分级35
2.3.3CPU虚拟化36
2.3.4内存虚拟化38
2.3.5设备与I/O虚拟化41
2.3.6GPU虚拟化42
2.4网络虚拟化42
2.4.1网络虚拟化基本原理42
2.4.2软件定义网络43
2.4.3OpenFlow协议45
2.5虚拟机软件的使用47
2.5.1VirtualBox的基本操作47
2.5.2虚拟机的网络连接方式50
2.5.3物理计算机访问虚拟机的方式52
2.5.4SSH软件的使用54
2.5.5配置SSH免密登录56
习题58第3章Linux操作系统60
3.1Linux概述60
3.1.1Linux系统的构成61
3.1.2Linux的安装61
3.1.3Linux的文件系统结构61
3.1.4Linux的终端62
3.2Linux的常用命令62
3.2.1文件目录类命令62
3.2.2用户管理类命令65
3.2.3文件权限类命令66
3.2.4系统管理类命令68
3.2.5安装软件类命令68
3.3Shell脚本使用基础68
3.3.1Shell脚本的编写和运行69
3.3.2Shell脚本变量70
习题70第4章Docker容器技术72
4.1Docker概述72
4.1.1容器技术的由来72
4.1.2容器与虚拟机73
4.1.3Docker的应用领域74
4.2Docker的底层实现技术75
4.2.1Docker的系统架构75
4.2.2Docker的核心概念76
4.2.3Docker文件系统78
4.2.4Docker容器数据卷78
4.3Docker的安装和使用79
4.3.1Docker的安装80
4.3.2Docker的基本命令和操作82
4.3.3Docker部署LNMP环境85
4.4Dockerfile构建镜像87
4.4.1Dockerfile常用命令87
4.4.2Dockerfile的构建与编译89
4.4.3用Dockerfile构建Web项目镜像90
4.5Docker Compose容器编排技术91
4.5.1Docker Compose的安装91
4.5.2Docker Compose的使用92
习题95第5章Kubernetes97
5.1Kubernetes概述97
5.1.1容器编排工具97
5.1.2Kubernetes解决的问题98
5.1.3云原生与微服务架构100
5.1.4Kubernetes的体系结构102
5.2Pod104
5.2.1Pod的使用方式104
5.2.2Pod的资源共享104
5.2.3Pod的存储共享机制105
5.2.4Pod的网络共享机制106
5.2.5Pod与Service107
5.3Kubernetes的安装配置108
习题111第6章OpenStack113
6.1什么是OpenStack113
6.1.1OpenStack项目构成114
6.1.2OpenStack的版本演变115
6.2OpenStack的组成模块115
6.2.1计算服务模块Nova115
6.2.2网络服务模块Neutron117
6.2.3块存储服务模块Cinder118
6.2.4对象存储服务模块Swift120
6.2.5镜像服务模块Glance120
6.2.6身份认证服务模块Keystone122
6.3OpenStack的通信协议123
6.3.1RESTful API架构123
6.3.2RabbitMQ协议124
6.4OpenStack的部署、安装和二次开发126
6.4.1OpenStack的部署工具126
6.4.2OpenStack的安装过程128
6.4.3OpenStack的二次开发132
习题133第7章Hadoop135
7.1Hadoop概述135
7.1.1Hadoop的起源135
7.1.2Hadoop的版本136
7.1.3Hadoop的设计思想和特点137
7.2Hadoop生态系统组件138
7.2.1Hadoop组件概述138
7.2.2YARN资源管理器140
7.2.3ZooKeeper141
7.3Hadoop的安装142
7.3.1安装JDK142
7.3.2单机模式的安装143
7.3.3伪分布式模式的安装145
7.3.4完全分布式模式的安装150
习题154第8章云存储技术155
8.1云存储的核心技术155
8.1.1分布式存储技术155
8.1.2存储虚拟化技术157
8.1.3数据容错158
8.2对象存储技术159
8.2.1对象存储概述159
8.2.2对象存储中的数据组成160
8.2.3对象存储系统架构和原理161
8.2.4分布式存储系统Ceph162
8.2.5Ceph的架构163
8.3分布式文件系统HDFS164
8.3.1HDFS的架构165
8.3.2HDFS读取和写入文件169
8.3.3HDFS数据容错171
8.3.4HDFS HA171
8.3.5HDFS命令行接口172
8.4分布式数据库HBase174
8.4.1HBase的概念模型174
8.4.2HBase的物理模型175
8.4.3HBase数据库的架构176
8.4.4HRegionServer的工作原理178
8.4.5HBase的安装和使用179
8.5NoSQL数据库183
8.5.1关系数据库的性能问题183
8.5.2常见的NoSQL数据库184
习题185第9章分布式计算框架187
9.1分布式计算框架概述187
9.1.1基于计算切分的分布式计算187
9.1.2基于数据切分的分布式计算188
9.2MapReduce编程框架189
9.2.1MapReduce的编程思想189
9.2.2MapReduce的4个阶段191
9.2.3MapReduce的体系架构194
9.2.4MapReduce程序的编写步骤197
9.2.5编译并运行MapReduce程序200
9.3MapReduce编程实例201
9.3.1数据排序201
9.3.2数据去重202
9.3.3自然连接203
9.4Spark内存计算框架206
9.4.1Spark的特点206
9.4.2Spark的生态系统207
9.4.3Spark的核心概念207
9.4.4Spark的运行架构210
9.5Storm流计算框架212
9.5.1Storm的设计思想212
9.5.2Storm的框架214
9.5.3Storm的工作流程215
9.5.4Storm WordCount编程实例216
习题217第10章云安全技术219
10.1云计算安全概述219
10.1.1云计算的安全需求219
10.1.2安全威胁与安全要素219
10.1.3信息安全要素221
10.1.4云计算安全的体系结构222
10.2虚拟机面临的安全威胁225
10.2.1虚拟机逃逸225
10.2.2虚拟机跳跃227
10.2.3虚拟机蔓延227
10.2.4VMBR攻击228
10.3Hypervisor面临的安全威胁228
10.3.1Hypervisor的安全性229
10.3.2Hypervisor的防御方法230
10.3.3虚拟机自省框架231
10.4云数据安全231
10.4.1代理重加密算法231
10.4.2同态加密算法233
10.4.3属性加密算法234
10.4.4云授权管理和访问控制235
10.5HDFS透明加密的配置235
10.5.1透明加密概述235
10.5.2KMS配置237
习题239附录A实验240
实验1: 安装Ubuntu 16.04并上传文件到虚拟机240
实验2: Linux操作命令240
实验3: Docker的安装和基本操作241
实验4: Dockerfile和Docker Compose的使用241
实验5: Hadoop单机模式的安装241
实验6: Hadoop伪分布式模式的安装242
实验7: 编译和运行MapReduce程序242
实验8: Hadoop完全分布式模式的安装243
实验9: HBase的安装和使用243参考文献244