2015年叫板Docker的7个Unikernel项目
本文作者Xen项目咨询委员会主席Lars Kurth在上一篇文章中深入介绍了Unikernel的崛起,本文接着介绍今后几个月值得密切关注的几个新兴项目。
Docker和Linux容器技术如今备受媒体关注,这种强大而简易的方法可用来封装应用程序,尤其是由于云计算变得更主流。虽然这类技术仍在发展之中,但它们提供了一种简单、干净又精简的方式来分配应用程序工作负载。
随着容器创新方面的热情越来越高涨,一种名为Unikernel的相关技术也开始引起注意。Unikernel又以能够在组件层面干净利落地分离功能而著称,它正带来众多新的方法以部署云服务。
传统的操作系统在单一机器上运行多个应用程序,管理资源,并将应用程序彼此隔离开来。Unikernel则在单一虚拟机上运行单一应用程序,改而依赖虚拟机管理程序(hypervisor)来隔离那些虚拟机。Unikernel通过使用“库操作系统”来构建,开发人员只要选择应用程序运行所需的一组最基本的服务即可。这些密封的、用途固定的映像直接在虚拟机管理程序上运行,没有像Linux这种干预性的访客操作系统。
Unikernel图解(图片来源:Xen项目)
除了改进容器技术外,Unikernel还能够为跨平台环境、大数据分析和横向扩展型云计算带来出色的灵活性、速度和多功能性。与基于容器的解决方案一样,这项技术兑现了易于部署的承诺,但是Unikernel还提供了极其小巧的、专门的运行时环境,受到攻击的可能性要小得多。
今年有几个新兴的开源项目值得关注,其中包括ClickOS、Clive、HaLVM、LING、MirageOS、Rump Kernels和OSv,每一个项目都注重Unikernel方法的不同方面。比如说,MirageOS和HaLVM采取了全新设计(clean-slate)的方法,专注于安全性,ClickOS注重速度,而OSv和Rump Kernels旨在与老式软件兼容。若使用现有的整体式操作系统,不可能获得这类灵活的方法,现有的整体式操作系统已积累了数十年的假设和取舍。
Unikernel如何能够提供更好的安全性?各种Unikernel实现技术采取的方法有何不同?如今谁在使用这项技术?它给云和数据中心运营方带来的主要好处有哪些?虚拟机管理程序上的Unikernel会取代容器吗,还是说企业会结合使用这三种技术?如果是这样,如何结合使用,为何结合使用?后续文章会逐一解答这些问题,并给出这些新兴项目背后的主要开发人员的真知灼见。
ClickOS
这是一种极简、定制的虚拟化操作系统,旨在运行基于Click的中间设备(middlebox)。
最近的网络功能虚拟化(NFV)潮流有望将中间设备处理从基于硬件的设备向在廉价的大众化硬件(比如配备万兆网卡的x86服务器)上运行的软件转变。ClickOS正是为实现这个目的而开发的一种高性能虚拟化软件中间设备平台。它包括在MiniOS(一种源自Xen的极简操作系统)上运行的Click模块化路由器软件,另外对网络输入/输出进行了优化,以便为几乎所有大小的数据包提供万兆吞吐率。这些虚拟机很小巧(6MB),启动速度快(大约30毫秒),增加的延迟很短(45微秒)。构建操作系统映像需要工具链(toolchain),而工具堆栈(toolstack)可以在数毫秒内启动虚拟机。
相关链接:http://cnp.neclab.eu/clickos/
Clive
Clive的口号是:消除云中的大部分软件堆栈。
Clive是一款操作系统,旨在可以在分布式和云计算环境下工作。
它的主要设计准则如下:
- 云中没有软件堆栈。应用程序和服务连同库一起编译,库允许应用程序和服务可以在裸机硬件上运行。
- 系统接口按照类似CSP的方式来设计。应用程序和组件通过通道(channel)来对话,而通道与网络、管道及其他任何输入/输出工件实现连接。
- 这种设计主要归功于Plan 9和Nix。
- 这个项目刚开始,不过已经有一些软件和说明文档。
- Clive文档草案(http://lsub.org/export/clivesys.pdf)介绍了这个系统。
- 使用手册(http://lsub.org/sys/man/)详细记载了程序包和命令。
- 用来编译Clive软件的修改后的go编译器可以使用如下命令来下载和安装:
git clonegit://git.lsub.org/golang.git golang cd golang git checkoutlsub GOROOT=`pwd` cd src all.bash
- clive软件可以使用如下命令来下载:
git clone git://git.lsub.org/clive.git clive cd clive
相关链接:http://lsub.org/ls/clive.html
HaLVM
Haskell轻量级虚拟机(HaLVM))是Glasgow Haskell Compiler工具套件的移植版,该工具套件让开发人员可以编写高级的轻量级虚拟机,可在Xen虚拟机管理程序上直接运行。
虽然Galois最初设计HaLVM的初衷是便于快速、轻松地为操作系统组件建立原型,但是它取得了长足发展,现在支持一系列广泛得多的使用场合。比如说,如果结合适当的库,HaLVM就能作为网络设备来运行。
相关链接:https://galois.com/project/halvm/
LING
LING是一种新的Erlang平台,可以直接在Xen上运行。你可以减少管理难题,提升安全和性能。
LING与Erlang/OTP高度兼容,可以理解.beam文件。
LING启动到外壳只需不到100毫秒。实例可以在请求后启动。LING是扩展性超强的云的构建模块。
LING消除了大多数攻击途径。它只使用3个外部库,不使用OpenSSL。文件系统具有只读属性。
相关链接:http://erlangonxen.org
MirageOS
MirageOS是一种库操作系统,它可以为跨众多云计算和移动平台运行的安全、高性能的网络应用程序构建Unikernel。可以在Linux和MacOS X之类的平常操作系统上开发代码,然后编译成完全独立、专门的Unikernel,可在Xen虚拟机管理程序下运行。
由于Xen支持大多数公有云计算基础设施,比如亚马逊EC2或Rackspace,这样一来,相比使用全面软件堆栈的系统,你的服务器运行起来成本更低、安全性更高,可以实现更精细化的控制。
MirageOS使用OCaml语言,代码库提供了开发过程中适用于Unix下的网络、存储和并发支持,但是编译后可以变成操作系统驱动程序,部署到生产环境中。该框架完全是事件驱动型,不支持抢占式线程。
MirageOS 1.0已在2013年12月发布,随后在2014年7月发布了MirageOS2.0。
相关链接:http://openmirage.org
Rump Kernels
Rump Kernels让你能够构建所需的软件堆栈,而不会迫使你重新发明轮子。软件堆栈需要类似驱动程序的组件,它们按传统方式紧密组合到操作系统里面DD即使你不想要某个操作系统的限制和基础设施开销,也确实需要驱动程序。
Pump Kernels解决这个问题的办法是,提供了免费、可重复使用、组件化、内核质量的驱动程序,比如文件系统、POSIX系统调用、PCI设备驱动程序以及TCP/IP和SCSI协议堆栈。Rumprun Unikernel是一种随时可投入到生产环境的技术,它只有几千行代码,外加Rump Kernel组件,支持POSIX化的软件直接在原始硬件和云虚拟机管理程序(比如KVM和Xen)上运行。Rump Kernels还可以集成到第三方平台中。
相关链接:http://rumpkernel.org
OSv
OSv是一种为云设计的开源操作系统。它是从头开始全新设计的,旨在实现轻松部署和管理,性能很出众。
OSv减少了传统操作系统带来的内存和处理器开销。调度很轻盈,应用程序和内核协同运行,内存池共享。OSv提供了无与伦比的短延迟和稳定性能,这减少了操作系统实例的大小和数量,直接节省了资本开支。
语言运行时环境、操作系统和虚拟机管理程序都提供了保护和抽象机制。OSv简化了操作系统,从而尽量减少了这几层的冗余。
相关链接:http://osv.io