彭璟⽂⾼级技术专家
个⼈介绍
彭璟⽂字节跳动 ⾼级技术专家
加⼊字节跳动以来,⼀直投⼊在 Serverless 领域,主要负责 FaaS 数据⾯架构、轻量级函数和云边⼀体⽅向。曾就职于⻘云QingCloud,先后参与云平台、对象存储、企业级云盘的设计与研发⼯作,在公有云场景有丰富的实践经验。
字 节 F a a S 平 台 介 绍
1
W e b A s s e m b l y 介 绍
2
⽬录
字 节 F a a S 的 W e b A s s e m b l y 运 ⾏ 时
3
CONTENTS
精 简 架 构
4
01 字节 FaaS 平台介绍
字节 FaaS 平台介绍 — 内外场技术统⼀
⼀套技术⽅案⾯向不同⽬标⽤户
•内场 ByteFaaS•ToB veFaaS
字节 FaaS 平台介绍 — ⽬前内场服务规模
字节 FaaS 平台介绍 — 经典 FaaS 运⾏时
•通常采⽤ VM / Container 隔离•兼容性好,⽀持⼏乎所有原⽣⼆进制可执⾏程序•启动慢(相对轻量级函数来说)•冷启动百毫秒到数秒•突发流量扩容慢•资源开销⾼•⻓尾函数资源占⽤•资源受限的场景,如边缘
字节 FaaS 平台介绍 — 轻量级函数运⾏时
•采⽤轻量隔离⽅案
•WebAssembly•V8 Isolate•启动速度快,1ms•资源开销低•⽀持常⽤语⾔,如 Go、JavaScript•⽀持部署到边缘机房•适⽤场景•前端 SSR、BFF、后端 API、MQ 消费•实时性要求⾼•突发流量、波峰波⾕、⻓尾函数
字节 FaaS 平台介绍 — 轻量级函数运⾏时
字节 FaaS 平台介绍 — 轻量级函数运⾏时
字节 FaaS 平台介绍 — 运⾏时对⽐
02 WebAssembly 介绍
WebAssembly 介绍 — 什么是 WASM
WebAssembly 定义了⼀种是⼀种可执⾏格式,提供沙箱环境,最早诞⽣于浏览器环境。WASM 本质上是⼀种字节码,很多语⾔都能编译到 WASM。
轻量、执⾏效率⾼、可移植、安全、语⾔⽆关
WebAssembly 介绍 — WASM 常⻅应⽤
FaaS / Serverless
WebAssembly 介绍 — WASM Runtime
Lucet
浏览器
WebAssembly 介绍 — Hostcall & WASI(WebAssembly System Interface)
WebAssembly 介绍 — Hostcall & WASI
通过 WASI Hostcall读取环境变量
03 字节 FaaS 的 WebAssembly 运⾏时
字节 FaaS 的 WebAssembly 运⾏时 — 代码样例
字节 FaaS 的 WebAssembly 运⾏时 — 代码样例
函数代码示例
字节 FaaS 的 WebAssembly 运⾏时 — SDK 封装
字节 FaaS 的 WebAssembly 运⾏时 — 运⾏时架构
函数运⾏时⼤致架构
•WASM 运⾏时引擎•Hostcall(WASI + 拓展)•函数执⾏调度器•函数实例缓存•WASM Module 缓存•运⾏时管理
字节 FaaS 的 WebAssembly 运⾏时 — 能⼒拓展
额外能⼒拓展(⽀持多租户)
•收发 HTTP 请求•收发 RPC 请求•监控、⽇志、追踪•服务发现•Redis、Mongo、MySQL•消息队列、对象存储•……
字节 FaaS 的 WebAssembly 运⾏时 — Hostcall 框架
内部 Hostcall 框架
字节 FaaS 的 WebAssembly 运⾏时 — Hostcall 框架
具体接⼝定义如下
字节 FaaS 的 WebAssembly 运⾏时 — 执⾏ JavaScript
•移植 JS Engine 到 WASM•预加载 JS Code•打包 JS Code + JS Engine•JS Engine 实现 Service Worker API•外部能⼒拓展复⽤到 Hostcall
04 精简架构
精简架构—请求路径
精简架构 — 流量调度
•相同函数请求尽量复⽤实例•提升后端单实例资源利⽤率•响应迅速,应对突发流量•⽀持函数级别配置调度策略•⽀持函数级别限流策略•灾难情况下跨 DC 流量转发
精简架构 — 冷启动优化
➜~curl-v https://xxxxxxxx.xxxxxxxx.xxxxxxxx......>GET/HTTP/2>Host:xxxxxxxx.xxxxxxxx.xxxxxxxx>user-agent:curl/7.77.0>accept:*/*>*Connection state changed(MAX_CONCURRENT_STREAMS==128)!




