简介
虚拟化技术经过多年的发展已经相当成熟,从早期的二进制翻译到半虚拟化再到现如今主流体系结构都支持的硬件辅助虚拟化,容器技术等。 硬件和软件在这一过程中相互促进协同发展。虚拟化技术围绕的三个核心议题是成本,安全,性能。通过资源共享来节约成本是虚拟化的出发点,但这通常意味着性能的下降和安全性的降低。通过隔离带来安全是虚拟化技术规模化应用必须要解决的问题,因为很多时候只有在安全的前提下节约的成本才具有实际意义,而这通常又会打破成本和性能的原则。因此虚拟化也需要针对不同的场景在这些指标中进行权衡。XEN, KVM, QEMU, docker是比较著名的开源虚拟化软件,这些软件为虚拟化的应用提供了软件基础。随着云计算的发展,出现了一些轻量级的虚拟化解决方案,它们从新的角度和应用场景解决着虚拟化三大议题。
Rust是由Mozilla主导开发的通用、编译型编程语言。设计准则为“安全、并发、实用”,支持函数式、并发式、过程式以及面向对象的编程风格。
crosvm是谷歌公司基于Rust语言开发的虚拟机软件,作为ChromeOS的一部分,结合KVM模块为ChromeOS的用户提供完整的虚拟化解决方案。Firecracker由Amazon开发, 最初是基于crosvm,但针对的是无服务器运算(Serverless computing),又被称为 功能即服务(Function-as-a-Service, FaaS)的场景。由于二者的使用场景不同,走向了不同的发展道路。
为了避免代码冗余,方便人们日后开发类似crosvm, Firecracker基于Rust语言的虚拟机软件,rust-vmm提供了一系基于Rust语言开发的用于列构建虚拟机的组件。cloud-hypervisor就是基于rust-vmm提供的组件开发的虚拟机软件。
基于Rust的这类虚拟机软件,遵循了简洁设计原则,避免了QEMU大量复杂的在云场景中用处不大的设备模拟,同时方便定制易于扩展,并天然具备Rust语言带来的安全性。
NEMU的设计初衷与cloud-hypervisor相同,只不过实现手段不同,其通过基于QEMU做减法来实现。
基于容器的虚拟化技术属于操作系统层面的虚拟化,相较于上述硬件层面的虚拟化技术,其优势在于性能非常好,劣势也很明显,隔离性较低,安全性差,容易被攻击。gVisor 和Kata Containers瞄准解决的正是容器安全性这一问题。虽然二者在具体的技术实现上有些不同(前者通过隔离系统调用,后者通过增加一个轻量级虚拟机隔离层),但本质是一样的,通过两层隔离增加安全性,然后在此基础上想办法通过一些手段优化性能。