不知是由于技術炒作還是資本市場的青睞,近年來以 Docker 為代表的容器化技術已掀起一股浪潮,甚至出現了不少 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 ,它們負責提供底層的存儲和網絡能力。(詳見《青云 Insight 大會上曬技術,云計算服務有哪些新玩法?》)
在此之上,青云提供基于主機的集群管理框架,提供了兩種主機:容器主機和虛擬主機,兩者互為補充。最關鍵的是,青云能夠將 SDN 的能力直通給上層的 Container(容器),使每個 Container 都有青云SDN提供的網絡能力,而不需要再構建一層虛擬網絡。
這就意味著基于容器集群管理框架可以把存儲和網絡完全交給 IaaS 去做,從而實現分層的理念:大家各自做自己最擅長的事情,IaaS層解決存儲和網絡等資源層面的問題,應用層解決應用構建與編排的問題,從而發揮各自最大優勢。
從前有個“老程序員”告訴過雷鋒網(公眾號:雷鋒網)宅客頻道編輯,如果一個程序員家里鞋襪亂丟,被子不疊,鍋碗瓢盆,臭氣熏天,基本可以論斷他不是個好程序員,這類人會容忍代碼里無處不在的冗余,任由一段代碼惡化下去而不去重構,不考慮伸縮性,擴展度,可維護性,完全憑感覺,湊合,對付,反正能交工就完事。
他說,我看一個人寫的程序,做的架構就能大致看出來一個人的性格,生活狀態,程序就是他面對這個世界的態度。
且不評判這一論調的正確性,一想到這里,我隱約感受到了技術人甘泉對這個世界的態度。