我有点搞不懂零虚拟机。
假设我想运行 Wordpress。一种选择是租用运行 VMWare、Virtualbox、Xen、CoreOS 或类似软件的托管虚拟服务器。在这种情况下,虚拟化的是服务器及其硬件。配置虚拟服务器后,我可以通过 SSH 连接到它,启动和停止服务,重启机器等。
我在网上看到的资料说 ZeroVM 可以虚拟化应用程序,但我不明白这是什么意思。 ZeroVM 是否提供类似于Docker?
继续我上面的例子,如何使用 ZeroVM 运行 Wordpress?这样做有什么好处?
让我们将我的 Wordpress 示例扩展到共享托管环境。
ZeroVM 主页上写道:
对 ZeroVM App 或 zapp 的每个请求都会生成一个独立实例。每个实例都是独立且安全的,可在 5 毫秒内启动,并在完成请求后销毁。ZeroVM 的速度源于每个实例仅虚拟化运行单个进程所需的内容。
这是否意味着对 ZeroVM 应用程序的每个请求都会产生一个新进程?如果您在服务器上运行多个 ZeroVM 应用程序会发生什么?请求如何路由到正确的应用程序?
答案1
好问题!我在 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 Swift或者亚马逊 S3。这意味着物理文件存储在一定数量的存储服务器上。传统上,您需要将所有邮件拉到一定数量的计算节点才能搜索它们。使用 ZeroVM 及其与 Swift 集成, 你可以将代码发送到数据。这是可能的,因为与庞大的虚拟机映像相比,代码很小(几兆字节),并且在 ZeroVM 沙箱中执行不受信任的代码是安全的。
因此,ZeroVM 适用于高度可扩展的架构,其中每个请求都对不同的数据进行操作。
对于 WordPress 网站,这可能意味着应该将每篇博文存储在单独的数据中,并让专用的 ZeroVM 实例负责每篇博文。目前,文件系统是只读的,但计划将其改为读写,然后负责特定博文的 ZeroVM 实例可以处理评论等事务。您需要一个能够适当路由流量的负载均衡器。结果是一个与当前 WordPress 截然不同的架构,但可扩展性更强。实际实现这一点目前留给读者作为练习。
答案2
似乎是最前沿的技术。Rackspace 正在批评 LXC 相比之下“不安全”,但在白皮书出炉之前,我不会妄下判断。
- ZeroVM 是否提供与 Docker 类似的容器?
从:信息世界“ZeroVM 和 Docker 等项目之间有一些明显的比较,但意图略有不同。Docker 是关于通过各种环境进行部署的打包。ZeroVM 更多的是提供一种在给定环境中以轻量级方式虚拟化应用程序的方法,在这种情况下,完整的 VM 解决方案会显得多余且不是真正需要的。”
- 如何使用 ZeroVM 运行 Wordpress?
假设您需要为 ZeroVM 编译 apache。我不确定在这种情况下会有多少 Wordpress 代码库被破坏。
- 有什么好处?
Rackspace 的营销部门将对此做出最好的解释:这里
- 我将面临什么挑战?(为方便未来的读者而添加)
该软件/平台是最先进的,因此运行最先进的软件时会遇到所有试验和困难。(包括缺乏大量用户群的支持)。这也是一个新的“平台。“软件开发人员已经习惯于处理虚拟化平台......但这是一种超越硬件(VMWare、OracleVM、HyperV)和内核虚拟化(OpenVZ)的全新虚拟化......如果在游戏初期没有任何事情按预期进行,请不要感到惊讶。
答案3
继续上面的例子,我将如何使用 ZeroVM 运行 Wordpress?这样做有什么好处?
ZeroVM 本质上是一个用于构建 PaaS 的平台。因此,上述问题在“ZeroVM 世界”中意义不大。但让我们假设有人为您安装了 ZeroVM 基础设施(将其称为“提供商”)。然后,您可以在该基础设施之上创建自己的 PaaS 或 SaaS。就 WordPress 而言:提供商使您能够在提供商的基础设施上运行任何代码,您可以运行 WordPress,当您的代码运行时 - 您需要付费。当您的代码未运行时 - 您无需付费。即,当有人打开 WordPress 页面时,您将为请求付费,在将响应发送给用户后 - 您无需支付任何费用。不仅如此,由于每个 ZeroVM 实例将处理一个请求,因此您的 WordPress 网站本质上只需要为一个用户提供一个页面。然后我会说您实际上并不需要“WordPress”,因为 WordPress 现在是一个 MySQL 数据库的 PHP 接口,如果只有一个用户和一个请求,您不需要任何集中式数据库。等等。
这是否意味着对 ZeroVM 应用程序的每个请求都会产生一个新进程?
是也不是。取决于你想如何使用它。如果每个请求都是一个完全不同的应用程序,具有完全不同的代码库 - 那么是的,你将需要一个全新的流程。但如果每个请求都是对 PHP 或 WSGI Web 应用程序的调用,那么 ZeroVM 可以充当“守护进程”,通过节省平台的设置时间(例如,在 WSGI 应用程序的情况下设置文件系统 + python + wsgi),更快地处理请求。
请求如何路由到正确的应用程序?
目前基础设施融合的进入迅速对象存储。对 Swift 对象的请求将触发特定代码段的执行。或者对特定 URL 的 POST 将触发 POST 请求负载的执行。当然,任何其他类型的集成都是可能的,例如集成到 Web 服务器或分布式队列中。