Docker与容器技术无疑是近两年在IT技术领域最为火热,赚尽眼球的技术。从2015年到2016短短一年,仅在中国以容器技术相关产品为主要产品方向的企业就从几家变到了几十家。不过与此同时,很多人可能没注意到,另一项技术Unikernel在美国兴起,引发很多技术控的追随热捧,促生了很多相关领域的项目。Unikernel的粉丝甚至说Unikernel会很快代替容器技术成为新一代云计算技术的代名词。
Unikernel技术可以翻译成专用内核技术或者特型内核技术。传统的操作系统,例如Windows和Linux,功能全面复杂,在系统中运行多种应用程序,管理调度这些不同的应用程序共享计算机系统中的资源。而Unikernel系统在一个操作系统中只运行一个应用,它将运行这一个应用所需要的应用程序、依赖的库文件和系统内核模块打包成一个独立的虚拟机,将这个虚拟机部署到hypervisor上去运行。Unikernel技术的核心是依靠hypervisor去隔离和调度不同的应用程序,这和传统的虚拟机技术是一样的。这样的隔离方式显然比容器在同一个操作系统上用namespace隔离或者干脆在一个系统上运行多个应用没有隔离安全得多,这也是人们发展Unikernel技术的主要原因之一。
Unikernel技术与Container技术一样,目标都是成为下一代云计算平台的基础技术。Container技术之所以兴起,一大原因是它相对于传统虚拟机的性能优势。传统的虚拟机技术,打包运行的虚拟机上面要安装完整的虚拟机操作系统,这导致虚拟机镜像占用空间巨大,虚拟机启动缓慢而且运行虚拟机时虚拟机操作系统占用了很大一部分系统资源。通常的性能测试,虚拟机在镜像占用空间,启动时间和运行时占用的资源方面都是容器对应的几十倍。而Unikernel技术,采用了和Container类似的理念,只打包与特定应用相关的程序,因此性能大大提高,可以与容器媲美。同时,众所周知,容器相对于虚拟机的一个劣势是容器隔离性比虚拟机隔离性弱得多,这使得容器以及运行容器的主机更容易遭到主机上的恶意容器的攻击。而Unikernel技术,具备了容器技术性能的同时,也具备了虚拟机的安全隔离性,因此Unikernel是以比容器更安全的云计算基础技术为标签提出来的。
有技术研发经验的人都知道,天下没有面面俱优的技术。Unikernel既安全有高效,是不是相对于容器技术就占据全面优势了呢?不是的,Unikernel的弱点就是难调试和难扩展。Unikernel虚拟机中完全没有与应用无关的调试工具和系统服务,不言而喻,调试一个运行中的Unikernel虚拟机要比调试一个运行中的 容器困难得多。难扩展性也是类似的,开发人员可以在一个运行中的容器中方便地增加新模块,验证新的代码变动和配置变动,可是在一个Unikernel虚拟机中却完全做不了任何与现有应用无关的事情。这其实再一次证明了,安全性与易用性和易扩展性,永远是对立的系统设计目标,工程师总是要根据实际的应用场景在这两方面找到一个平衡点。
如果再加上Container一直被大家吐槽的稳定性问题,基本可以说,相比较Container,Unikernel的技术优势是安全,稳定,劣势是难调试,难扩展。这样的技术,最好的应用场景就是,一旦部署上去,就可以安全稳定的运行较长时间,而不是三天两头需要迭代、更新、调试。因此目前看来,Unikernel技术不适合互联网的节奏。另一方面,Unikernel技术非常适合一些对安全、稳定性要求高的应用场景,例如医疗信息系统,高速网络设备,数据库;Unikernel也非常适合实现一些通用稳定的协议和算法,例如通信协议、加密解密算法和比特币挖矿算法。相反的,容器技术,则非常适合那些业务功能不停迭代,持续变化的应用场景,是一种对变更友好,对应用逻辑不断演化友好的技术,因此容器技术相对来说,更适合电子商务、移动互联应用等需求变化多样、始终持续迭代演进的应用和服务。
Unikernel与Container两项技术,彼此既是竞争关系,也是互补关系,甚至也可能成为共生关系,例如,构建虚拟机作为容器运行的微内核,也是Unikernel的重要应用场景之一。
本文转自: http://blog.sina.com.cn/s/blog ... .html