23

我最近使用 docker 部署了一个小型 Haskell 应用程序,使用“scratch-haskell”作为基础映像。

然后我读到了 Unikernels 和 HALVM。我有点困惑。

我的 docker 容器大约 6MB 大。我猜一个 Unikernel(具有相同的 haskell 应用程序)的大小大致相同。

Unikernel 直接在 Xen 管理程序上运行,而 docker Image(或通用 LXC)在普通 Linux 发行版上运行,该发行版在裸机上运行。

现在我可以“选择”运行带有多个最小容器的 Linux 或带有多个小型 Unikernel 的 Xen 机器。

但这两种解决方案的优缺点是什么?一个比另一个更安全吗?它们之间是否存在显着的性能差异?

4

3 回答 3

13

来自http://wiki.xenproject.org/wiki/Unikernels

Unikernels 提供什么?

Unikernel 通常会生成一个单一的运行时环境,旨在启用仅使用该环境构建的单个应用程序。通常,此环境缺乏生成子进程、执行 shell 命令、创建多个线程或派生进程的能力。相反,它们提供了目标语言运行时的纯粹化身,无论是 OCaml、Haskell、Java、Erlang 还是其他一些环境。

Unikernels 与 Linux 容器

最近,人们对 Linux 容器解决方案相对于传统 VM 的优势做出了很多贡献。容器倡导者表示,它们的轻量级内存占用、快速启动时间和易于打包使容器成为虚拟化的未来。虽然容器的这些方面当然值得注意,但它们并不意味着虚拟机管理程序的世界末日。事实上,Unikernels 可能会降低容器的长期有用性。

Unikernels 促进了容器支持者所描述的非常理想的属性,并增加了一个绝对精彩的安全故事,这是其他解决方案所无法比拟的。

因此,如果您只想运行 Haskell 应用程序,Unikernels 可能适合您,并且它们的开销应该比 docker 更少(无论如何 docker 开销非常小),但是如果您的应用程序需要一些准备好的环境,则需要与非 Unikernels 软件进行通信码头工人是一个更好的选择。我想现在说 Unikernels 是否有用或广泛使用还为时过早,只有时间会证明一切。

于 2015-05-22T10:37:14.700 回答
3

Unikernals 非常适合无状态的东西。当您开始需要磁盘访问时,最好使用 Docker。

这就是为什么 unikernals 的所有“杀手级”应用程序都是静态配置的内核,例如静态网页或软件定义的网络堆栈。

于 2015-11-18T16:52:49.790 回答
2

有很多很好的解释,这里有一个简单的解释:

Unikernel 是虚拟机,但专门针对特定应用程序进行了优化。

在此处输入图像描述

于 2016-01-23T23:30:06.973 回答