Unikernel,下一大热点!
在过去的50年间,企业计算已由大型机上的会话共享,发展成为使用在虚拟机上运行的容器支持成千上万的微服务。不过,虚拟机不是这条发展道路上的最后一站。如今出现了一种新技术,这项技术让用户可以提高灵活性,并且更高效地利用数据中心硬件。这项技术就是Unikernel。
Unikernel是什么东东?
Unikernel是二进制代码单元,二进制代码直接在虚拟机管理程序上运行,这跟虚拟机在虚拟机管理程序上运行的方式基本上一样(见图1)。
图1:许多虚拟机可以在单单一台计算机上运行,因而提高了硬件效率。
然而,不像虚拟机拥有自己的操作系统、实用工具和应用程序,Unikernel要精简得多,只含有单一程序需要的操作系统中的某些部分。另外,那个单一程序旨在表示单一服务。
Unikernel如何提高运行效率?
虚拟机的缺点之一就是,虚拟机创建之后,资源使用是静态的。比如说,如果你创建了一个虚拟机,该虚拟机从含有12GB内存的主机系统分配到了4GB的内存,那么在该虚拟机的生存期内,这4GB专门用于该虚拟机。无法收回这部分内存。有一种技术可以解决硬件资源利用效率低下的这个问题,那就是容器。容器是在孤立进程中运行的部署单元,拥有单独的root级文件系统,容器共享主机系统的资源。应用程序和依赖项以容器镜像来表示。容器活动由容器管理器来协调,Docker是比较流行的容器管理器之一(见图2)。
图2:容器技术只使用当前需要的那部分硬件资源,因而可以更高效地使用主机计算机技术。
容器的价值在于,相比虚拟机,它们用途更广泛、更轻量级。但是,容器仍存在支持功能完备的操作系统带来的开销,另外还存在涉及使用其他有关方构建的容器镜像的安全问题。
Unikernel比容器来得还要轻量级,它可以更高效地利用硬件资源。如上所述,从最基本的层面来看,Unikernel是一种经过编译的二进制代码部署单元,它就位于虚拟机管理程序上面,这跟虚拟机如出一辙(见图3)。
图3:Unikernel技术直接在虚拟机管理程序上运行,作为一个非常小的经过编译的二进制代码,使用刚好够用的操作系统这个概念。
Unikernel只含有其运行必不可少的操作系统中的那些部分,而不存在整个操作系统带来的开销。
最适合作为Unikernel来运行的应用程序不需要大量的设备驱动程序、文件管理实用工具、文本编辑工具或外壳。应用程序需要的只是让该应用程序运行所绝对必要的那些资源。这个概念称为“刚好够用的操作系统”(JeOS)。结果是,你获得的部署单元非常小巧,可以快速装入。比如说,表示DNS服务器的Unikernel大小在449KB左右,表示Web服务器的Unikernel大小在674左右。这很好,我们谈论的大小都是KB级!
由于Unikernel很小巧,你可以将数千个Unikernel装入到单单一个硬件上。又由于它们可以快速装入,它们本身非常适合于微服务,尤其是装入、运行和卸载生命周期只有短短几秒的瞬态微服务。
Unikernel被设计成不可改变,因而具有其他环境所不具有的隐式安全级别。如上所述,部署单元是经过编译的二进制代码。(想想将你的C++代码编译成exe.文件,现在设想将你的整个计算环境编译成exe.文件之类的东西。)因而,你无法随意添加删除某些部分。如果你想升级Unikernel,就需要编译新的Unikernel,然后部署那个唯一的工件(artifact)。令人讨厌的入侵者想渗透进入到二进制代码要困难得多。
最后,Unikernel很节电。计算机的运行需要电力。相比单一机器运行未得到充分利用的虚拟机,或运行臃肿镜像的容器,运行成千上万个Unikernel、高效运行的计算机每瓦特可以完成的工作要多得多。
缺点
然而,Unikernel目前并不是现代计算行业的灵丹妙药。别忘了Unikernel旨在表示单一服务。因而,变化多端、旨在支持多个用户的应用程序并不是适合于使用Unikernel。
Unikernel需要使用一种不同的编程和调试方法,尤其是在编程语言支持方面。因而,学习起来难度很大。Unikernel可能小巧、快速,但是除非这个领域的所有流行语言大大加强编程活动,另外拥有可靠的调试工具,否则这项技术将终归是小众技术。
万事俱备只欠东风
Unikernel大有潜力。这项技术克服了虚拟机和容器技术存在的许多缺点,尤其是安全方面的难题。资源占用少、装入速度快,这意味着Unikernel有望使微服务迎来黄金时期。然而,这项技术在大众市场仍处于发展初期。一旦编程通用性和调试这两个问题得到解决,这项技术在技术界将是一个不可忽视的角色。
云头条编译|未经授权谢绝转载
相关阅读:
Unikernel交流群欢迎加入,群主微信:aclood