Xen项目社区开发了一种开源类型1或裸机虚拟机管理程序;有了这种虚拟机管理程序,用户就可以在单单一个机器(或主机)上并行运行一个操作系统的多个实例,或者甚至并行运行不同的操作系统。
首先允许本人阐明一点:我喜欢Docker。我认为这是项优秀的技术。我能设想在各种各样的场景下,一种轻型、容器化的部署机制确实很出色,尽管它没有虚拟机管理程序在底层保护主机操作系统的优点。我觉得它很酷。
不过,少数几个人在大声宣称:“战争已结束!容器已胜出!虚拟机管理程序已过时了!”
不好意思,这种观点大错特错了。
这就好比一名捍卫冠军头衔的拳击手在第一个回会中给对手几记重拳后就大喊大叫:“比赛结束了!我获胜了!我是卫冕冠军!”
我们都知道事实不是这样子。最终,冠军头衔落到赢得比赛的那一方。而回到正题,容器与虚拟机管理程序之战还没有结束,只是刚拉开了帷幕。
为容器正名
Docker及其他Linux容器背后的概念很靠谱:
• 由于从虚拟机本身去除了冗余或不必要的操作系统要素,非常小的虚拟机让用户可以大大提高服务器密度。
• 巧妙封装的虚拟机规模很容易转移、复制和控制,从而确保了很高的可移植性。
• 虚拟机软件堆栈很小巧,杜绝了这个问题:构建一大堆的针对特定版本的操作系统以及复制和维护起来需要投入大量精力的工具。
• 极快的启动时间有助于获得更灵活的基础设施,有更大的活动余地迅即满足当下的需求。
不过,面临的挑战在于,“共享内核”策略的安全攻击面在这个“共享内核”本身中存在其最薄弱的一环。要是某个不怀好意的黑客设法闯入了这个共享内核,使用该共享内核的所有实例都有可能岌岌可危。
当然,传统虚拟机管理程序存在类似的问题――要是你能闯入虚拟机管理程序,就有可能闯入它所运行的虚拟机――但业界在加固安装的虚拟机管理程序方面有着多年的丰富经验。虽然这不是懒汉就能完成的任务,但也不是什么高深莫测的任务。世界上成百上千的成功的虚拟化和云计算提供商都能证明这项任务的易管理性:从亚马逊、Rackspace、韦里逊和华为等巨头,直到比较小的本地和专业服务提供商,后者的知名度要小得多。
坚称容器占有优势的一些人援引谷歌就是个典例。他们表示,通过设计可在容器上安全运行的Google Docs应用程序架构,谷歌俨然指明了一条出路。
可是谷歌是个例外。它有实力聘得起成千上万的顶尖人才,完成很少有其他公司能完成的重任。我在这个行业摸爬滚打了30年,而且在现场与客户打了20年的交道,怀疑大多数企业很容易做到谷歌所做的事情。
理想的解决方案就是,提供容器的优点,同时实际上减小攻击面。在云计算时代,系统需要比以往任何时候更高的安全性。共享内核场景根本提供不了这种安全性。
实际上,形势非常紧迫,以至于多名Docker高级用户在芝加哥召开的LinuxCon北美大会上宣布,他们在传统的虚拟机中使用Docker,以增强安全性。连Docker新的合作伙伴VMware最近的宣布也彰显了在VMware的虚拟机中运行Docker的价值,“从而将安全功能引入到容器环境”。突然之间,宣布虚拟机管理程序已完蛋的结论似乎完全下得过早了。
单内核助力对安全敏感的云计算
不过,一项技术正在冉冉升起,它在需要安全的环境下带来了极大的希望,那就是单内核(unikernel)。
单内核有时被称为“云操作系统”,或“库操作系统”,它将类似Docker的容器系统具有的诸多优点与虚拟机管理程序的安全印迹(security footprint)以及每个虚拟机里面小得多的攻击面结合起来。
单内核系统可构建小型的虚拟机。比如说,来自Xen项目孵化园的Mirage OS已构建了几个网络设备,它们在运行时只仅占数千字节(没错,确实只有“数千字节”――上一次你听说虚拟机在不到1兆字节的环境下运行是啥时候?)它们能变得这么小巧,就是因为虚拟机本身并不含有一种通用的操作系统,而是含有一段专门编写的代码,这段代码只公开了应用程序需要的那些操作系统功能。
没有多用户操作环境,没有外壳脚本,也没有占用地方的庞大实用工具库。只有让应用程序运行起来的数量刚好的代码,因而坏人没有多少可趁之机。而在诸如Mirage OS之类的单内核中,所有的现有代码都是静态类型安全的,从应用程序堆栈一直到设备驱动程序本身。它提供的并不是“终极”安全,但无疑在往正确的方向迈进。
如今,单内核类型的系统数量仍很小,它们的知名度还不是很大。除了Xen项目的Mirage OS外,还有其他单内核系统,比如Cloudius Systems的OSv、Galois Systems的HaLVM、NEC的ClickOS和LING(之前名为“Xen上的Erlang”)。它们提供的环境可以与Java、C、OCaml、Haskell和Erlang等语言绑定起来。它们还大大简化了单内核解决方案堆栈方面的开发和部署过程。
它们是新生事物,而且刚开始起步。
我非常期望,如果五年后我们回顾2014年的单内核,会觉得它们为越来越庞大的单内核类型的系统播下了种子。单内核在容器化虚拟机概念方面提高了水准,它符合大肆宣传的封装和部署优点,同时改善了软件开发工作流程、提高了资源效率。另外,可能最重要的是,它在处理这一切的同时,还能通过操作环境专门化,减小外部攻击面。坦率地说,我迫不及待地想看看这个领域会有什么发展。
“较量已结束?”不可能。我们连第一个回会都没有结束。较量才刚开始,确实令人拭目以待。