【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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:001927

评论

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

软件开发降本、增效、提质的产物——低代码平台

互联网工科生

软件开发 低代码开发 JNPF

Sublime Text 4 Dev for Mac(代码编辑器) v4.0(4169) 注册激活版

mac

苹果mac Windows软件 Sublime Text 4 代码编辑软件

怎样利用SD-WAN进行异地组网?

Ogcloud

网络 SD-WAN 组网

软件测试/人工智能丨字符串

测试人

人工智能 软件测试

Native Rawfile开发指导

HarmonyOS开发者

HarmonyOS

软件测试/人工智能丨人工智能会替代软件测试工程师吗

测试人

人工智能 软件测试

DAPP代币质押铸币挖矿系统开发(详情开发)

l8l259l3365

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试

EquatorCoco

.net 后端 性能测试 asp

GreatSQL登陆Arch Linux:成功的数据库安装之旅

GreatSQL

数据库 安装 greatsql

ONLYOFFICE协作空间2.0:文档协作更便捷

陈橘又青

协同办公 协同办公软件

期待2024年初以太坊的最新升级,降本增效,利好Layer2 !

币离海

英特尔展示下一代晶体管微缩技术突破,将用于未来制程节点

E科讯

SD-WAN解决企业国际互联组网需求

Ogcloud

网络 SD-WAN 网络管理

陌陌应用性能持续剖析产品化实践

童子龙

APM javaagent 应用性能监控产品

低代码(low code)开发平台,我选JNPF

这我可不懂

软件开发 低代码 开发框架 JNPF

需求测试的实践与思考

老张

工程实践 质量保障 需求评审

E往无前 | 腾讯云大数据 ElasticSearch 高级功能:Cross Cluster Replication实战

腾讯云大数据

ES

🎉开发者的福音:TinyVue 组件库文档大优化!类型更详细,描述更清晰!

OpenTiny社区

开源 前端 UI组件库

免费的!十大数据可视化工具软件盘点

2D3D前端可视化开发

数据可视化 可视化软件 可视化工具 信息可视化 可视化设计

SD-WAN VS MPLS :怎么选择最合适的网络连接方案?

Ogcloud

网络 SD-WAN 组网 MPLS

低代码开发平台通常提供哪些功能?发挥什么作用?

树上有只程序猿

软件开发 低代码 JNPF

企业业务场景如何实现自动化连接?

RestCloud

APPlink

精准捕捉异常时刻——从写好事件标题与内容开始

观测云

运维 监控告警

如何用ChatGPT来提高独立站博客的生产力

九凌网络

2023年,梦想实现的一年!

SAP虾客

年终总结 2023年

web组态(BY组态)接入流程

Geek_195e67

物联网 工业互联网 web组态 组态 by组态

英特尔锐炫A750:性能持续提升,主流玩家高性价比之选

E科讯

软件测试/人工智能丨运算符优先级

测试人

人工智能 软件测试

Blast 凭什么可以自带收益?

币离海

请不要再把String或Style直接传递给自定义的组件了!

编程的平行世界

flutter android

软件测试/人工智能丨如何自学人工智能软件测试

测试人

人工智能 软件测试

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