近日,一篇关于字节跳动FaaS平台上WebAssembly应用的深度实践报告引起了广泛关注。该报告详细阐述了字节跳动如何利用WebAssembly技术优化其FaaS(函数即服务)平台,以及相关的架构优化和未来规划。
字节跳动的FaaS平台旨在实现内外场技术的统一,与火山引擎云产品无缝对接,支持多事件源触发,为用户提供从开发到部署再到运维的一站式服务。目前,该平台服务规模庞大,线上函数日活量已超过3.3万个,且函数发布频率极高。为了满足不同场景的需求,FaaS平台提供了经典和轻量级两种运行时。经典运行时采用VM/Container隔离技术,兼容性好但启动慢、资源开销高;而轻量级运行时则采用WebAssembly或V8 Isolate轻量隔离方案,启动速度可达1毫秒,资源开销低,尤其适用于前端SSR、BFF、后端API等对实时性要求较高的场景。
WebAssembly作为一种可执行格式,提供了沙箱环境,其本质是字节码,具有轻量、高效、可移植、安全、语言无关等特点。它在前端性能提升、智能合约、插件能力、FaaS/Serverless等领域有着广泛的应用。WebAssembly运行时多种多样,如Wasmtime、WAMR等,通过WASI的Hostcall机制,WebAssembly能够与宿主程序进行交互,如读取环境变量等。
在字节跳动的FaaS平台上,WebAssembly运行时的实现尤为引人注目。代码通过SDK与运行时进行交互,开发者无需关注底层的Hostcall细节。运行时架构包含了WASM运行时引擎、Hostcall、函数执行调度器等核心组件,支持多租户,能够进行HTTP、RPC请求收发,以及使用多种数据库和消息队列。字节跳动还设计了内部Hostcall框架,进一步降低了开发运维成本。对于Javascript的执行,平台通过移植JS Engine到WASM等方式实现了高效运行。
为了进一步提升性能,字节跳动在请求路径、流量调度、冷启动优化、合并部署、边缘支持和存储服务等方面进行了多项优化。流量调度机制能够复用实例,提升资源利用率,有效应对突发流量;冷启动优化效果显著,部分请求的冷启动时长已缩短至0.48毫秒;平台支持多种部署形式,可根据需求动态调整云边流量。存储服务则包括全球同步的Global KV和单机访问的Local Cache,满足多样化的数据存储需求。
在未来规划方面,字节跳动计划引入Component Model,构建静态和动态依赖图,以实现模块间更高效的依赖管理。同时,平台还将推进Memory Share功能,使不同函数实例能够共享数据,提高数据访问效率,从而进一步优化性能。
这篇实践报告不仅展示了字节跳动在FaaS平台上WebAssembly技术的成功应用,还为业界提供了宝贵的经验和启示。随着技术的不断进步和应用的深入,WebAssembly有望在更多领域发挥重要作用。