写点什么

Serverless 与轻量级虚拟化 Firecracker · NSDI '20

  • 2021-04-24
  • 本文字数:2567 字

    阅读完需:约 8 分钟

Serverless 与轻量级虚拟化 Firecracker · NSDI '20

本文要介绍的是 2020 年 NSDI 期刊中的论文 —— Firecracker: Lightweight Virtualization for Serverless Applications1,该论文实现的 Firecracker 能够在宿主机上提供轻量级的虚拟化支持。很多开发者在今天都会选择使用 Serverless 的容器和服务以为了减少系统的运维开销、提高硬件的资源利用并实现快速的扩缩容,然而 Serverless 的场景却对容器的隔离性、安全性以及性能都提出了更高的要求。

当利用相同的硬件为多个租户提供服务时,我们期望不同的工作负载可以在最小化额外开销的情况下保证安全和性能上的隔离。然而在过去很长一段时间内,大多数的观点都认为在强安全性和低延迟之间我们只能二选一。



图 1 - 安全性和低延迟

虚拟化技术可以提供较强的安全性但是会引入较大的额外开销,而容器技术与之相反,它提供了弱安全性保证以及较小的额外开销。在这种前提下,公有云和私有云都会根据需求做出了自己的选择:

  • 公有云为了保证安全性会使用虚拟机,虽然额外开销较高,但是可以将成本都转嫁给用户;

  • 私有云为了保证性能会使用容器技术,虽然容器之间的隔离性较差,但是面向的客户一般都是公司内的业务方,所以安全性一般不是首要考虑的问题,可以优先保证整体的性能;


不同租户之间的隔离性永远都是公有云首先要考虑的问题,租户之间存在一些资源的竞争有时还是可以接受的,但是没有客户能够接受花钱购买的服务可能受到其他租户的攻击。



图 2 - Firecracker

这篇文章介绍的 Firecracker2 是新的虚拟机监视程序(Virtual Machine Monitor、VMM),它可以同时提供强安全性保证和较低的额外开销,目前为 AWS 函数和计算引擎提供支持,支持数百万的工作负载和每个月数万亿的请求。

隔离性

Firecracker 可以为运行的工作负载提供良好的兼容性、性能、具有极低的额外开销并且可以在单个主机上支持上千个函数,但是这些都不是这篇文章要关注的重点,我们在这里展开介绍论文中提到的几种隔离机制。



图 3 - 隔离选项

Linux 容器、语言特定的隔离机制和虚拟化技术是今天比较常见的几种隔离选项,我们在这里花一些时间简单介绍它们三者的异同。

Linux 容器

Linux 的容器组合了内核的多种功能提供运维和安全上的隔离性,其中包括:

  • 控制组(cgroups):提供 CPU、内存和其他资源限制;

  • 命名空间(namespaces):为用户、进程标识符和网络接口等内核资源提供命名空间;

  • 安全计算(seccomp-bpf):限制进程可以使用的系统调用和传入的参数;

  • 更改根目录(chroot):提供隔离的文件系统;


容器往往依赖系统调用上的限制来保证安全性,很多容器的运行时都会在系统调用上做文章来保证安全性,例如 Google 的 gvisor 3就在用户空间模拟一些系统调用,这能明显地减少内核需要提供的能力。

语言特定隔离

另一个用于隔离工作负载的常用技术就是编程语言的虚拟机了,例如 Java 虚拟机(Java Virtual Machine、JVM)以及运行 Javascript 的 V8 引擎。这种通过牺牲灵活性和兼容性以获得安全性的方式在一些场景下还是比较适合的,Chrome 的底层引擎 Chromium 就为每个网站单独分配进程资源防止网站访问不相关的信息造成安全问题。

虚拟化技术

现代的虚拟化技术都会使用硬件提供的功能保证虚拟硬件、页表和操作系统内核的隔离性。虽然虚拟化技术能够解决安全性的问题,但是这个世界的问题很多都是按下葫芦浮起瓢,重量级的虚拟化技术也会带来下面的挑战:


  1. 部署密度低、额外开销大:虚拟机监控程序和独立运行的内核都会占用额外的 CPU 和内存资源从而限制单机能够部署的虚拟机上限;

  2. 启动时间长:虚拟机的启动时间也会影响它的使用体验,相信很多开发者都经历过运行虚拟机所需要的漫长等待时间,感觉在本地的虚拟机启动时间仅次于 Jetbrains 全家桶;

  3. 实现复杂、容易出错:虚拟化技术的实现往往异常复杂,虚拟机监控程序 QEMU 中包含 1,400,000 行代码并调用 270 个不同的系统调用4,我们很难保证如此庞大的代码仓库的可靠性;



图 4 - 虚拟化技术的挑战

Firecracker 选择更加安全的语言 Rust 并使用 50,000 行代码实现最小可用的虚拟机监控程序以替代 QEMU,新的 VMM 会与 Linux 的内核虚拟机(Kernel Virtual Machine、KVM)一起为不同的工作负载提供运行环境。

总结

Firecracker 作为虚拟机监控程序,它依赖 Linux 的内核虚拟机(KVM)提供最小的虚拟机 MicroVM,这主要因为 Linux 的组件提供了正确的功能、性能以及设计,绕过这些组件会带来巨大的实现成本,同时也会增加运维工程师理解新系统的成本并影响运维工作。


这篇论文详细地分析了 Firecracker 的性能,以启动时间为例,预先配置版本的启动时间在 100 ~ 150ms,而没有预先配置的 Firecracker 启动时间大约为 150 ~ 250ms;除了提供毫秒级别的启动时间之外,Firecracker 仅需要 3MB 的内存额外开销,这可以显著地提升单机的部署密度。虽然 Firecracker 在启动时间和额外开销上都有着不错的表现,但是它的 I/O 吞吐量与其他系统相比却差很多。



图 5 - I/O 吞吐量

值得注意的是,论文中提到 Firecracker 在测试环境中超售二十倍资源,在生产环境中超售十倍资源都没有带来任何问题。看起来 AWS 的函数引擎 Lambda 的确可以带来相当高的利润,果然想要赚钱就是要把一份资源当成十份甚至二十份来卖。

推荐阅读


  1. Agache, Alexandru, et al. “Firecracker: Lightweight virtualization for serverless applications.” 17th {usenix} symposium on networked systems design and implementation ({nsdi} 20). 2020. ↩︎

  2. Firecracker · Secure and fast microVMs for serverless computing. https://github.com/firecracker-microvm/firecracker ↩︎

  3. gvisor · Application Kernel for Containers https://github.com/google/gvisor ↩︎

  4. Chia-Che Tsai, Bhushan Jain, Nafees Ahmed Abdul, and Donald E. Porter. A study of modern linux api usage and compatibility: What to support when you’re supporting. In Proceedings of the Eleventh European Conference on Computer Systems, EuroSys ’16, pages 16:1–16:16, New York, NY, USA, 2016. ACM. URL: http://doi.acm.org/10.1145/2901318.2901341, doi:10.1145/2901318.2901341. ↩︎


本文转载自:面向信仰编程

原文链接:Serverless 与轻量级虚拟化 Firecracker · NSDI '20

2021-04-24 08:002136

评论

发布
暂无评论
发现更多内容

Zebec 生态 AMA 回顾:Nautilus 以及 $ZBC 的未来

威廉META

龙蜥社区第 20 次运营委员会议圆满结束!

OpenAnolis小助手

开源 操作系统 龙蜥社区 运营委员会 开放原子

云测 | 打造终端智能测试平台,助力企业迈向高效质量管理

TRaaS

小程序 支付宝小程序 测试 支付宝

数据通信网络之IPv6以太网多层交换

timerring

数据通信网络

英特尔傅彬:Thunderbolt和USB不是竞争关系,而是携手共进

E科讯

Zebec 生态 AMA 回顾:Nautilus 以及 $ZBC 的未来

鳄鱼视界

Zebec 生态 AMA 回顾:Nautilus 以及 $ZBC 的未来

西柚子

LP 流动性质押 DAPP 模式系统开发

l8l259l3365

跨平台时代,小程序成为全域业务的关键枢纽

没有用户名丶

vivo数据中心网络链路质量监测的探索实践

vivo互联网技术

数据中心 网络故障排除

【论文解读】Faster sorting algorithm

合合技术团队

人工智能 算法 论文 解读

飞桨产品经理教你如何应用PaddleX

飞桨PaddlePaddle

快速而准确的MongoDB差异数据对比方法

NineData

数据库 mongodb 可视化界面 数据对比 NineData

LLM大模型微调:应用、策略与未来发展

百度开发者中心

#人工智能 文心大模型 千帆大模型平台

sip中继

cts喜友科技

SIP

英特尔傅彬:PC创新演进之路,英特尔全力以赴

E科讯

优雅!比OpenAI更认真的文本嵌入模型

ZA技术社区

保险科技 AIGC 众安科技 文本嵌入模型

TDengine 3.1.1.0 来啦!更新如下

TDengine

时序数据库 #TDengine

Mac电脑多功能文件搜索推荐 HoudahSpot中文版

胖墩儿不胖y

搜索工具 文件搜素 文件搜索软件

Rhino 7 for Mac(犀牛3D建模软件) 7.33永久激活版

mac

windows Rhino 7 苹果mac 三维构建软件

Databend 玩转 Local 模式

Databend

数据赋能健康发展,数造科技为某省妇幼医院搭建医疗数据科研平台

数造万象

图片简易压缩工具 Squeezer for Mac激活下载

mac大玩家j

图片压缩软件 图片压缩工具 压缩图片

进阶训练技巧提升模型性能

百度开发者中心

#人工智能 大模型微调 千帆大模型平台

Serverless 与轻量级虚拟化 Firecracker · NSDI '20_语言 & 开发_面向信仰编程_InfoQ精选文章