好问题!我在ZeroVM团队中工作,希望我能帮助解决问题!
ZeroVM是否提供类似于Docker的容器?
不,不是。Docker使用LXC和其他内核功能来提供沙盒环境。ZeroVM完全在用户空间中运行,并将单个应用程序沙箱化。
简而言之,ZeroVM的工作原理是首先验证要运行的应用程序,然后简单地执行它。执行后,该应用程序运行时几乎没有额外的开销-它背后没有虚拟机。
为了验证应用程序,必须将其交叉编译为特殊形式的x86机器代码。这种特殊形式具有不错的属性,可以静态验证为“安全”。其中,“安全”是指代码不会跳转到ZeroVM提供的某个内存段之外的地址。该程序也不能调用正常的系统调用,它只能调用ZeroVM提供的非常狭窄的syscall接口。该验证来自Google的Native Client项目。
我将如何使用ZeroVM运行Wordpress?这样做会带来什么好处?
原则上,您可以交叉编译作为PHP解释器的C程序。然后,ZeroVM可以在沙箱中启动PHP解释器,并向其提供组成WordPress的PHP文件。ZeroVM提供了一个只读的内存文件系统,可用于从中读取SQLite数据库。那将为您提供一个只读的WordPress网站-并不十分令人兴奋:-)
但是,正如我所看到的,这不是ZerovM的主要用例。需要重写现有的大量数据库应用程序以与ZeroVM一起使用。ZeroVM更适用于要并行处理许多数据项的大规模可扩展系统。
假设您有1,000,000封电子邮件需要搜索。邮件存储在块存储中,例如OpenStack Swift或Amazon S3。这意味着物理文件存储在一定数量的存储服务器上。传统上,您需要将所有邮件拉到一定数量的计算节点上才能搜索它们。借助ZeroVM及其与Swift的集成,您可以将代码发送到数据。之所以可行,是因为与庞大的虚拟机映像相比,代码很小(大约几兆字节),并且可以安全地在ZeroVM沙箱中执行不受信任的代码。
因此,ZeroVM适用于高度可扩展的体系结构,其中每个请求都对不同的数据进行操作。
对于WordPress网站,这可能意味着应该将每个博客帖子存储在单独的数据中,并有一个专门的ZeroVM实例负责每个帖子。当前,文件系统是只读的,但是已经计划使其成为可读写的,并且负责给定博客文章的ZeroVM实例可以处理诸如注释之类的事情。您可能需要在前面安装一个能够适当路由流量的负载平衡器。结果是与当前WordPress截然不同的体系结构,但可伸缩性更高。实际执行此操作目前留给读者练习。