前端Serverless:面向全栈的无服务器架构实战pdf下载pdf下载

前端Serverless:面向全栈的无服务器架构实战百度网盘pdf下载

作者:
简介:本篇主要提供前端Serverless:面向全栈的无服务器架构实战pdf下载
出版社:电子工业出版社
出版时间:2021-05
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

产品特色

编辑推荐

适读人群 :前端架构师及对 serverless 方向感兴趣的前端工作人员。

√ 揭秘云时代计算新范式,代表阿里集团下一代技术浪潮,贡献大量前端全栈场景落地实践。

√ 本书作者是前端|Serverless技术方向的领军人物,拥有多年应用实战与问题解决宝贵经验。

√ 以务实的全栈视角介绍Serverless架构理念|实现细节,帮助前端攻城狮显著提高工程能力。

√ 阿里腾讯字节跳动三方势力争相力荐本书提出的前端可独立实现的端到端交付一体化方案。


内容简介

本书以云原生(Cloud Native)技术为背景,讲述了 Serverless 的基本原理与实战应用。书中首先探讨 Serverless 与当前云计算技术和前端技术的关系,随后分别从 Serverless 的两大能力(FaaS 和 BaaS)展开,探讨了它们的历史由来和底层原理,并且结合实际应用场景,有针对性地提供了操作指南。本书从手动构建一套基于进程的 FaaS 架构开始,之后深入剖析云计算服务的内核,阐述其背后的原理和思想,从而让读者理解下一代软件架构的本质。

本书主要从前端研发人员的视角介绍 Serverless 的原理及应用。相信无论是希望更多了解服务端技术的前端研发人员,还是已经涉足后端但希望更多了解云原生技术的全栈工程师,或是希望通过 Serverless 提升团队研发效率的架构师,都会从阅读本书中获益良多。


作者简介

杨凯(亚顿),具有10年以上前后端全栈研发经验,曾为阿里巴巴天猫精灵前端负责人,参与了天猫精灵从0到1的建设过程。专注于前端架构及用户体验,对 BFF、微前端、Serverless 等技术如何在业务中规模化应用以提高研发和协作效率、改善用户体验,具有丰富的实践经验。

精彩书评


丁宇(叔同)

【阿里巴巴研究员,阿里云原生负责人】

Serverless是云时代的计算新范式,并将引领下一代技术浪潮。目前Serverless在阿里集团内部的多条业务线,特别是在前端全栈场景中已经广泛落地,并显著提升了研发和运维的效能。本书不但介绍了Serverless的趋势和架构理念,也从实战的角度剖析了其典型应用场景和较好的应用实践。期待本书能够助力前端开发者更好地实现应用的全栈开发和运维。


张浩(Horacezhang)

【腾讯云Serverless产品负责人】

我们认为Serverless是继虚拟机、容器之后,第三代的通用计算技术,也是腾讯云战略级投入的技术赛道。Serverless让云计算像人们用水、用电一样,拥有开箱即用、灵活计费的用户体验,并得到了开发者、CIO/CTO的认可。杨凯在前端、Serverless领域一直是国内的领军人物,书中的内容也是他工作多年的经验分享,相信阅读本书定可让读者快速熟悉Serverless技术。希望更多的开发者能像杨凯一样参与到Serverless技术的推广工作中!


吴亮(月影)

【字节跳动技术学院负责人】

Serverless既是一种架构理念,也是一种实用技术。Serverless将经营者无须关注的技术细节从繁杂的业务目标中剥离出来,从而可减少研发成本,提升生产力。本书从务实的角度介绍Serverless技术的理念、应用场景、架构和构建细节,这对前端工程师具有全栈视角,以及提升工程能力、拓宽知识面非常有帮助。如果你想在前端领域走得更远,那么这是一本值得一读的技术图书。


李玉北

【字节跳动前端基础工程团队负责人】

Serverless作为一种新的架构模式,对于未来前端领域的场景拓展提供了无限的想象空间。

本书比较系统地介绍了它的发展历史,以及如何选择合适的场景来使用它、如何让它更好地在工作中落地。杨凯同学结合自己的从业经历,向读者提供了一些比较好的应用实践。相信这些内容可以给前端研发人员带来一些新的想法,也能助力Serverless技术更快、更好地在国内落地。


王光(九十)

【阿里巴巴高级前端专家,集团Node.js/Serverless方向负责人】

前端一直都是一个不断发展、不断进步的领域,充满了活力。Serverless的出现给前端带来了一体化端到端交付的基础设施前提。过去我们也曾探索全栈Node.js开发,但高企的运维成本令人望而却步。如今,Serverless架构托管了大部分的运维成本,真正使得一体化端到端交付成为可能。在我们的初步实践中,借助Serverless,可减少30%~50%的研发成本。自此,前端工程师可以独立交付业务功能,并可以更快的研发效率响应业务需求。本书内容翔实,涉及前端Serverless实践的方方面面,值得广大读者阅读、参考。


目录

第一部分 Serverless 综述

第 1 章 什么是 Serverless . 2

1.1 Serverless 的价值 .. 3

1.2 Serverless 是一种理念 5

1.3 Serverless 一词的诞生 8

1.4 CNCF Serverless 白皮书 . 10

1.5 Serverless 与前端架构 .. 12

1.6 从前端到全栈 18

本章小结 .. 19

第 2 章 何时应用 Serverless . 20

2.1 Serverless 的优势与劣势 . 20

2.2 服务端的应用场景 . 22

2.2.1 多媒体处理 . 23

2.2.2 数据库变更捕获 .. 24

2.2.3 处理 IoT 请求 . 25

2.2.4 聊天机器人 . 26

2.2.5 计划任务 .. 27

2.2.6 通用后端服务 27

2.3 前端的应用场景 .. 28

2.3.1 Web 应用 . 29

2.3.2 SSR 应用 . 29

2.3.3 移动客户端应用 .. 31

2.3.4 小程序 31

本章小结 .. 31

第 3 章 Serverless 与服务端技术 . 32

3.1 应用分层架构 32

3.2 微服务架构 . 34

3.3 云计算 37

3.4 容器化 39

3.5 NoOps . 40

本章小结 .. 42

第 4 章 Serverless 与前端技术 . 43

4.1 Backend For Frontend 43

4.2 Node.js 44

4.3 TypeScript . 45

4.4 GraphQL 46

4.5 NoBackend .. 47

本章小结 .. 47

第二部分 FaaS 技术

第 5 章 理解 FaaS 50

5.1 FaaS 的特性 .. 50

5.1.1 函数由事件驱动 .. 50

5.1.2 无状态的函数 51

5.1.3 函数应当足够简单 . 51

5.2 FaaS 的优点 .. 52

5.2.1 更高的研发效率 .. 52

5.2.2 更低的部署成本 .. 53

5.2.3 更低的运维成本 .. 54

5.2.4 更低的学习成本 .. 54

5.2.5 更低的服务器费用 . 55

5.2.6 更灵活的部署方案 . 56

5.2.7 更高的系统安全性 . 56

5.3 FaaS 的缺点 .. 57

5.3.1 存在平台学习成本 . 57

5.3.2 较高的调试成本 .. 58

5.3.3 潜在的性能问题 .. 58

5.3.4 供应商锁定问题 .. 59

本章小结 .. 60

第 6 章 第一个函数 . 61

6.1 从控制台创建 61

6.1.1 开通产品 .. 61

6.1.2 创建一个函数 62

6.1.3 调用函数 .. 64

6.2 基于命令行工具 .. 64

6.2.1 安装命令行工具 .. 64

6.2.2 身份认证配置 65

6.2.3 初始化 FaaS 项目 . 66

6.2.4 本地调试 .. 67

6.2.5 发布项目 .. 69

6.3 Serverless Framework. 70

6.3.1 初始化命令行工具 . 70

6.3.2 阿里云授权 . 71

6.3.3 开通配套服务 71

6.3.4 创建项目 .. 72

6.3.5 发布部署 .. 72

6.3.6 远程调用 .. 73

本章小结 .. 73

第 7 章 函数的生命周期 74

7.1 函数的定义 . 74

7.1.1 函数名 74

7.1.2 参数 . 75

7.2 函数的调试 . 76

7.2.1 本地调用 .. 76

7.2.2 在线调用 .. 77

7.3 函数的发布 . 77

7.3.1 配置 . 77

7.3.2 编译 . 78

7.3.3 部署 . 78

7.4 函数的更新 . 78

7.4.1 测试与发布 . 78

7.4.2 灰度与 A/B 测试 . 80

本章小结 .. 81

第 8 章 理解函数运行时 82

8.1 函数的触发 . 82

8.1.1 客户端触发器 83

8.1.2 实践:通过 Web API 调用函数 83

8.1.3 消息触发器 . 88

8.1.4 实践:通过消息触发函数 . 89

8.1.5 存储触发器 . 92

8.1.6 实践:生成上传图片的缩略图 .. 93

8.1.7 其他触发器 . 98

8.2 函数的执行 . 98

8.2.1 入口方法 .. 98

8.2.2 运行时 99

8.2.3 日志输出 100

8.2.4 实践:查询函数调用日志 .. 100

本章小结 101

第 9 章 自建简易 FaaS .. 102

9.1 基础能力 102

9.1.1 基于进程隔离运行函数 103

9.1.2 标准函数的执行能力 . 105

9.1.3 更安全的执行环境 .. 106

9.1.4 增加 HTTP 服务 . 111

9.2 进阶挑战 114

9.2.1 提升性能:通过进程池管理子进程的生命周期 .. 115

9.2.2 增强安全性:限制函数的执行时间 . 119

9.2.3 确保稳定性:对函数资源进行限制 . 122

9.2.4 提高效率:内置前端常用服务 128

本章小结 130

第三部分 BaaS 技术

第 10 章 BaaS 的由来 . 132

10.1 传统的 IT 时代:原始部落的刀耕火种 . 132

10.2 云计算时代:现代城市的集中供应 133

10.3 新一代基础设施:CaaS . 134

10.4 PaaS 的演进:BaaS . 136

10.5 Google Firebase 137

10.6 BaaS 的优势和价值 .. 142

本章小结 144

第 11 章 初始化 BaaS 应用 .. 145

11.1 注册小程序的账号. 145

11.2 配置云服务 146

11.3 初始化代码 148

11.4 添加 BaaS SDK .. 150

本章小结 151

第 12 章 数据的持久化 152

12.1 数据库设计原则 . 154

12.1.1 BSON 与数据类型 .. 154

12.1.2 三大范式与 NoSQL 数据库 .. 155

12.1.3 引用方式:规范数据模型 156

12.1.4 内嵌方式:高效数据模型 158

12.2 使用数据存储服务 159

12.2.1 通过控制台管理集合 .. 159

12.2.2 通过客户端查询数据 .. 162

12.2.3 在云函数中调用 . 162

12.2.4 数据权限管理 .. 165

12.2.5 实践:数据的 CURD . 165

本章小结 167

第 13 章 文件的存储与分发 .. 168

13.1 内容分发网络(CDN) . 168

13.1.1 性能优化的利器 . 168

13.1.2 CDN 加速的基本原理 169

13.1.3 文件存储与 CDN .. 170

13.2 使用文件存储服务 172

13.2.1 通过控制台管理文件 .. 172

13.2.2 文件的权限管理 . 173

13.2.3 使用 SDK 上传 . 174

13.2.4 实践:实现图片的上传和展示 . 174

本章小结 180

第 14 章 用户身份识别与授权 . 181

14.1 认证的演进 181

14.1.1 统一身份认证:OpenID 182

14.1.2 第三方授权登录:OAuth . 185

14.1.3 进一步完善:OIDC . 189

14.2 身份认证即服务:Auth0 .. 191

14.2.1 注册并创建租户 . 191

14.2.2 控制中心概览 .. 192

14.3 实践:实现基于 Auth0 的身份认证 . 195

14.3.1 创建并配置应用 . 195

14.3.2 创建登录页面 .. 196

14.3.3 启动 Web 服务 .. 198

14.3.4 实现登录与注销 . 198

14.3.5 用户体验改进 .. 202

14.4 实践:实现 GitHub 账号授权 .. 206

14.4.1 开通 GitHub OAuth . 206

14.4.2 配置第三方登录 . 208

14.4.3 测试与认证 209

14.5 扩展:详解 JWT 209

14.5.1 令牌的类型 210

14.5.2 构造一个令牌 .. 211

14.5.3 深入理解 JWT 原理 .. 213

14.5.4 JWT 的优势/劣势与应用场景 .. 218

本章小结 223



前言/序言

序 一

蒋江伟(小邪)

阿里云技术研发负责人/云智能基础产品事业部负责人

Serverless 属于一种架构模式,其初衷很简单,就是提升同质编程模型的研发效率。随着云计算、互联网分布式技术的发展,Serverless 也站上了重要的历史舞台。Serverless 可以大幅度简化分布式架构中遇到的挑战,在提升研发人员研发效率的同时,解决了分布式的难题——资源弹性、低成本、高可用三个关键架构要素。同时其研发质量可以很好地受控。它是企业面对灵活多变的业务需求下非常好的架构选择。比如在开放平台场景中,服务端工程师通过开放平台透出的每一个服务都可以通过简单脚本进行封装后发布为针对不同端的服务。这简单有效,并且无须关心计算、存储、网络等资源的弹性问题。同时,所发布服务的质量可以通过配套的测试流程模块来严格保障。由于脚本的运行态处在一个安全的高质量的环境,因此不容易犯错;另外,研发过程中本来需要注意的很多技术细节问题,也可通过平台来统一解决,类似于代码执行效率低、安全性问题、潜在的 bug 等都可以被提前识别出来,最终实现高效率的业务迭代。

Serverless 使得平台和逻辑被严格分离,并进一步进行了分工。其编码简单,经过适当的学习培训就能够编写出原来需要非常优秀的大量工程师才能获得的结果。Serverless 的架构理念几乎可以用在现在所有的软件研发场景、多端场景、平台开放服务场景、数据库服务场景。当然最典型的要数大数据的各种计算场景。已有证据表明,Serverless 的运用使得大数据的研发场景,效率得以 10 倍级别的提升。这使得 BI(Business Intelligence)的工程师也能利用简单编程来实现复杂的数据分析计算。阿里云上的函数计算也是典型的通用型 Serverless 平台,可以通过编写脚本实现逻辑,包括对数据的获取、逻辑处理,以及格式化输出和写入。这样对程序员的要求就降低了很多,因为不用考虑搭建服务器、搭建数据库,以及选择文件系统、配置网络、负载均衡等基础产品,也不用考虑计算存储网络资源的弹性问题、资源运维问题,而且还可按需计费。看起来唯一需要关心的就是逻辑。该平台是编写简单任务的一套非常好的平台,可应用于简单 Web 应用、监控运维、音视频处理、AI 大数据处理等场景。我曾经致力于研发一款面向普惠在线业务场景的 Serverless 平台,用来解决电商研发效率的问题。电商系统具有架构复杂度,是大型的分布式系统,对数据的一致性要求较高,同时会有高并发的流量。如果这个场景能被Serverless 平台解决,那么 Serverless 才算真正走向了“舞台”的中央。由于一些原因,直至今日我还没有完成这个产品。有的原型产品为了避免对业务本身架构的侵入,设计得过于通用,以致不够高效和一体化,像一堆工具的堆砌;而有的原型产品设计得于专用,只能满足一些特定的业务场景,以致只能简单地进行模板的替换,解决一些经常变化的逻辑,适用范围较小。

总之,本人还需要继续努力。

本书作者的经验来源于实践,其对很多问题都有深刻的思考,书中的很多内容对于读者都颇有借鉴意义。


序 二

杨皓然(不瞋)

阿里云 Serverless 负责人/阿里云函数计算负责人

过去的 10 年,云取得了巨大的成功,并深刻地改变了企业创新的方式。只需要简单的 API调用就可以启动成百上千台机器,算力的获取变得前所未有的简捷。但如何管理和有效地利用海量的算力则是极具挑战性的事情。资源水位管理、机器扩容/缩容、网络配置、安全补丁升级、搭建监控报警系统等工作过于底层化,像一条巨大的鸿沟,横亘于前端开发者和云平台之间。

前端开发者是离云最远的开发者群体。

下一个 10 年,云的使命是,赋能于 10 倍规模的开发者,让他们能够高效地利用算力构建各种类型的应用,快速迭代创新。这是云的进化动力,也是 Serverless 诞生、发展、壮大的逻辑。因此,我们看到 Serverless 产品版图在飞速扩大,计算、存储、数据库、中间件、大数据……

越来越多的新产品或者新功能已经呈现出 Serverless 的形态。各种云服务的 API,不只是为开发者提供了算力,更是成为构建应用的基本元素。Serverless 将成为云的新一代编程模型。

前端是一个飞速发展的技术领域,从基于 Ajax 的前后端分离,到基于 Node.js 的前端工程化和全栈化,每一次变革都因革命性的技术而兴起,最终又推动了前端开发模式的变化,大大拓展了前端开发者的能力范围。而 Serverless 的出现毫无疑问是前端行业迄今为止最具革命性和长远影响力的一次变革。Serverless 让前端开发者有能力驾驭云的强大力量,可基于丰富的云服务 API 构建弹性、高可用、低成本的应用(而无须管理和运维基础设施),并真正成为业务创新的核心力量。

Serverless 将填平前端开发者和云之间的鸿沟,但这不是一蹴而就的。开发者在学习Serverless 时,面临概念不清、场景不明、难以落地等困难,甚至对其还有很多误解,本书则致力于解决这些问题。作为一名经验丰富的前后端全栈专家,杨凯显然对 Serverless 所蕴含的巨大潜力以及落地挑战有非常深刻的认识。在本书中,他对 Serverless 的概念、源起、现状和未来做了清晰的阐述,也将自己非常丰富的 Serverless 实战经验进行提炼、抽象,以帮助广大开发者理解、掌握相关知识。

本书结构清晰,内容翔实。书中首先介绍了 Serverless 的概念、优劣势,以及相关联的前后端技术。接下来以前端场景中的典型场景为例,对 Serverless 架构、复杂应用构建、工程化实践进行了深入的剖析。本书既有方法论,也有实战案例,对 Serverless 技术进行了全面系统的解读,是一本为前端开发者量身定做的、值得一读的 Serverless 图书。

Serverless 将改变我们看待和使用云的方式,也将重新定义价值交付的方式。衷心祝愿本书能成为广大读者 Serverless 旅程的起点。


前 言

本书主要面向有一定 Node.js 实战经验的全栈工程师。其中的示例代码均采用 JavaScript 编写,该代码在 Node.js 12.x 的运行环境下可正常执行。因此,如果读者熟悉 Node.js 编程,就会对其中的示例代码有更充分的了解。不过对于前端研发人员来说,在熟悉 JavaScript 的基础之上,学习 Node.js 应该是非常容易的。本书的定位是让前端研发人员能够快速地了解并掌握服务端编程。因此,即使没有 Node.js 经验的前端研发人员,理解本书中的示例也并不困难。

本书并不假设读者已经具备任何云原生的研发经验,或任何云计算平台的使用经验。但如果读者在这之前已经具备相关经验,将对学习本书的内容有所助益。

示例风格

本书的部分章节将包含代码示例,它们均以统一的风格编写而成,希望读者能够将这些代码示例放在实际的运行环境中进行实践,以加强对相关内容的理解,从而可以在今后的实际工作中更灵活地应用书中的内容。另外,本书的部分章节使用了特定的云计算供应商提供的环境,作为代码示例的运行环境。由于目前 Serverless 并没有形成行业规范,因此代码示例可能并不能直接应用于不同的云计算供应商。若有需要,读者可以自行对其进行小幅调试,以适配不同的云计算供应商。

内容结构

本书整体分为三大部分。

第 1 部分(第 1~4 章)将从 Serverless 的诞生和定义开始,讲述什么是 Serverless 思想,以及在云计算时代为什么需要 Serverless。通过对本部分的学习,读者可从宏观层面感性认识到Serverless 与当前已有技术的定位关系,明确它与这些技术的合作模式,并可更全面地认识到Serverless 给研发和运维所带来的巨大变化。

第 2 部分(第 5~9 章)将着重探讨 FaaS 部分,它是 Serverless 核心思想的实际应用技术。我们将首先在云计算供应商所提供的 FaaS 产品中体验它与传统研发模式的不同,再深入其内部,了解它的核心设计原理和思想,最后动手实践一套简单的 FaaS 架构。通过对本部分的学习,读者可更透彻地理解 FaaS 的内部机制,以便在实际业务场景中更灵活地应用 FaaS。

第 3 部分(第 10~14 章)则将视角转向 BaaS,它是 Serverless 的另一大分支体系。BaaS 的出现,让应用的研发成本大幅度降低,并使得如数据库、缓存等服务端技术的使用变得十分便捷。本章将从 BaaS 的基本理念开始介绍,幷通过实践,讲解最核心的三大 BaaS 产品,即数据库、文件系统和用户身份验证系统。通过对本部分的学习,读者可掌握 BaaS 的使用技巧,从而在今后的应用研发过程中只需要关注前端部分的工作,而后端的各种服务端技术则完全通过 BaaS API 来实现。

章节概览

第 0 章从 Serverless 对前端的颠覆性影响入手,从三个方面剖析了 Serverless 的价值导向与实践意义,为读者开始学习后面的完整体系,奠定了认知基础与定位坐标。

第 1 章将从 Serverless 的起源谈起,介绍其基本理念以及 CNCF Serverless 白皮书对它的定义,并从广义定义和标准定义两个角度来阐述什么是 Serverless 架构。随后,将结合前端架构的演进,探讨为什么在基于 BFF 前后端分离的技术上,前端应该使用 Serverless 架构,以及它的价值和意义。

第 2 章介绍 Serverless 架构的优势与劣势,通过案例讲解了 Serverless 在服务端与前端领域中的不同应用场景。希望读者在了解了 Serverless 架构的特性和优势/劣势后,能够基于这些特点,探索 Serverless 的更多应用场景。

第 3 章将介绍 Serv