容器vs.虚拟机:状态管理、网络和蔓延



  • 容器和虚拟机某种程度上解决的是相似的问题,两者间也有不少相似之处。但就像会种菜未必是好厨子,容器和虚拟机到底是两种不同工具而且有着各自适用的情况。作为技术人员我们应该清楚地了解不同工具各自的优势和劣势并根据使用情况的不同挑选合适的工具。

    还有一点我们要在这里讨论一下:技术的成熟度。从2001年VMware推出GSX和ESX开始,x86架构上的服务器虚拟化一直是业界的主流。不过其实虚拟化的概念在六十年代末期就被提出来了,而且七十年代就已经开始了实践。这么长时间的发展使得虚拟化技术的成熟度较好,生态系统也发展地很完善。2005年起VMware已经收购了20多家企业来填补自己技术上的不足。

    20160223140509164.png

    不过说历史的话其实早在VMware成立之前容器技术就已经有了,不过一直都是非主流。直到最近容器技术才有了实质性的进展,第一代工具也刚刚普及。各家企业为了卡位也开始大打收购战。

    我想澄清一点就是进行比较并不意味着对某种工具的抬高或者贬低。作为技术人员我们各种工具都要有所了解,这样才能避免随大流。

    这里我们进行三个方面的比较:状态管理、网络和蔓延。

    容器比虚拟机更容易产生蔓延现象。

    服务器蔓延听起来不是个什么好事,因为它会加剧架构的复杂程度,不过如果仔细规划和管理的话蔓延也未必就一定不好。降低系统的耦合程度以及系统的模块化有助于提高系统的扩展性和部署速度。因为任何改变都有风险,但是一定是越分散风险越小因为耦合度低比较容易恢复。风险低的话就可以加快部署的频率从而加快了交付的速度。交付速度快肯定是好事因为用户可以更快用上新特性。

    配合虚拟机使用的管理工具花了相当的时间才达到企业级应用的水平。对于容器来说也要经历类似的过程,不过肯定比虚拟机花的时间少,因为很多虚拟机的管理模式都可以直接套用在容器上。现在已经有一些解决方案可用了,比如Docker的Universal Control Plane和它最近收购的Tutum,当然还有Kubernetes和Rancher这两个编排工具。我猜以后还会有更多的工具冒出来。

    虚拟机的网络功能更为强大。

    容器技术正在网络这方面猛追。去年三月Docker就通过收购SocketPlane来试图加强在网络方面的能力。最好能搞出一个支持扩展的解决方案来。我曾经听过SocketPlane人的几场讲座,感觉他们还都挺机灵的,创新的速度也快。Docker 1.9中就加入了Overlay网络的支持,虽然远非完美,但快速的迭代使得容器与虚拟机在网络功能上的差距越来越小。

    容器技术无法实现状态管理。

    对于虚拟机来说我们可以随时挂起,不过容器不行。容器,尤其是Docker容器,是为无状态stateless应用所设计的。不过调查显示多达四分之三的受访IT从业人员都想在Docker容器中运行stateful应用。Docker 1.9中引入了对第三方存储的支持,开源项目Flocker则为Docker提供了数据管理器的功能。我想说的是既然有运行stateful应用的需求那么企业级的应用应该也是指日可待了。

    虚拟机没有完全取代裸机部署,我也不认为容器能够完全取代虚拟机,因为我们常常看到容器被部署在虚拟机上。容器和虚拟机两者并不是互斥的关系,使用上还是要根据自己的情况来选择合适的工具。

    原文链接: http://geek.csdn.net/news/detail/57095


登录后回复
 

与 青云QingCloud 社区 的连接断开,我们正在尝试重连,请耐心等待