《云计算与虚拟化技术丛书 深入浅出Serverless:技术原理与应用实践》
云计算与虚拟化技术丛书
深入浅出Serverless:技术原理与应用实践
陈耿 著
Preface 前 言
容器技术是这几年IT界的热门话题,各行各业都在研究如何通过容器提升企业软件开发、交付和管理的效率。Docker和Kubernetes的成功使得仅凭几个人也可以轻易管理一个包含上千台机器的庞大的计算集群,并且在这个庞大的集群上部署各种各样的应用。云计算催生了容器技术,而容器技术也改变了云计算。凭借在Linux和开源社区的先天优势,这几年Red Hat在容器这一领域风光无限。我在Red Hat参与了各种类型的容器项目,见证了客户使用容器平台满足其各种各样的需求。容器技术的应用可谓百花齐放,范围涉及微服务、DevOps到最近的人工智能和深度学习。在当前容器技术如此火热之际,我突然想,容器会是云计算的终点吗?答案当然是否定的。如果容器不是终点,那么什么东西会成为容器之后的又一个技术热点呢?什么样的技术会让云计算更进一步,让IT及其所服务的各个行业的生产效率更上一层楼呢?
我带着疑问进行了思考和研究。经过一系列调研以及和业界一些朋友的讨论后,我认为Serverless将会是继容器之后又一项改变云计算的技术。回顾云计算发展的历程,从物理机到虚拟机,从虚拟机到容器,业界的关注点其实是一点一点地向上层移动的。通过各种技术手段,我们总是努力降低花费在管理基础设施上的时间和精力,以便将更多的时间放在应用和业务上。因此,过去十多年的云计算的历程,其实是一个“去基础架构”的过程。这个过程让用户可以更快速、更简单、更高效地将想法变成应用,变成在线的服务。
Serverless符合云计算发展的方向,让用户可以将关注点放到具体的业务功能上,而不是底层的计算资源上。Serverless特有的模式存在着潜在的巨大价值。那么,Serverless会取代容器吗?我相信不会。虽然Serverless架构在一些特定的领域会大放异彩,但是容器在未来仍然会是一种重要的应用分发和部署格式。此外容器也将成为许多Serverless平台的基础技术,成为Serverless实现的基石。在未来,Serverless与容器将会有许多结合点。
Serverless还是一个相对较新的技术领域,各种新的观点、技术和开源项目还在不断酝酿和涌现。作为一名架构师,除了要解决企业当下和近期可能面对的问题外,还需要有一定的前瞻性,掌握未来架构可能的选项,才能对未来的架构做出合理决策。作为一名工程师,必须要紧跟技术的脚步,让自己在不断变化的IT洪流中屹立不倒。本书写作的初衷正是为希望了解Serverless领域现状的架构师和技术人员提供指南和参考。
本书主要内容
本书是一本介绍Serverless技术的书籍,可以让想了解Serverless的读者快速了解Serverless的概念和原理。此外,书中还用大量的篇幅介绍了当前业界最新的Serverless平台、框架和工具的原理、架构和使用细节,内容涵盖了公有云和私有云的Serverless平台。
全书共分为11章,循序渐进、深入浅出地讲解Serverless相关的知识和技术。
前三章重点介绍Serverless的概念和原理,为读者构建Serverless知识体系打下理论基础。第1章介绍了Serverless的基础知识,让读者了解Serverless的概念及其特点。Serverless的存在不能脱离这个时代,所以第2章详细讨论了Serverless涉及的云计算的各种技术,如微服务、容器和DevOps等,让读者对Serverless的理解更加深入。在理解Serverless的基础上,第3章介绍了业界目前的Serverless的各类平台、工具和框架的实现,让读者对该技术领域的现状有更清晰的认识。
第4章和第5章详细介绍了公有云Serverless平台的技术细节。以AWS Lambda和微软的Azure Functions为例,向读者介绍了当前主流的公有云厂商在Serverless领域的实现。
第6章是容器技术的速成教程。容器技术是当下云计算重要的基础技术,也是许多Serverless平台的实现基础。通过本章读者可以快速了解当下热门的容器技术(Docker和Kubernetes)的原理和基本使用技巧。
第7~10章针对私有云的Serverless计算平台,分别详细介绍了OpenWhisk、Kubeless、Fission及OpenFaaS的系统架构、核心概念以及使用技巧,帮助读者了解各类Serverless平台的技术特点。
第11章针对Serverless技术的落地给出了具体建议,总结了本书对Serverless技术的观点,并对Serverless技术的未来进行了展望。
本书亮点
本书是关于Serverless与容器的原创著作。Serverless是当前的一个热门话题,但是大家对Serverless概念并不了解。本书整理了业界当前对Serverless的主流观点,梳理了Serverless技术发展的现状,是一个系统的Serverless指南。
最新资讯。原创的Serverless著作,为读者呈现业界最新的观点和知识。
纵览大局。对Serverless的介绍结合了当下云计算的背景,也结合了容器技术。
细致入微。在介绍原理和观点的同时也讲解了大量Serverless平台的技术细节。
互动实操。提供了大量可操作的实验步骤,让读者可以动手体验,加深理解。
本书读者对象
本书介绍了Serverless架构的概念、原理以及当前公有云和私有云领域的众多Serverless平台的实现,能帮助云计算、容器等领域的软件架构师和技术人员快速了解Serverless这一领域的发展现状,为企业和组织的Serverless技术选型、转型和落地提供参考。此外,本书涵盖了大量关于当前云计算、容器和Serverless领域的观点和话题,因此,也适合作为技术爱好者开阔眼界、增长见闻的指南。
如何阅读本书
如果读者是初次接触Serverless的相关知识,推荐按顺序阅读本书的各个章节。通过本书既定的章节顺序,可以循序渐进地了解Serverless的相关原理和实现。如果读者对Serverless领域已有一定的研究,则可以按需直接阅读感兴趣的章节。
本书引入了大量与Serverless、云计算、容器和开源软件相关的话题,并针对相关话题给出了相应的参考资料。笔者希望本书是读者研究Serverless和云计算相关技术的一张地图,希望通过本书帮助读者找到更多对自身有价值的开源项目和技术。
关于勘误
本书花费了编辑和笔者大量的时间和精力,书中的文字和图表都经过细心斟酌和校对,所有示例的命令和代码都经过笔者亲自验证。但是由于水平有限,且时间仓促,书中难免存在一些瑕疵和需要改进的地方,欢迎读者将对本书的意见和建议发送至笔者的邮箱(nicosoftware@msn.com)进行交流讨论。读者也可以关注笔者的微信公众号“云来有道”,获取关于本书最新的信息和勘误。
致谢
本书的出版得到了许多朋友的帮助。衷心感谢机械工业出版社华章公司的杨福川老师和李艺老师对本书的策划和编审。两位编辑老师为本书的出版花费了大量心血。此外,也感谢我的妻子丽金。她是本书的第一位读者,为本书提供了许多有益的建议,并帮助审校了书中的所有文字。本书的创作占用了我大量的业余时间,感谢她的支持和包容。
谨以此书献给我的妻子和两个宝贝。
Contents 目 录
前言
2.9.2 Serverless与Cloud Native29
第4章 AWS Lambda55
4.1 AWS55
4.2 AWS Serverless56
4.3 AWS Lambda概述57
4.4 第一个Serverless应用58
4.4.1 获取AWS账号58
4.4.2 AWS Lambda控制面板59
4.4.3 创建函数61
4.4.4 编辑函数62
4.4.5 测试函数63
4.4.6 外部访问63
4.4.7 运维监控66
4.4.8 回顾66
4.5 权限控制66
4.5.1 IAM67
4.5.2 策略68
4.5.3 角色68
4.6 编程模型69
4.6.1 代码开发69
4.6.2 Handler70
4.6.3 执行上下文70
4.6.4 日志输出71
4.6.5 异常处理72
4.6.6 无状态72
4.7 事件驱动73
4.7.1 事件源73
4.7.2 触发模式74
4.8 日志监控75
4.9 开发辅助77
4.9.1 环境变量77
4.9.2 标签77
4.9.3 版本控制78
4.10 运行限制78
4.10.1 资源限制79
4.10.2 并发控制79
4.11 配置与部署79
4.12 本章小结81
第5章 Azure Functions83
5.1 Microsoft Azure83
5.2 Azure Functions概述85
5.3 创建Azure Serverless应用86
5.3.1 注册Azure账号86
5.3.2 Azure控制台87
5.3.3 函数应用88
5.3.4 创建函数90
5.3.5 调用函数92
5.3.6 日志与监控93
5.4 Azure Functions命令行95
5.4.1 安装命令行95
5.4.2 创建本地函数96
5.4.3 测试本地函数97
5.4.4 发布至公有云98
5.5 深入了解Azure Functions99
5.5.1 函数应用设置99
5.5.2 Trigger与Bindings101
5.5.3 函数代理103
5.5.4 Slot104
5.6 私有云部署105
5.7 本章小结107
第6章 容器技术基础108
6.1 什么是容器108
6.1.1 容器109
6.1.2 容器镜像110
6.1.3 镜像仓库110
6.1.4 容器编排111
6.1.5 容器与Serverless111
6.2 Docker111
6.2.1 Vagrant111
6.2.2 VirtualBox112
6.2.3 安装Docker113
6.2.4 运行容器114
6.2.5 构建容器镜像116
6.2.6 分享镜像117
6.3 Kubernetes基础118
6.3.1 命名空间120
6.3.2 Pod120
6.3.3 Service120
6.3.4 Deployment120
6.3.5 ReplicaSet121
6.3.6 网络121
6.3.7 Ingress121
6.3.8 交互工具122
6.4 构建Kubernetes环境122
6.4.1 启动Vagrant Box123
6.4.2 修改默认域124
6.5 Kubernetes实战124
6.5.1 部署容器124
6.5.2 弹性扩展126
6.5.3 服务发现127
6.5.4 资源组织128
6.5.5 容器调度129
6.6 本章小结131
第7章 OpenWhisk132
7.1 OpenWhisk项目132
7.2 Hello Whisk133
7.3 逻辑架构135
7.3.1 Namespace136
7.3.2 Package136
7.3.3 Action137
7.3.4 Feed141
7.3.5 Trigger141
7.3.6 Rule142
7.4 系统架构143
7.5 Kubernetes部署146
7.5.1 准备Kubernetes集群146
7.5.2 集群基础设置146
7.5.3 创建访问入口149
7.5.4 部署组件149
7.5.5 加载系统配置153
7.5.6 测试集群153
7.5.7 删除集群154
7.6 Helm部署155
7.6.1 安装Helm155
7.6.2 环境配置155
7.6.3 部署Chart156
7.6.4 管理应用156
7.7 蛋糕管理服务156
7.7.1 开发环境157
7.7.2 准备数据库157
7.7.3 定义Action157
7.7.4 创建Package159
7.7.5 部署Action160
7.7.6 发布API161
7.8 本章小结162
第8章 Kubeless163
8.1 Kubeless项目163
8.1.1 系统架构164
8.1.2 运行时165
8.2 Kubeless概述165
8.2.1 部署Kubeless165
8.2.2 配置客户端166
8.2.3 部署函数167
8.2.4 Kubeless UI168
8.3 Function169
8.3.1 函数部署170
8.3.2 函数调用172
8.3.3 资源限制172
8.3.4 自动扩展173
8.4 Trigger173
8.4.1 HTTP Trigger173
8.4.2 Cronjob Trigger175
8.4.3 Kafka Trigger175
8.4.4 NATS Trigger178
8.5 本章小结179
第9章 Fission180
9.1 Fission项目180
9.1.1 逻辑架构180
9.1.2 系统架构181
9.2 部署Fission182
9.2.1 安装Helm182
9.2.2 部署Fission Chart182
9.2.3 命令行工具183
9.2.4 Hello Fission183
9.3 深入探讨Fission184
9.3.1 Environment185
9.3.2 Function187
9.3.3 Package188
9.3.4 Trigger191
9.4 执行模式192
9.4.1 Pool-based模式192
9.4.2 New Deploy模式193
9.5 Workflows194
9.5.1 Workflows定义194
9.5.2 配置Workflows195
9.5.3 Fortune Whale195
9.6 本章小结197
第10章 OpenFaaS199
10.1 OpenFaaS项目199
10.1.1 OpenFaaS社区200
10.1.2 系统架构200
10.2 初识OpenFaaS200
10.2.1 部署组件201
10.2.2 命令行工具202
10.2.3 创建函数202
10.2.4 图形界面203
10.3 OpenFaaS函数203
10.3.1 抽象方式203
10.3.2 函数模板204
10.3.3 创建函数205
10.3.4 构建函数206
10.3.5 推送镜像207
10.3.6 部署函数207
10.4 Watchdog208
10.4.1 工作原理208
10.4.2 配置Watchdog209
10.4.3 of-watchdog210
10.5 监控210
10.5.1 监控指标210
10.5.2 监控面板210
10.5.3 监控预警213
10.6 弹性扩展214
10.6.1 基于Alertmanager扩展214
10.6.2 基于HPA扩展215
10.7 函数应用市场215
10.8 本章小结217
第11章 Serverless的落地与展望218
11.1 Serverless的落地218
11.2 Serverless平台建设219
11.2.1 公有云219
11.2.2 私有云220
11.2.3 混合云220
11.3 Serverless应用架构转型223
11.3.1 开发模式223
11.3.2 设计原则225
11.3.3 迁移与重构226
11.4 Serverless的未来227
11.4.1 建立行业规范228
11.4.2 完善工具链229
11.4.3 深入结合容器229
11.5 本章小结230
后记232
- 点赞
- 收藏
- 关注作者
评论(0)