容器技术在过去一年中取得了令人瞩目的关注度,无论是个大技术论坛还是个大公司都对Docker投入了巨大的热情。 随后出现的CoreOS和Docker一样都是容器技术的重要组成部分,它们确实在操作系统功能特色方面做了很大的改变。
容器技术是的封装和分发应用程序非常容易,特别是基于基础设施云模式的应用场景中。容器相比它的前辈:虚拟机技术而言,更加的快速和简便,能够提供更快地启动时间和保持合理的隔离特性,确保机遇共享的基础设施上的不同应用能够有效的隔离和提供安全防护。容器也被优化用于在单一操作系统实例上用安全和兼容的模式运行多个应用程序。
那么问题有没有呢? 有。
传统的操作系统体积是比较大的,即使通过一些手段和技术瘦了下来,也相对来说比较重量级。如果你看看一个容器实例会发现只有几百兆大小,在托管应用方面,容器的优势是显而易见的。
而一个操作系统的副本意味着所有操作系统的服务和子系统,无论这些服务和子系统是必要的还是不需要的。这巨大的体积的冲突与更广泛的云市场的“微服务”发展趋势是相悖的,现在的服务发展趋势即要求提高安全性的需要,有要求一切操作尽可能快的完成。
因此,现在在传统的操作系统的容器技术可能会被新的技术取代,例如无核化UniKernels。Docker容器推荐一个容器一个服务single-service-per-container (microservices)的概念,而无核化UniKernel则会将这个想法带得更远。
无核化UniKernel允许你将所有包括操作系统都考虑到你的应用程序的编译和打包中,比如,如果你应用不需要持久磁盘的访问,那么设备驱动程序和OS有关磁盘使用的工具就可以不包含在生产Imag中,因为UniKernels 是为运行Xen等虚拟管理程序而设计的,它们只需要网络和磁盘的一些标准资源的接口,用于显示的数千个设备驱动 磁盘驱动等等都是不需要的。由此,生产系统变得最小化,只是需要应用代码 运行环境和应用必须的OS工具等等必备的,VM image文件变得更小,部署变得更快,更加易于维护。
从应用开发人员角度来说,UniKernels不需要一个操作系统的主机就能够部署应用程序,该UniKernel方法允许开发人员从一组服务库里面选择一种服务,该服务能够支撑应用的运行。这些服务链接库可以直接编译打包到应用程序中。
其结果是UniKernel模型本身可以完全去除除操作系统,允许应用程序直接运行在一个虚拟机或服务器的硬件。这是一个没有底层软件堆栈的模型,只有应用程序。
UniKernels无核化有一些非常重要的优势:
1. 空间大小有优势
不像虚拟机或容器,一个UniKernel只需要运行单一应用的底层支撑服务。我们知道容器小于VMS,但实际上他们仍然是相当大的,特别是如果一个应用不关心底层的操作系统映像时。一个800MB的应用程序去除底层各种内核和服务支撑,可能只有50MB大小。这意味着在网络上移动应用,其网络负载仍然非常大。在这样一个云数据中心的时代,数据在云中的流入和流出都需要花钱,而通过UniKernels无核化这不仅可以网络传输节省时间,而且可以节省真正的钱。
2. UniKernels启动速度快。
最近实现UniKernel实例启动可以控制在20毫秒左右,这意味着UniKernel实例可以启动在接受的网络请求后几乎可以立刻提供服务。Anil Madhavapeddy领导的一个MirageOS项目名字叫JitSU,就是利用UniKernels来实现云中服务的快速启停。
3. 安全性更好
UniKernel无核化降低了系统的体积和复杂度,因此相对于Docker等容器技术安全性也更有优势,保证了应用程序不需要的其他组件不存在被攻击的风险。此外,UniKernels往往是“不可改变的,“这意味着一旦建成,改变它的唯一途径是重建,没有补丁或不可预测的变化,从而降低了系统部署后补丁管理的复杂度。
4. 兼容性优势
虽然大多数UniKernel设计一直专注于新的应用程序或能够基于该模型编写代码的应用,一些新的技术例如Rump Kernels提供把现有的应用程序运行在UniKernel服务之上能力。Rump的内核组件化能够操作系统的各子系统组建以及所需要的驱动程序打包,并将它们编译成应用程序之中去。
以上四种优势能够很好的支撑云化的发展趋势,例如:微服务、微内核、离散化,快速便携式应用实例迁移。像Docker和CoreOS技术把基础设施服务更好的微服务化,然而,这些服务仍然需要改变和进化,这也是像UniKernels灯技术发展的驱动力。
UniKernels的强大能力和简单化将会在未来的五年中产生深远的影响,它至少会补充我们目前称之为容器的技术,并逐步占领市场甚至完全取代Docker。我希望容器技术的狂热者们已经准备好了。