张鑫 分布式实验室 

容器和IaaS:谁动了谁的奶酪_Jav

很高兴今天能在这里跟大家一起分享一下ZStack对IaaS和Container之间关系的一些思考,我先简单介绍一下我接触容器技术的一些背景。

2013年的时候,我还在Citrix工作,有一天梁胜和我们的架构师Chairdeep找到我,说有一个客户需要用到容器,让我调研一下,当时这个客户主要需求是要做HPC,即高性能计算,传统虚拟技术性能损耗比较大,用Bare Metal技术又失去了虚拟化的灵活性,所以我们决定用容器方案,比如在一个机器上只跑一个容器,这样这个虚机就可以获得近乎物理机的性能,同时具有所有虚拟化的灵活性。

最初我选择的方向是LXC,因为这个技术我本身比较了解,也是比较流行的技术,我花了几天时间就把POC做好了。正好这个时候公司来了个新同事叫Susan,她以前是DotCloud的销售人员,知道我在做这个事情,建议我试试Docker。于是我又开始研究Docker,感觉是这个新生事物很多理念都非常新,但客户的需求是传统虚机用法,似乎那时的Docker并没有带来特别多的好处,而且Docker Hub的用法,CloudStack里secondary storage并不能很好的支持,所以最后我们还是采用了LXC的方案。我在做好POC后,就交给印度团队去实现了。也是从那个时候我开始了解并认识容器技术。

从这个背景,就可以看出我个人对IaaS和容器技术的关系,简而言之,容器和IaaS将来谁动谁的奶酪,不取决于两者自身,而是取决于用户如何使用容器技术。

大家都知道,Docker可以火起来,并非是它使用了轻量级的虚拟化技术,这个技术LXC早就有了。而是它提倡了一种新的构建App-Centric应用的方式。这个方式区别于我们传统的集中式架构的应用设计,以微服务为核心,构造一种新型的分布式应用集群。这是互联网公司非常需要和喜欢的,也是广大DevOps人员喜欢的。所以在很长一段时间,从我们做IaaS开发者的角度来看,容器技术更偏向于PaaS,做的是PaaS层面的事情,跟我们是井水不犯河水的。

但近一两年容器技术的快速发展,各种容器编排系统的出现。让IaaS从业人员产生了一种危机感。即容器越来越模糊了PaaS和IaaS的界限,很多容器编排系统其实已经在做IaaS的事情。那么是不是有一天IaaS会完全被容器取代,我们的奶酪被容器动了?

ZStack出来之后,很多朋友都在问我们什么时候支持容器,包括我的前老板梁胜,大家知道他创建的Rancher是做容器的,也建议我转做容器。但我们却迟迟没有动作,很多朋友都很急,说IaaS早就过气了,现在容器才是风口,你做容器无论是在融资还是讲故事,都比IaaS好多了。但从我个人的角度来说,我始终认为容器最强大的地方在于它带来构建应用理念的变化,应该是做App-Centric的编排系统,如果传统IaaS要往这个方向做,需要做出的改变还是挺多的。如果仅仅是像OpenStack里nova-docker那样做,对于ZStack来说就是一个星期的工作量,但这种虚机的用法,不应该是容器的主流,当时我是这么认为的。

但近半年来,我跟不少互联网公司用容器的朋友聊过,也看过像京东、360的同行关于容器使用的分享,我惊奇的发现似乎将容器当做虚机用似乎已经开始流行起来,并非我之前想象的大家会基于容器技术重新构建应用。这个时候我感觉到,或许将来真正的情况是,IaaS会动了容器的奶酪。

一项技术的流行和普及,最初都是从技术圈子里散播开来,技术的发起者或许有着非常远大的抱付和初衷,但用户使用这项技术的现实可能并不是想象那样。用户总是会找到最适合自身业务的方法来使用新技术。容器也是如此。因为大部分运维人员和开发人员,最熟悉的还是以虚机的方式构建应用,当容器带来了更快、密度更高,更轻量级的虚拟化技术时,大量的存量系统还是以他们最熟悉的方式,就是虚机方式来使用容器技术。这个现实,为传统IaaS带来了巨大的机会。

因为虚机用法的编排系统,是传统IaaS最擅长的。一旦用户用脚投票,最终让容器虚机用法流行开来,目前的各种容器编排系统相对于IaaS来说就没有任何优势。因为IaaS是最了解计算、存储、网络子系统的,容器仅仅是计算部分的一个分支而已。容器的编排系统如果要做IaaS的事情,就会越做越重,也就是把IaaS的事情重做一次,世界就不那么美好了。

前几天在另外一个群,DaoCloud的CEO陈齐彦也谈到了容器和IaaS的关系看法,他认为大家最好的情况是一对好基友,井水不犯河水。我也觉得这是最好的方式,容器做PaaS层的事情,跟IaaS层无缝配合一起构建出生态。但如果一旦容器虚机化在生产环境流行起来,那么IaaS一定会犯这个河水,踏入容器的领域。

但从另一个方面我们也要看到,App-Centric的应用仍然是所有容器从业者最希望看到的,也是他们在不懈努力的方向。激进的容器拥护者声称容器多进程、SSH的使用都是落后的应用方式,不是原生的容器应用,倡导大家要围绕容器构建出新型的应用。这个其实是我们IaaS从业者很希望看到的。因为IaaS本身提供的功能离用户的最终业务还是太远,我们非常需要有一个层面,把IaaS和用户的业务粘合起来。从目前来看,我认为容器是最好的选择。我们希望看到有一个标准的容器层,能够适配不同的IaaS,为用户打包、分发、管理、监控、运维自己的业务。这样IaaS可以专注做IaaS的东西,而不是大包大揽什么都做。这是最理想的生态关系。

未来的现实如何我们现在很难预料,因为容器技术仍然处于Hype Cycle的上升期。虽然互联网公司已经有不少成功案例,例如Netflix,但大家知道互联网公司的很多技术都是屠龙术,不是广大传统企业能玩转的。所以最终容器技术的落地情况如何,还是要看如何拥抱传统应用。未来虽然有可能属于App-Centric的容器时代,但也可能是被现实拖回传统的虚机方式。这里面的关键,还是在于用户如何去使用这个技术,在于用户如何用脚投票。

所以今天这个话题《IaaS和容器:谁动了谁的奶酪》,我的观点可以概括为:如果将来流行的容器用法仍然是虚机方式,那么IaaS一定会动容器的奶酪;如未来属于App-Centric,那么IaaS跟容器属于相互依赖的健康生态,共同构建用户数据中心的新形态。容器我个人认为是比较难动IaaS的奶酪的,因为存储、网络这些部分是绕不开的,如果容器编排系统选择向下发展,那么只会陷入另一个IaaS的泥沼,这些是他们不擅长的。但有一种情况是可能的,就是用户的容器部署只需要一个轻量级的IaaS,那么这个时候重量级的IaaS就会变的很尴尬,可能被容器使用者抛弃。这个也是ZStack这样轻量级IaaS的机会,我个人认为轻量级的IaaS + App-Centric的容器集群,会是未来广大容器用户喜欢可看到的方式。IaaS在容器时代仍然是充满机会和大有可为的。