不知是由于技术炒作还是资本市场的青睐,近年来以 docker 为代表的容器化技术已掀起一股浪潮,甚至出现了不少 docker 容器将替代虚拟化的声音,他们认为 docker 容器技术将推动云计算行业下一场革命。
鉴于不少非技术出身的读者对 docker 也许不太了解, 雷锋网宅客频道借鉴公众号小黑羊的一篇文章,对 docker 先做个简单科普:
生鲜市场有很多买东西的商贩(企业),他们需要一个库房(服务器)来存放和处理这些商品。
但是鱼呀、肉啊都需要低温才可以保鲜,所以得有制冷机(操作系统),主流的制冷机有 windows 制冷机和 linux 制冷机两种,配备了制冷机的库房就可以正常工作啦!
最初的冷库就是这个样子:
可是问题来了,各种库藏品都很矫情,它们对温度的要求不一致,放在一起还会串味儿,鸡腿变成了咸鱼口味,冰激凌有了小龙虾味儿。
有个叫 vmware 的泥瓦匠想了个办法,把库房隔成很多叫做“虚拟机”的小库房,每个房间放一个制冷机,这样就再也不怕串味儿,每个小房间的温度独立可控,鱼呀虾呀表示很happy。
这就叫做冷库虚拟化技术。
原本是个挺完美的方案了,偏偏有人爱吹毛求疵瞎bb,比如老板就觉得每个隔间都要放制冷机太占地方而且又费电,总想着找点别的办法。
linux制冷机厂商有一种“软隔离(lxc)”技术,把冷库分隔成叫做“容器”的小单间,但每个房间不需要单独安装制冷机,只要布些导冷管和温控阀门,这样看起来就达到目的了。
后来有人把“lxc”这种“软隔离”技术发扬光大,用一堆“go”零件进行改装,可以大幅提高冷库的建设和改进速度,于是 docker 横空出世了!docker被业内称为容器管理引擎,其实它就是一套给冷库快速建“单间”和铺“导冷管”的装置。
所以,用 docker 建的冷库是这样子滴:
和冷库虚拟化相比,冷库 docker 具有非常明显的优势:
占用资源少:共享一个制冷机(os),各个单间埋导冷管(bins/libs)就行了。
部署快:不用建实体墙隔离(多 namespace),有样板间(docker 镜像)可参照。
启动快:拧开导冷管的阀门就可以了(共享主机 os kernel,快速加载),比启动一台“制冷机”方便。
所以对于“臭鱼烂虾”天天要搬进搬出、反复折腾的客户来讲,docker 很“敏捷”!
后来越来越多的人尝试并吹捧 docker,于是有人跳出来说:docker 技术简直会掀起冷藏行业下一代的革命,将彻底替代冷库虚拟化技术!这就是文章开头所说的“docker 浪潮”。
作为曾创下中国云计算行业单笔融资额最高记录的公司,青云的技术负责人,甘泉没有办法去忽略这件事,他一直在思考如何把 docker 更好地运用到云计算上。有人告诉他:“直接在青云上提供容器服务不就行了?”,然而在有“架构洁癖”的甘泉眼中,这实在太不“优雅”了,一个好的云服务怎能容忍随意拼凑!
于是在前不久 msup 麦思博主办的第 5 届全球软件案例研究峰会(top100 summit)上,青云 qingcloud 的 cto 甘泉向现场观众讲述了自己是如何看待虚拟化与容器技术的,以及他眼中“优雅”的云服务架构。
在甘泉看来,容器技术固然拥有许多优势,然而要完全替代虚拟化,这是不现实的,因为他们二者的特点非常的鲜明,就像镜子两面一样,这个的缺点正是那个的优点,因此容器和虚拟化一定是互补而不是替代关系。
甘泉表示,目前云服务市场的容器服务主要有两种部署方式:一种是在虚拟机上部署,一种是在物理机上部署,而两种部署各有利弊。
对于虚拟机的容器部署,甘泉认为
容器技术的优势本身就在于轻量、快,而底层却用virtual machine来支撑,虚拟化会有一定的性能损耗,尤其在存储和网络方面,因此这样的组合其实是一种妥协。
然而基于物理机的部署方式的缺点则更让人头疼,因为用户需要自己去管理存储和网络,而容器服务的存储和网络非常不成熟,很难满足企业用户的需要。
在甘泉看来,容器服务发展的瓶颈和所有的痛点都来自于,容器服务想要做底层的东西却又做不好,而底层基础设施平台的能力又直接决定应用运行时的质量,是决定应用能否成功、产生价值的核心因素。因此不解决这一问题,容器注定无法发挥最大优势。
事实上传统厂商对于容器和虚拟化问题已经有了亚博电竞网的解决方案,但这些方法都入不了甘泉的眼,用甘泉的话来说:不优雅。
在和雷锋网宅客频道谈及技术学习时,甘泉曾这样说过:
我一直有一个观念,做工程师写代码的,大部分看上去像个屌丝,一个好的工程师外表可以很屌丝,但内心一定要优雅,工程师的优雅体现在什么地方呢?体现在你架构设计得漂不漂亮、合不合理、高不高效。
因此对于容器和虚拟化的问题上,甘泉依然坚持自己的“优雅技术观”:
传统云平台只支持虚拟化或容器,不能两者兼顾。为了既支持虚拟化又支持容器,传统云平台为每种需求都部署一套系统,并将多套割裂的系统进行叠加,最终拼凑出一套方案。
这样看似可以提供整套虚拟化 容器的服务,实际上非常别扭,底层网络和存储是割裂状态,网络会变得非常复杂且效率低下。
一个追求优雅的技术人眼中看到这种拼凑的处理办法,就好比强迫症看到白色键盘缺了一个键,用黑色的来补,不能忍啊!
什么才是优雅的做法?甘泉心中其实早已有了答案。
甘泉认为,目前容器服务本身虽然在上层应用的构建与编排时非常强大,但在基础资源层的能力非常薄弱,搞不定存储和网络,因此首先青云实现了一个统一的网络和存储平台,也就是此前在青云insight大会上展示过的 sds 2.0 和 sdn 2.0 ,它们负责提供底层的存储和网络能力。(详见)
在此之上,青云提供基于主机的集群管理框架,提供了两种主机:容器主机和虚拟主机,两者互为补充。最关键的是,青云能够将 sdn 的能力直通给上层的 container(容器),使每个 container 都有青云sdn提供的网络能力,而不需要再构建一层虚拟网络。
这就意味着基于容器集群管理框架可以把存储和网络完全交给 iaas 去做,从而实现分层的理念:大家各自做自己最擅长的事情,iaas层解决存储和网络等资源层面的问题,应用层解决应用构建与编排的问题,从而发挥各自最大优势。
从前有个“老程序员”告诉过雷锋网宅客频道编辑,如果一个程序员家里鞋袜乱丢,被子不叠,锅碗瓢盆,臭气熏天,基本可以论断他不是个好程序员,这类人会容忍代码里无处不在的冗余,任由一段代码恶化下去而不去重构,不考虑伸缩性,扩展度,可维护性,完全凭感觉,凑合,对付,反正能交工就完事。
他说,我看一个人写的程序,做的架构就能大致看出来一个人的性格,生活状态,程序就是他面对这个世界的态度。
且不评判这一论调的正确性,一想到这里,我隐约感受到了技术人甘泉对这个世界的态度。