Serverless核心技术和大规模实践

978-7-115-60529-0
作者: ByteFaaS函数计算团队杨华辉陈辉吴桂勇阔鑫李博彭璟文于童
译者:
编辑: 孙喆思

图书目录:

详情

本书着眼于 Serverless 方向,重点介绍 FaaS 的架构和实现原理。本书从 Serverless 的理念和基础知识出发,介绍业内具有代表性的 Serverless 产品,进而引出字节跳动函数计算产品 ByteFaaS,并介绍 ByteFaaS 的定位、特点和生态,以及整体架构等;详细介绍传统 FaaS 架构,包括 FaaS 控制面、FaaS 数据面、FaaS 运行时、FaaS 触发器、FaaS 弹性伸缩等核心组件的设计与实现;阐述 FaaS 助推 PaaS 演进的思路和技术实践,并延伸到 FaaS 轻量级函数与云边一体;介绍 Serverless 在字节跳动的落地实践和对 Serverless 未来的展望。

图书摘要

版权信息

书名:Serverless核心技术和大规模实践

ISBN:978-7-115-60529-0

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


版  权

著    ByteFaaS函数计算团队

责任编辑 孙喆思

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e60529”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

内 容 提 要

本书着眼于Serverless方向,重点介绍FaaS的架构和实现原理。本书从Serverless的理念和基础知识出发,介绍业内具有代表性的Serverless产品,进而引出字节跳动函数计算产品ByteFaaS,并介绍ByteFaaS的基本能力和特点,以及整体架构等;详细介绍传统FaaS架构,包括FaaS控制面、FaaS数据面、FaaS运行时、FaaS触发器、FaaS弹性伸缩等核心组件的设计与实现;阐述FaaS助推PaaS演进的思路和技术实践,并延伸到FaaS轻量级函数与云边一体;介绍Serverless在字节跳动的落地实践和对Serverless未来的展望。

本书对Serverless领域的用户、开发者和架构师而言都是一本不错的参考图书,希望阅读本书可以激发读者拓展Serverless领域的热情,共同建设Serverless生态。

前  言

云计算是把基础设施抽象成服务便捷地提供给使用方,开发者利用云计算提供的各种能力,组合之后用来支撑业务逻辑的表达。Serverless进一步抽象,将所有服务器配置、维护、更新、扩展和容量规划都交由Serverless平台处理。Serverless在字面上表达了“Server+Less”的理念,希望开发者逐渐不需要关注服务器,只需关注业务逻辑,以达到敏捷开发、高弹性、低成本的目标。

Serverless理念结合业界实践,包含函数计算(FaaS)、特定应用Serverless(BaaS)等产品形态,其中FaaS作为各个基础组件的“黏合剂”,支撑了Serverless的计算体系,是整个体系最重要的组成部分。字节跳动有大规模实践FaaS的经验,希望通过本书系统的分享,向读者展示字节跳动在Serverless领域的核心技术和大规模实践。

本书的内容组织

本书共11章,着眼于Serverless方向,重点介绍FaaS的架构和实现原理。我们建议读者先阅读前两章,了解相关背景,再开始学习FaaS的工作原理和系统实现。

第1章简要介绍Serverless基础概念和理念,列举Serverless技术特点、技术能力和应用场景。在阅读第1章时,读者可以结合日常的开发工作进行联想,形成对Serverless应用的初步认知。

第2章首先列举几个具备代表性的业界产品和开源项目,帮助读者感受不同产品的发展历程和侧重点;然后进一步引出字节跳动函数计算产品ByteFaaS,并针对其架构和应用规模等做整体介绍,帮助读者具象地理解Serverless在实际场景中的落地形式。

第3章详细介绍FaaS控制面,包含多地区统一控制面、容灾设计、发布上线体系、可观测性以及开发体验等方面的内容。

第4章详细介绍FaaS数据面,从数据面整体架构出发,对函数实例管理、函数流量调度、函数冷启动优化、函数代码分发等方面展开介绍。

第5章详细介绍FaaS运行时,包括平台提供的函数运行时、函数运行时隔离技术以及函数运行时性能优化等方面的内容。

第6章详细介绍FaaS触发器,包括HTTP触发器、服务发现触发器、定时触发器等,并针对字节跳动应用规模非常大的MQ触发器场景进行重点介绍。

第7章详细介绍FaaS弹性伸缩,包括其策略设计、指标系统设计、系统的分片架构等内容。

第8章详细介绍FaaS助推PaaS演进,包括利用FaaS开发原生应用的解决方案、多协议支持、融入字节跳动微服务治理体系ByteMesh以及异步长任务支持等内容。

第9章详细介绍FaaS轻量级函数与云边一体,包括轻量级函数、WebAssembly轻量级函数运行时、JavaScript轻量级函数运行时、精简架构、云边架构、存储服务以及开发者工具方面的内容。

第10章介绍Serverless在字节跳动的落地实践,包括解决Serverless资源和性能的瓶颈、基于Kubernetes的云原生体系、利用高可用的触发器和自动扩缩容承载大规模消费场景、利用通用Serverless多协议支持PaaS演进、利用轻量级函数打造云边一体架构等方面的内容。第10章是对第3章到第9章所介绍的技术的具体实现的呼应。

第11章对Serverless进行展望,包括对规范标准、通用型Serverless、云边一体等方面的畅想。希望读者在阅读第11章时会感到意犹未尽,因为Serverless体系的演进还在继续,我们期待与读者一起见证Serverless未来的发展。

本书的读者对象

本书对Serverless领域的用户、开发者和架构师而言都是一本不错的参考图书,希望阅读本书可以激发读者拓展Serverless领域的热情,共同建设Serverless生态。

致谢

感谢字节跳动基础架构函数计算团队全体成员的辛勤工作,支撑FaaS在字节跳动得以大规模落地,使得字节跳动的FaaS产品可以不断地被打磨、积累、沉淀。感谢本书的作者、字节跳动的技术运营人员、人民邮电出版社的工作人员,在大家的共同努力下,本书得以高质量地呈现给读者。

您还可以扫码右侧二维码, 关注【异步社区】微信公众号,回复“e60529”直接获取,同时可以获得异步社区15天VIP会员卡,近千本电子书免费畅读。

作者简介

杨华辉:字节跳动基础架构函数计算团队负责人,主要关注分布式系统、容器化、高可用、可扩展架构设计等领域,具备大规模系统的落地实践经验。

陈辉:就职于字节跳动Serverless团队,目前主要负责大规模二进制分发、异步任务、网关服务、控制面系统以及FaaS场景下服务网格生态等相关工作。

吴桂勇:就职于字节跳动Serverless团队,目前主要负责FaaS数据面架构、系统高可用方面的工作。

阔鑫:就职于字节跳动Serverless团队,目前主要负责字节跳动内部微服务上的FaaS方案推进和火山引擎FaaS类型产品的迭代。

李博:就职于字节跳动Serverless团队,目前主要负责FaaS平台侧、触发器、弹性伸缩方面的工作。

彭璟文:加入字节跳动以来,一直专注于Serverless领域,目前主要负责FaaS数据面架构、轻量级函数和云边一体方面的工作。

于童:入职字节跳动后,负责CronJob平台研发和FaaS平台研发,目前主要专注于边缘计算云边一体化、轻量级函数方向,负责整体稳定性和可用性相关工作。

第1章 Serverless基础知识

Serverless是从面向基础设施到面向应用的演进,本章将介绍Serverless的基础知识和应用场景。

1.1 Serverless基础概念

Serverless理念从狭义的解释逐步延伸出更广阔的含义,不过其中蕴含的技术特点有相对统一的共识。下面我们从Serverless理念出发,列举并阐述Serverless技术特点,进而引出在Serverless领域比较具象的FaaS(Function as a Service,函数即服务)、BaaS(Backend as a Service,后端即服务)的产品形态。

1.1.1 Serverless理念

Serverless的概念诞生已久,从2012年Serverless概念首次被提出,到2014年Amazon发布AWS Lambda产品实践Serverless架构模式,再到2018年Gartner将Serverless Computing列为十大未来影响基础设施和运维的技术趋势之一,业界基本认可了Serverless。回顾其10年的发展历程,各大云厂商相继推出Serverless的云产品,开源生态中Serverless的项目也崭露头角,从最初的概念定义到发展中的概念重塑,Serverless逐渐被赋予更加广阔的含义。

1.1.2 Serverless技术特点

Serverless在演进过程中催生了Serverless生态极致弹性、精益成本、快速交付的特性,能助力业务架构的迭代升级。与传统架构相比,Serverless有如下特点。

1.按需使用

Serverless让用户不再关心底层基础设施的产生和管理,Serverless平台会根据服务的实际流量创建计算和存储资源,当服务没有流量时,对应的资源会被自动回收,用户只需要对实际流量消耗的资源进行付费。这种按需使用和付费方式的转变,让整体的资源分配从计划模式走向按需分配模式,不仅让用户受益,也让Serverless平台的运营者可以充分地利用统一调度的优势,不断优化系统,最终达到资源使用效率最大化的目标。

2.弹性伸缩

大多数计算产品根据应用负载和算力来进行扩缩容,而Serverless平台针对请求层面弹性伸缩,其粒度更细。Serverless平台可以获取足够多的请求周边数据,如服务负载信息、请求延迟信息等,对应用实例进行横向和纵向的扩缩容。横向的扩缩容是对流量的反应,更多的流量意味着需要更多数量的实例来承载;纵向的扩缩容是对单个应用实例资源的调整,在单实例、多并发的场景下可以有效地减少应用碎片和额外的系统开销。在平台方收集足够的历史数据后,可以利用机器学习等方式,对流量进行预测来指导扩缩容,提前扩缩容的动作可以让应用实例更加从容地面对流量,减少冷启动请求的“毛刺”,从而使服务状态更加稳定。

3.事件驱动

应用程序被托管在Serverless平台之上,开发者需要通过事件驱动(event driven)的方式来触发对应用程序的调用,Serverless平台一般会提供各式各样的触发器,来联动打通各个基础架构组件。例如针对在线调用,Serverless平台会提供一个网关触发器来承载业务流量。开发者可以轻而易举地接入特定的触发源,更深层次的用意是让Serverless平台有能力感知和控制流量的流入。对于流量的强管控,可以让Serverless平台进行一些并发的控制、限流、无流量的缩零、冷启动流量的实例拉起等操作。因此,事件驱动机制自然成为Serverless中新的计算范式。

4.函数运行时

业内有一个说法:“如果你的PaaS能够在20ms内启动实例并能运行0.5s,就可以将其称为Serverless。”这种说法比较直观,其底层逻辑是表达一种瞬生瞬灭的能力,即当服务实例可以在极短的时间内产生和消亡时,弹性伸缩就会达到极致的效果。快速启动的前提是,应用程序需要在“沙箱”中运行,在不同的应用场景中有不同等级的资源隔离需求,运行时沙箱需要足够轻量,以尽量减少服务运行时所需的系统开销,保证启动速度足够快。

运行时的分层体系如图1-1所示,从上至下,不同的语言会有相应的语言运行时(runtime),解释型语言的用户代码会在运行时被动态加载到各种语言提供的语言运行时中;编译型语言一般会提供一些代码包,一起编译、打包到用户的应用程序中。函数运行时的分层体系针对需要强隔离的场景,会使用轻量虚拟机方式进行隔离;针对私有云内部场景,为了减少虚拟机监控器(hypervisor)的消耗,会使用容器技术中常用的cgroups和namespace进行一些资源基础限制和隔离;针对一些极致轻量级场景,会利用进程沙箱机制,如WebAssembly、V8等技术来进行隔离,以在有限的接口表达和极致冷启动方面寻求最佳平衡。底层宿主机可以使用传统物理机,也可以使用裸金属方案达到底层资源的弹性、灵活供给。

图1-1 运行时的分层体系

1.2 Serverless技术能力

Serverless领域包含FaaS和BaaS。BaaS涵盖广义的第三方服务,例如经典的对象存储服务、数据库存储服务、缓存服务等。BaaS不是本书介绍的重点,本书介绍的重点是FaaS,FaaS是Serverless领域中计算引擎的一个重要产品形态,其遵循服务函数化理念,支持一键创建和部署函数,能够屏蔽资源和运维细节,极大地降低开发者的开发和运维成本。本书将重点介绍FaaS的高可用架构和核心技术,从大规模落地实践出发,介绍触发器和弹性伸缩的实现原理,接着探讨以应用为中心的广义Serverless演进的技术突破,从云上的经典FaaS运行时到轻量级运行时,赋能云边一体的关键技术落地实践。

Serverless以FaaS作为底层各个基础组件的“黏合剂”,对接消息队列、对象存储事件、数据库binlog等,高效完成事件处理领域的开发需求。Serverless支持微服务体系、HTTP(hypertext transfer protocol,超文本传送协议)服务、RPC(remote procedure call,运程过程调用)服务、异步模式,支持PaaS(Platform as a Service,平台即服务)到FaaS的演进。FaaS产品主要提供的技术能力如下:

支持Go、Python、Node.js、Rust、Java等定义函数或者服务,提供依赖管理和部署发布的能力;

支持消息队列、对象存储触发器、数据库binlog触发器、定时触发器以及HTTP调用;

支持原生HTTP,用户可搭建原生HTTP应用;

支持gRPC/Thrift RPC,用户可搭建原生RPC应用;

支持轻量级运行时WebAssembly、V8,以及配套的Global KV、Local Cache等存储产品,部署云端和边缘机房。

1.3 Serverless应用场景

Serverless透过比较成熟的FaaS产品展示和具体的技术能力,在行业内衍生出各种应用场景和最佳实践。Serverless主要有如下应用场景。

1.微服务

开发者可以使用FaaS产品提供的模板框架,填充业务的处理逻辑代码,轻而易举地开发和部署一个服务。通过API(application programming interface,应用程序接口)网关(gateway)的形式原生支持在线流量的入口,可以完成微服务之间的调用。同时FaaS产品会提供原生的监控、日志、报警等功能,帮助开发者完成端到端的服务落地。值得一说的是,以上的微服务能力不仅包含HTTP框架类的应用,也涵盖主流gRPC/Thrift RPC等框架的应用,进一步扩展了微服务在FaaS产品上的表达能力。

2.流式处理消息

在流式处理消息的场景中,一般会有消息队列产品作为中间件来缓存消息,所以消费消息队列是在日常开发中经常需要考虑的场景。针对各种消息队列产品,消费的逻辑可以被抽象成各类触发器,作为FaaS产品的事件触发源。用户就无须关心消费消息队列的复杂逻辑,特别是在多机房容灾、消费调度分配等场景,平台提供消费的托管型方案,用户只需关心处理数据的代码逻辑,然后FaaS产品自动扩缩容,以应对波峰、波谷场景,获得快速接入、敏捷开发、低成本和少运维的收益。

3.视频编解码任务处理

视频文件一般存放在对象存储系统中,FaaS产品提供的对象存储触发器,可以直接进行业务逻辑的联动,例如自动感知文件的新增事件,使用FaaS产品进行对应的业务逻辑处理加工,等等。视频编解码是典型的资源密集型短任务场景,函数计算可以控制单实例的并发处理,按需进行横向扩缩容,根据视频文件的流量来进行自动的资源供给,针对短任务的调度和运行是FaaS绝佳的应用场景之一。

4.小程序开发

小程序开发是面向固定生态的开发模式,程序的鉴权、接入、存储、通知等功能基本上是标配。在FaaS产品上开发小程序生态,一般会内置周边生态的支持,提供SDK(software development kit,软件开发工具包)对接各种常用BaaS产品,同时FaaS产品敏捷开发、快速发布的特点可以让小程序开发者迅速地把想法落地、快速迭代。如要进一步考虑后续小程序的上线运营、热点事件的流量不确定性,可以利用Serverless自动伸缩的能力,解放运维负担。因此,小程序开发也是Serverless的一个重要应用场景。

5.批处理异步任务

视频编解码的短任务是适合FaaS产品的一个天然应用场景,一般短视频或者经过切片后的视频短任务处理时间比较短,可以使用传统的同步请求模式,但是不乏一些场景需要FaaS产品单个请求有更长的执行时间,并且用户希望能更简单地管理任务。通过FaaS产品异步任务的支持,用户只需要提交任务,已经提交的任务会在FaaS产品的内部系统中进行存储和排队,按照服务设置的节奏来进行分发处理。使用FaaS产品批处理异步任务,用户无须在FaaS之外维护额外的存储队列,可减少组件的运维负担。批处理异步任务一般具有瞬时提交的特点,其瞬间的波峰、波谷尤为明显,这也比较契合Serverless的能力特点。

6.定时任务

定时任务也是一个日常开发中比较常见的场景需求,在FaaS产品中会使用定时任务,因为FaaS产品具有快速启动的特点,定时任务的时效可以得到更好的保障。另外,在一些对时效要求严苛的场景,系统可以在定时任务被触发之前,预先冷启动实例,如此触发时间的准确性就会得到更好的保障。

7.边缘场景

FaaS产品本身以轻量级、快速冷启动著称。在边缘场景中,FaaS产品的典型特征是边缘机房资源相对中心机房而言明显受限,在有限的资源供给下,需要更加轻量的运行时来降低业务请求之外的系统消耗,同时边缘场景大部分是针对延迟敏感型应用进行优化的,需要整体轻量的架构和精简的请求链路来承载业务的请求,才可以达到毫秒级别的冷启动能力。针对边缘场景,以WebAssembly、V8作为运行时基础的精简架构,成为一个明显的趋势。在获得Serverless特性的基础上,追求更加极致的冷启动性能和降低系统开销,同时保证多租户的安全隔离能力,是边缘场景下FaaS产品的建设目标。

1.4 本章小结

本章从Serverless的理念出发,概述了Serverless的按需使用、弹性伸缩、事件驱动和函数运行时等技术特点,引出了比较主流的FaaS、BaaS的概念,本书之后的章节将以FaaS平台作为主要的介绍重心,对其架构和实现方面进行深入介绍。针对Serverless提供的技术能力,本章列举了 Serverless 的比较主流的几个应用场景并对其进行了说明,希望通过对这些应用场景的介绍,让读者有一些启发,引导读者进一步拓展 Serverless 的技术能力和应用边界。

读者服务:

微信扫码关注【异步社区】微信公众号,回复“e60529”获取本书配套资源以及异步社区15天VIP会员卡,近千本电子书免费畅读。

相关图书

YOLO目标检测
YOLO目标检测
深入Activiti流程引擎:核心原理与高阶实战
深入Activiti流程引擎:核心原理与高阶实战
深入浅出Windows API程序设计:编程基础篇
深入浅出Windows API程序设计:编程基础篇
Spring Cloud微服务架构实战
Spring Cloud微服务架构实战
读源码学架构:系统架构师思维训练之道
读源码学架构:系统架构师思维训练之道
设计模式之美
设计模式之美

相关文章

相关课程