不知是由于技術(shù)炒作還是資本市場(chǎng)的青睞,近年來(lái)以 Docker 為代表的容器化技術(shù)已掀起一股浪潮,甚至出現(xiàn)了不少 Docker 容器將替代虛擬化的聲音,他們認(rèn)為 Docker 容器技術(shù)將推動(dòng)云計(jì)算行業(yè)下一場(chǎng)革命。
Docker是如何火遍整個(gè)行業(yè)的
鑒于不少非技術(shù)出身的讀者對(duì) Docker 也許不太了解, 雷鋒網(wǎng)宅客頻道借鑒公眾號(hào)小黑羊的一篇文章,對(duì) Docker 先做個(gè)簡(jiǎn)單科普:
生鮮市場(chǎng)有很多買東西的商販(企業(yè)),他們需要一個(gè)庫(kù)房(服務(wù)器)來(lái)存放和處理這些商品。
但是魚(yú)呀、肉啊都需要低溫才可以保鮮,所以得有制冷機(jī)(操作系統(tǒng)),主流的制冷機(jī)有 Windows 制冷機(jī)和 Linux 制冷機(jī)兩種,配備了制冷機(jī)的庫(kù)房就可以正常工作啦!
最初的冷庫(kù)就是這個(gè)樣子:
可是問(wèn)題來(lái)了,各種庫(kù)藏品都很矯情,它們對(duì)溫度的要求不一致,放在一起還會(huì)串味兒,雞腿變成了咸魚(yú)口味,冰激凌有了小龍蝦味兒。
有個(gè)叫 VMware 的泥瓦匠想了個(gè)辦法,把庫(kù)房隔成很多叫做“虛擬機(jī)”的小庫(kù)房,每個(gè)房間放一個(gè)制冷機(jī),這樣就再也不怕串味兒,每個(gè)小房間的溫度獨(dú)立可控,魚(yú)呀蝦呀表示很Happy。
這就叫做冷庫(kù)虛擬化技術(shù)。
原本是個(gè)挺完美的方案了,偏偏有人愛(ài)吹毛求疵瞎BB,比如老板就覺(jué)得每個(gè)隔間都要放制冷機(jī)太占地方而且又費(fèi)電,總想著找點(diǎn)別的辦法。
Linux制冷機(jī)廠商有一種“軟隔離(LXC)”技術(shù),把冷庫(kù)分隔成叫做“容器”的小單間,但每個(gè)房間不需要單獨(dú)安裝制冷機(jī),只要布些導(dǎo)冷管和溫控閥門,這樣看起來(lái)就達(dá)到目的了。
后來(lái)有人把“LXC”這種“軟隔離”技術(shù)發(fā)揚(yáng)光大,用一堆“GO”零件進(jìn)行改裝,可以大幅提高冷庫(kù)的建設(shè)和改進(jìn)速度,于是Docker 橫空出世了!Docker被業(yè)內(nèi)稱為容器管理引擎,其實(shí)它就是一套給冷庫(kù)快速建“單間”和鋪“導(dǎo)冷管”的裝置。
所以,用 Docker 建的冷庫(kù)是這樣子滴:
和冷庫(kù)虛擬化相比,冷庫(kù) Docker 具有非常明顯的優(yōu)勢(shì):
占用資源少:共享一個(gè)制冷機(jī)(OS),各個(gè)單間埋導(dǎo)冷管(Bins/Libs)就行了。
部署快:不用建實(shí)體墻隔離(多 NameSpace),有樣板間(Docker 鏡像)可參照。
啟動(dòng)快:擰開(kāi)導(dǎo)冷管的閥門就可以了(共享主機(jī) OS Kernel,快速加載),比啟動(dòng)一臺(tái)“制冷機(jī)”方便。
所以對(duì)于“臭魚(yú)爛蝦”天天要搬進(jìn)搬出、反復(fù)折騰的客戶來(lái)講,Docker 很“敏捷”!
后來(lái)越來(lái)越多的人嘗試并吹捧 Docker,于是有人跳出來(lái)說(shuō):Docker 技術(shù)簡(jiǎn)直會(huì)掀起冷藏行業(yè)下一代的革命,將徹底替代冷庫(kù)虛擬化技術(shù)!這就是文章開(kāi)頭所說(shuō)的“Docker 浪潮”。
作為曾創(chuàng)下中國(guó)云計(jì)算行業(yè)單筆融資額最高記錄的公司,青云的技術(shù)負(fù)責(zé)人,甘泉沒(méi)有辦法去忽略這件事,他一直在思考如何把 Docker 更好地運(yùn)用到云計(jì)算上。有人告訴他:“直接在青云上提供容器服務(wù)不就行了?”,然而在有“架構(gòu)潔癖”的甘泉眼中,這實(shí)在太不“優(yōu)雅”了,一個(gè)好的云服務(wù)怎能容忍隨意拼湊!
于是在前不久 MSUP 麥思博主辦的第 5 屆全球軟件案例研究峰會(huì)(Top100 Summit)上,青云 QingCloud 的 CTO 甘泉向現(xiàn)場(chǎng)觀眾講述了自己是如何看待虛擬化與容器技術(shù)的,以及他眼中“優(yōu)雅”的云服務(wù)架構(gòu)。
云上部署容器未解決的問(wèn)題
在甘泉看來(lái),容器技術(shù)固然擁有許多優(yōu)勢(shì),然而要完全替代虛擬化,這是不現(xiàn)實(shí)的,因?yàn)樗麄兌叩奶攸c(diǎn)非常的鮮明,就像鏡子兩面一樣,這個(gè)的缺點(diǎn)正是那個(gè)的優(yōu)點(diǎn),因此容器和虛擬化一定是互補(bǔ)而不是替代關(guān)系。
甘泉表示,目前云服務(wù)市場(chǎng)的容器服務(wù)主要有兩種部署方式:一種是在虛擬機(jī)上部署,一種是在物理機(jī)上部署,而兩種部署各有利弊。
對(duì)于虛擬機(jī)的容器部署,甘泉認(rèn)為
容器技術(shù)的優(yōu)勢(shì)本身就在于輕量、快,而底層卻用Virtual Machine來(lái)支撐,虛擬化會(huì)有一定的性能損耗,尤其在存儲(chǔ)和網(wǎng)絡(luò)方面,因此這樣的組合其實(shí)是一種妥協(xié)。
然而基于物理機(jī)的部署方式的缺點(diǎn)則更讓人頭疼,因?yàn)橛脩粜枰约喝ス芾泶鎯?chǔ)和網(wǎng)絡(luò),而容器服務(wù)的存儲(chǔ)和網(wǎng)絡(luò)非常不成熟,很難滿足企業(yè)用戶的需要。
在甘泉看來(lái),容器服務(wù)發(fā)展的瓶頸和所有的痛點(diǎn)都來(lái)自于,容器服務(wù)想要做底層的東西卻又做不好,而底層基礎(chǔ)設(shè)施平臺(tái)的能力又直接決定應(yīng)用運(yùn)行時(shí)的質(zhì)量,是決定應(yīng)用能否成功、產(chǎn)生價(jià)值的核心因素。因此不解決這一問(wèn)題,容器注定無(wú)法發(fā)揮最大優(yōu)勢(shì)。
如何解決?首先要優(yōu)雅!
事實(shí)上傳統(tǒng)廠商對(duì)于容器和虛擬化問(wèn)題已經(jīng)有了解決方案,但這些方法都入不了甘泉的眼,用甘泉的話來(lái)說(shuō):不優(yōu)雅。
在和雷鋒網(wǎng)宅客頻道談及技術(shù)學(xué)習(xí)時(shí),甘泉曾這樣說(shuō)過(guò):
我一直有一個(gè)觀念,做工程師寫(xiě)代碼的,大部分看上去像個(gè)屌絲,一個(gè)好的工程師外表可以很屌絲,但內(nèi)心一定要優(yōu)雅,工程師的優(yōu)雅體現(xiàn)在什么地方呢?體現(xiàn)在你架構(gòu)設(shè)計(jì)得漂不漂亮、合不合理、高不高效。
因此對(duì)于容器和虛擬化的問(wèn)題上,甘泉依然堅(jiān)持自己的“優(yōu)雅技術(shù)觀”:
傳統(tǒng)云平臺(tái)只支持虛擬化或容器,不能兩者兼顧。為了既支持虛擬化又支持容器,傳統(tǒng)云平臺(tái)為每種需求都部署一套系統(tǒng),并將多套割裂的系統(tǒng)進(jìn)行疊加,最終拼湊出一套方案。
這樣看似可以提供整套虛擬化+容器的服務(wù),實(shí)際上非常別扭,底層網(wǎng)絡(luò)和存儲(chǔ)是割裂狀態(tài),網(wǎng)絡(luò)會(huì)變得非常復(fù)雜且效率低下。
一個(gè)追求優(yōu)雅的技術(shù)人眼中看到這種拼湊的處理辦法,就好比強(qiáng)迫癥看到白色鍵盤(pán)缺了一個(gè)鍵,用黑色的來(lái)補(bǔ),不能忍啊!
什么才是優(yōu)雅的做法?甘泉心中其實(shí)早已有了答案。
甘泉認(rèn)為,目前容器服務(wù)本身雖然在上層應(yīng)用的構(gòu)建與編排時(shí)非常強(qiáng)大,但在基礎(chǔ)資源層的能力非常薄弱,搞不定存儲(chǔ)和網(wǎng)絡(luò),因此首先青云實(shí)現(xiàn)了一個(gè)統(tǒng)一的網(wǎng)絡(luò)和存儲(chǔ)平臺(tái),也就是此前在青云Insight大會(huì)上展示過(guò)的 SDS 2.0 和 SDN 2.0 ,它們負(fù)責(zé)提供底層的存儲(chǔ)和網(wǎng)絡(luò)能力。(詳見(jiàn)《青云 Insight 大會(huì)上曬技術(shù),云計(jì)算服務(wù)有哪些新玩法?》)
在此之上,青云提供基于主機(jī)的集群管理框架,提供了兩種主機(jī):容器主機(jī)和虛擬主機(jī),兩者互為補(bǔ)充。最關(guān)鍵的是,青云能夠?qū)?SDN 的能力直通給上層的 Container(容器),使每個(gè) Container 都有青云SDN提供的網(wǎng)絡(luò)能力,而不需要再構(gòu)建一層虛擬網(wǎng)絡(luò)。
這就意味著基于容器集群管理框架可以把存儲(chǔ)和網(wǎng)絡(luò)完全交給 IaaS 去做,從而實(shí)現(xiàn)分層的理念:大家各自做自己最擅長(zhǎng)的事情,IaaS層解決存儲(chǔ)和網(wǎng)絡(luò)等資源層面的問(wèn)題,應(yīng)用層解決應(yīng)用構(gòu)建與編排的問(wèn)題,從而發(fā)揮各自最大優(yōu)勢(shì)。
從前有個(gè)“老程序員”告訴過(guò)雷鋒網(wǎng)(公眾號(hào):雷鋒網(wǎng))宅客頻道編輯,如果一個(gè)程序員家里鞋襪亂丟,被子不疊,鍋碗瓢盆,臭氣熏天,基本可以論斷他不是個(gè)好程序員,這類人會(huì)容忍代碼里無(wú)處不在的冗余,任由一段代碼惡化下去而不去重構(gòu),不考慮伸縮性,擴(kuò)展度,可維護(hù)性,完全憑感覺(jué),湊合,對(duì)付,反正能交工就完事。
他說(shuō),我看一個(gè)人寫(xiě)的程序,做的架構(gòu)就能大致看出來(lái)一個(gè)人的性格,生活狀態(tài),程序就是他面對(duì)這個(gè)世界的態(tài)度。
且不評(píng)判這一論調(diào)的正確性,一想到這里,我隱約感受到了技術(shù)人甘泉對(duì)這個(gè)世界的態(tài)度。