序 一
蒋江伟(小邪)
阿里云技术研发负责人/云智能基础产品事业部负责人
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