作者:张怡 2015-12-10 10:23:12
云计算 如果你持续关注DevOps.或是对技术真正感兴趣,你也许已经听说Unikernel很多次了。在过去的几个月,它似乎越来越受关注。究竟什么是Unikernel? 它是我想要的东西吗?
创新互联建站云计算的互联网服务提供商,拥有超过13年的服务器租用、成都IDC机房托管、云服务器、网页空间、网站系统开发经验,已先后获得国家工业和信息化部颁发的互联网数据中心业务许可证。专业提供云主机、网页空间、空间域名、VPS主机、云服务器、香港云服务器、免备案服务器等。
本文介绍了一种新的应用虚拟化技术,它让应用及其所依赖的运行环境、甚至是连内核一起打包,直接运行在硬件或是Hypervisor上,从而更加高效的利用计算机资源。非常有意思,推荐给大家。
如果你持续关注DevOps周刊,DevOps主题的会议或是对技术真正感兴趣,你也许已经听说Unikernel很多次了。在过去的几个月,它似乎越来越受关注。
然而,究竟什么是Unikernel? 它是我想要的东西吗?
我纠结这个问题许久。不知如何定义Unikernel以及它存在的意义?
什么是Unikernel?
真相的来源仅仅是Wikipedia上的一段晦涩的解释,我们先看看:
Unikernel是通过使用专门的库操作系统来构建的单地址空间机器镜像。开发者通过选择栈模块和一系列最小依赖库来运行应用,而这些栈和库对应于操作系统中运行应用所必需的依赖。 这些库负责应用和配置代码编译,构建成封闭的、固定用途的镜像(Unikernel)可以直接在虚拟机管理程序(hypervisor)或硬件上运行,不需要类似Linux或Windows的操作系统介于其中。 ---- 维基百科:Unikernel |
都清楚了,对吗?
好吧,如果是我,或许以上并没有说太多。接下来是我对Unikernel的解释。
首先让我们跟着这里例子回顾一下。假设你是一个开发者在写PHP应用。当你运行你的PHP(其他Ruby、Node、Perl均类似)应用,你本质上是在运行:
说老实话,如果你在抽象一个应用程序构建所需的所有层次,这会是一个奇迹般的工作。
但是他们做到了。并且做得非常好,有较好的性能。但是你必须认识到,在提供应用运行环境的硬件到应用程序本身存在许多层。
那就是Unikernel试图解决的:删除应用与硬件中间臃肿的部分。让最“精简”的操作系统运行你的代码。
这里有一篇论文总结得非常好:
Unikernel的愿景:当你看到云客户端时就像看到单应用硬件一样。 - The Rise and Fall of the Operating System |
Unikernel试图抹去现代操作系统带来的一些复杂性。因为“通用”的操作系统(就像任何Linux和Windows的发行版),通常会伴随着带来一些对你的应用来说并不需要的驱动、依赖包、服务、等等,但这些对每一个操作系统来说某种程度上又是必需的。
甚至是在Linux内核的核心模块都并不是需要每一次都完全加载。像USB驱动这类东西在虚拟化的“云”环境被认为是无用的,但仍然会被包含在内核中。
相比容器和虚拟化,Unikernel所呈现的演进如下图:
(来源:road_to_unikernels)
Unikernel对比通用的操作系统例如Linux有许多优势;
这样我们非常自然的把Unikernel当作是微服务的备选方案。
用Unikernel抹去复杂的中间层
如果你运行应用之后想要它的开销是最小的,那你就可能要考虑制作一个Unikernel。
为此,要使用库操作系统(LibOS)。一个库操作系统会给你提供构建自己的Unikernel的方式。最值得关注的是MirageOS(术语“unikernel”的创造者)和Rump Kernels。两者本质上都是一系列标准化的驱动和库,这样你就不需要重复发明像TCP栈、持久存储层等这类东西。
Unikernel是用高级语言定制的操作系统内核,并且作为独立的软件构件。完整的应用(或应用系统)作为一个分布式系统运行在一套unikernels上。
MirageOS基于OCaml语言并且让unikernels运行在Xen hypervisor上。
-- queue.acm.org: Unikernels: Rise of the Virtual Library Operating System
目前***的用来写unikernel的语言是:
这些并不都是新的编程语言。除了Go和Rust,其他均有超过15年的历史。
为了使操作系统和应用运行得更加流畅,这些unikernel库需要使用内核部分尽可能小。
现在,由于虚拟化技术,像Xen或VMware这类虚机管理系统(注*:原Operating System)把异构的硬件设备抽象成一堆标准的虚拟化设备,unikernel也能为定制的虚拟设备而优化。
Unikernel利用虚拟化的优势创造出一种专属的经过优化的操作系统。
想要编译应用程序的“unikernel”,需要依赖MirageOS的库和OCaml语言,结果像这样:
编译器输出一个完全独立的内核取代Unix可执行文件。这些unikernels是只为满足特定的应用程序和配置文件而实现的库操作系统VM,并且会依赖hypervisor提供的资源复用和隔离。
--- queue.acm.org: Unikernels: Rise of the Virtual Library Operating System
最终你通过运行一个Unikernel,精简专属的操作系统,来运行你应用程序的一部分。如果你的应用和配置需要更新,你需要重新编译你的源码来生成新的Unikernel并部署新版本。如果是新的安全升级?也同样需要重新编译和部署。
这将使部署的协调和编排更加困难,但好处是运行应用程序更加高效。
构建不可变的基础设施架构的关键在于:应用程序不再保存状态,并且能方便地丢弃和重新构建。
一方面,我们可以让Unikernel运行在Docker容器中,但是是否应该尽量避免增加其他复杂的中间层?另一方面,Docker在使用和部署上的优势确实可以弥补这点中间层的开销。
谁应该使用Unikernel?
实话实说,这个问题的答案对我来说还并不明确。我认为说如果你现在是要在WordPress上部署web应用,使用Unikernel也许还有一定的鸿沟。
另一方面,Unikernel的好处是明显的,但需要一个完全不同的模式来管理你的基础设施,一组不同的技能来构建这类的应用和内核并且需要深谙目前对我们来说还完全陌生的一个概念:不可变的基础设施架构。
也许在今后的5至10年,我们会以新的规范一样来部署Unikernel。目前,我认为它针对一小部分想要相当专业和安全应用的用户。对于大多数普通用户,虚机(或是,如果你走在技术前沿一定会明白:Docker容器)或许才是你应该专注的。
更多Unikernel相关阅读:
如果您对这个主题感兴趣,推荐您一些相关链接:
文章标题:我们该如何定义Unikernel以及它的存在?
文章转载:http://www.shufengxianlan.com/qtweb/news43/399543.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联