ZeroVM 虚拟化了什么?

bra*_*rry 12 virtualization zerovm

我在用 ZeroVM包头时遇到了一些麻烦。

假设我想运行 Wordpress。一种选择是租用托管虚拟服务器,运行 VMWare、Virtualbox、Xen、CoreOS 或类似的东西。在这种情况下,虚拟化的是服务器及其硬件。一旦配置了虚拟服务器,我就可以通过 SSH 连接到它,启动和停止服务,重新启动机器等。

我在网上读到的东西说 ZeroVM 虚拟化了应用程序,但我不明白这意味着什么。 ZeroVM 是否提供类似于Docker的容器?

继续我上面的例子,我将如何使用 ZeroVM 来运行 Wordpress?这样做会带来什么好处?

让我们将我的 Wordpress 示例扩展到共享托管环境。

ZeroVM 主页说:

对 ZeroVM 应用程序或 zapp 的每个请求都会导致产生一个独立的实例。每个实例都是隔离且安全的,在 5 毫秒内启动,并在完成请求后销毁。ZeroVM 的速度来自每个实例仅虚拟化运行单个进程所需的内容。

这是否意味着对 ZeroVM 应用程序的每个请求都会产生一个新进程?如果您在一台服务器上运行多个 ZeroVM 应用程序会发生什么?请求如何路由到正确的应用程序?

Mar*_*ler 9

好问题!我在 ZeroVM 团队工作,希望我能帮助解决问题!

ZeroVM 是否提供类似于 Docker 的容器?

不,不是真的。Docker 使用 LXC 和其他内核特性来提供沙盒环境。ZeroVM 完全在用户空间中运行,并将单个应用程序沙箱化。

简而言之,ZeroVM 首先验证要运行的应用程序,然后简单地执行它。执行时,应用程序运行时基本上没有额外的开销——它背后没有虚拟机。

为了验证应用程序,它必须被交叉编译成一种特殊形式的 x86 机器代码。这种特殊形式有一个很好的特性,它可以被静态验证为“安全”。其中,“安全”意味着代码不会跳转到 ZeroVM 提供的某个内存段之外的地址。程序也不能调用正常的系统调用,只能调用ZeroVM提供的非常窄的系统调用接口。此验证取自Google 的 Native Client项目。

我将如何使用 ZeroVM 运行 Wordpress?这样做会带来什么好处?

原则上,您可以交叉编译作为 PHP 解释器的 C 程序。ZeroVM 然后可以在沙箱中启动 PHP 解释器,并将组成 WordPress 的 PHP 文件提供给它。ZeroVM 提供了一个只读的内存文件系统,这可用于从中读取 SQLite 数据库。这会给你一个只读的 WordPress 网站——不是非常令人兴奋:-)

然而,在我看来,这不是 ZerovM 的主要用例。需要重写现有的数据库密集型应用程序以与 ZeroVM 一起使用。ZeroVM 更适用于需要并行处理许多数据项的大规模可扩展系统。

想象一下,您需要搜索 1,000,000 封电子邮件。邮件存储在块存储中,例如OpenStack SwiftAmazon S3。这意味着物理文件存储在一定数量的存储服务器上。传统上,您需要将所有邮件拉到一定数量的计算节点才能搜索它们。使用 ZeroVM 及其与 Swift 的集成,您可以将代码发送到数据。这是可能的,因为与庞大的虚拟机映像相比,代码很小(几兆字节),并且在 ZeroVM 沙箱中执行不受信任的代码是安全的。

因此 ZeroVM 适用于高度可扩展的架构,其中每个请求都对不同的数据进行操作。

对于 WordPress 站点,这可能意味着应该将每篇博客文章存储在单独的数据中,并有一个专门的 ZeroVM 实例负责每篇文章。目前,该文件系统是只读的,但有计划使其成为可读写的,然后负责给定博客文章的 ZeroVM 实例可以处理诸如评论之类的事情。您需要一个能够适当路由流量的负载均衡器。结果是一种与当前 WordPress 截然不同的架构,但更具可扩展性。实际实现这一点目前留给读者作为练习。