Firecracker微虚拟机工作原理
Firecracker“微虚拟机”结合了虚拟机的安全性和容器的效率。
无服务器计算背景
自2014年起,某中心通过AWS Lambda提供“无服务器”计算。使用Lambda时,客户无需担心管理服务器或根据波动需求调整容量。某中心自动进行资源调配,客户只需按使用量付费。
最初构建Lambda时,必须在两种安全方法之间做出选择:一种是容器化,速度快且资源效率高,但无法在客户之间提供强隔离;另一种是在虚拟机内运行代码,以计算开销为代价提供更高安全性。安全性始终是最高优先级,因此使用传统虚拟机构建了Lambda。
客户要求提供更快的扩展速度、更低延迟以及预置并发等高级功能。意识到无法在传统虚拟机上构建这些功能,因此开发了Firecracker,并于2018年11月作为开源虚拟化平台发布。
Firecracker提供了两全其美的方案:基于硬件虚拟化的虚拟机安全性,以及容器的资源效率和快速启动时间。
技术架构设计
虚拟化堆栈的部分是虚拟机监控器,它设置虚拟化、管理内存并处理I/O。
传统虚拟机监控器几乎与完整操作系统一样复杂。QEMU是一个常与Linux内核虚拟机结合使用的虚拟机监控器,拥有超过140万行代码。
Firecracker比典型虚拟机效率更高的一个原因是其精简的虚拟机监控器,仅包含50,000行代码——比QEMU减少了96%。这允许为每个客户程序在Firecracker中执行的代码创建单独的微虚拟机,这是一个简单但强大的安全模型。此外,这50,000行代码使用Rust语言编写,该语言以其内置的安全性和正确性特性而著称。单台服务器每秒可创建多达150个Firecracker微虚拟机,并可同时运行数千个微虚拟机。
当然,大幅减小虚拟机监控器的规模也会同样大幅减少其功能。Firecracker不实现传统设备如BIOS或PCI总线,而是通过优化的virtio接口与客户内核通信。在典型虚拟化环境模拟程序认为正在运行的机器行为的地方,使用virtio时,程序知道它正在模拟上运行。这使其能够更好地与虚拟机协作,使执行更高效。
还了解到无服务器工作负载不需要USB、显示器、扬声器和麦克风等硬件功能,因此简单不实现对这些功能的任何支持。针对桌面和云用例的传统虚拟机监控器需要包含所有这些复杂性。
实际应用规模
Firecracker为AWS Lambda服务提供支持,目前每月为数十万客户处理数万亿请求。