Firecracker

提出背景

Serverless computing降低了运营成本,提高了硬件利用率,加速传统部署方法,被广泛的用于在云中部署和管理软件。然而,Serverless要求在一个硬件上以最小的开销运行多个工作负载,并且保持安全性和性能隔离。可以选用的隔离性技术有提供强安全性和高开销的虚拟化技术(如基于QEMU/KVM的Kata Container)和提供低开销和弱安全性的容器技术(如Docker),这种折衷对需要强安全性和低开销的提供商来说是不可接受的。在这种情况下,AWS在2018年推出Firecracker这个开源项目,并在2020年的NSDI会议上发布了《Firecracker: Lightweight Virtualization for Serverless Applications》论文。Firecracker使用KVM,并移除了对QEMU的使用,用来构建新的虚拟机监视器(VMM)、设备模型以及用于管理和配置的API。Firecracker通过使用KVM实现了容器与容器之间新的隔离功能,并通过提供最小的客户机内核配置实现每个容器少于5MB的内存开销、125ms以内启动应用程序代码以及每个主机每秒最多创建150个微虚拟机的能力。Firecracker将容器实现的速度、资源效率和性能与传统虚拟机的安全性与隔离性结合,从而运行基于容器的、安全的多租户服务。

VMM特点

Firecracker派生于Google的Chrome操作系统虚拟机监视器Crosvm,采用Rust这种现代编程语言来确保线程安全性和防范缓冲区溢出错误。Firecracker的设计理念是依靠Linux内置组件而非重新实现自己的组件。作为一个虚拟机监视器(VMM),它使用Linux内核的KVM机制提供最小化的虚拟机(MicroVM),它提供了磁盘等极简化的设备模型、基于REST的配置API以及可配置的速率限制。
相比于QEMU提供的各种复杂的仿真设备,Firecracker仅提供了网络、块设备、串行接口以及部分i8042控制器支持,这样可以极大的缩减Firecracker的规模和复杂性,从而减少了攻击面。网络和块设备采用virtio技术实现,用于从虚拟机监控程序中公开仿真设备。
Firecracker进程通过Unix套接字提供REST API,用于配置、管理、启动和停止MicroVM,从而更仔细地控制microVM的生命周期。REST API可以用来指定客户机内核和引导参数、网络配置、块设备配置、客户机配置和cpuid、日志记录、指标、速率控制器和元数据服务,大多数配置提供了默认值,在最简单的应用中,只需要配置客户机内核和作为root的块设备。指定客户机配置和cpuid的API可以通过控制cpuid位使主机从microVM中隐藏某些功能,这样可以使异构的计算机看起来是同构的。块设备和网络设备的配置API允许对每秒操作和对接收发送流量设置单独的限制,这使得可以根据配置的资源或需求动态更改限制,确保存储设备和带宽有足够的带宽,也防止少量繁忙的microVM干扰其他microVM的性能。
架构和微架构的旁通道攻击的缓解措施在Firecracker的Lambda和Fargate部署中启用,但考虑到性能和安全性之间的折衷,在需求较少的环境中可以选择不实施其中一些缓解措施。另外,Firecracker中存在一个Jailer组件实现更高级别的防护,通过实现一个包装器,在引导客户机之前将其放入限制性的沙盒中,包括使用chroot、将其隔离在pid和namespace的名称空间中、丢弃特权以及设置限制性seccomp-bpf配置文件。

Firecracker运用

Firecracker诞生的内因是AWS Lambda的演进。Lambda是一种计算服务,可根据事件运行function。AWS将Lambda作为serverless的市场,强调Lambda功能可最大化减少操作和容量规划工作。
Lambda的架构图如下所示。Workers是用户代码执行的地方,每个Worker都提供多个slot,每个slot为function提供预加载的执行环境。Worker Manager是一个高容量、低延时的能够提供粘性路由的状态路由器,可以将单个事件粘在尽可能少的Worker上。事件通过Invoke REST API发送到Frontend,如果有功能可用的slot,Worker Manager仅需告知Frontend该slot可用,在没有slot可用的情况下,Worker Manager调用Placement服务在Worker上创建新slot。
base64-1
下图是Lambda Worker的架构。每个Worker运行着成百上千个microVM(每个提供单个slot),具体数目取决于每个microVM的配置大小和消耗的资源。每个microVM包含单个function的沙盒、最小化的Linux内核和用户空间以及控制过程。在每个microVM中启动一个Firecracker进程,负责创建和管理microVM。每个microVM的控制程序通过TCP/IP和MicroManager通信,MicroManager是负责管理Firecracker进程的Worker进程,MicroManager能够提供slot管理。一旦由WorkerManager为前端分配了slot,它将使用该slot的详细信息调用MicroManager并请求有效负载,然后MicroManager会将其传递给在该slot的MicroVM内运行的Lambda控制程序,完成功能后将接收有效负载并将其传输到Frontend来响应用户。MicroManager还会保留一小部分预引导的MicroVM,以便在Placement请求新插槽时可以使用。
base64-2

总结

相比于在Kata Container中以QEMU作为VMM和以Linux作为客户机OS的使用方式,Firecracker使用更简单的机器模型,它去除了QEMU中对业务无用的设备,去掉PCI总线,仅仅采用KVM机制来构建极简的VMM,在保证安全性的基础上,实现容器般的低开销。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值