很多時候,我們面臨未來的預(yù)測和期望,其實很多答案已經(jīng)存在在歷史中。
改變世界的“箱子”
“沒有集裝箱,就不會有全球化。”,《經(jīng)濟學(xué)家》這個評論可以說是對于這個普通的箱子的歷史性地位的一個總結(jié)。 1956年4月26日,當(dāng)集裝箱之父麥克萊恩第一次將集裝箱這種方式用于貨物運輸時,他肯定想像不到他的這個看似普通的發(fā)明,會對這個世界的影響如此深遠。因為如果把全球經(jīng)濟比作一個高速運轉(zhuǎn)的復(fù)雜的機器,那么以集裝箱為核心的現(xiàn)代運輸體系就是帶動這臺機器高速運轉(zhuǎn)的齒輪和傳送帶。
這只普通的箱子,技術(shù)含量不高,也并不復(fù)雜。和其他很多偉大的發(fā)明一樣,它的發(fā)展也是歷經(jīng)坎坷。集裝箱的概念在20世紀(jì)二三十年代就出現(xiàn)了,但是直到1957年,才由麥克萊恩開始運用于大規(guī)模的貨物運輸。在之后,經(jīng)歷了碼頭工人的抵制,標(biāo)準(zhǔn)化之爭,直到70年代中后期才大規(guī)模流行開來,但是一旦它開始普及,就立刻掀起了一股巨大的變革性的浪潮。站在浪潮之巔的國家和港口,快速的崛起。而落后于浪潮的人和物,被時代快速的拋棄。無數(shù)國家的命運因此而改變。整個世界的生產(chǎn)體系被重構(gòu)。它帶來了商品生產(chǎn)的地域分布的改變,協(xié)助方式的改變,分工的改變。不僅僅影響整個行業(yè),更影響了我們每一個人的生活。
很多時候,我們面臨未來的預(yù)測和期望,其實很多答案已經(jīng)存在在歷史中。對于傳統(tǒng)行業(yè)如此,對于高速發(fā)展的IT行業(yè),更是如此。在IT的世界里,是否已經(jīng)出現(xiàn)了這樣一只改變它的“箱子”呢?
Docker,IT領(lǐng)域的“箱子”
Docker,顧明思義,是碼頭工人的意思。從它的誕生,就和集裝箱的思想有著千絲萬縷的聯(lián)系。 Docker的發(fā)展歷史,其實很像集裝箱早期的發(fā)展史。和傳統(tǒng)的集裝箱萌芽一樣,Container(容器)技術(shù)其實早在多年前就出現(xiàn)了。從2005年的 Solaris Containers到2008年LXC 0.1版本的推出。再到后來的Google推出開源的容器管理工具lmctfy。也將近經(jīng)歷了10年的發(fā)展。直到2013年,Docker的出現(xiàn)。才代表著容器技術(shù)一個新的時代的來臨。
很多人將Docker等同于Container,其實這是不對的,就像傳統(tǒng)的集裝箱運輸體系一樣,集裝箱只是其中一個最核心的部件。用它來代表整個以集裝箱為核心的運輸體系。那么Docker其實就是以容器為核心的IT交付與運行體系。它包括了Docker Engine(容器的運行管理),Docker Registry(容器的分發(fā)管理),以及相關(guān)的一系列的API接口。包括后來發(fā)展起來的Docker Machine,Swarm,Compose。 所以可以看做是一套以容器為核心的創(chuàng)建,分發(fā),和運行的標(biāo)準(zhǔn)化體系。
如果把Container比作是傳統(tǒng)領(lǐng)域的集裝箱,那么承載集裝箱的港口就可以看做是云的服務(wù)商,集裝箱的拖船可以看做是云服務(wù)所提供的IAAS 服務(wù)。Docker公司弄出的Docker Machine之類的可以看做是一種集裝箱的吊裝設(shè)備。當(dāng)然,作為一套推動全球經(jīng)濟快速運轉(zhuǎn)的航運體系,不僅僅只有這些,還有無數(shù)的基礎(chǔ)設(shè)施,包括高速公路,集裝箱的拖車,將貨物裝入集裝箱的叉車,搬運工人。另外,還有一套軟的設(shè)施,包括各類的標(biāo)準(zhǔn),集裝箱的交付流程。所有的這些,我們都可以從IT世界里面的看到他們的身影。
所以說,Docker是一套以容器技術(shù)為核心的思想和一套標(biāo)準(zhǔn)化體系。它不是一個技術(shù),也不是一個公司。Docker不等同于現(xiàn)在的Docker公司,和它的發(fā)展和興衰沒有必然的關(guān)系。
Docker會改變IT世界嗎?
Docker會是改變IT世界的那只”箱子“嗎?下這個結(jié)論還有點早,但是我們可以從傳統(tǒng)的以集裝箱為核心的航運體系的發(fā)展史來預(yù)測一下它的未來。首先,來看看現(xiàn)代航運體系中,最核心的那個東西,也就是集裝箱,它是什么時候發(fā)明的?其實在上世紀(jì)20年代就已經(jīng)在使用了。但是為什么一直到上世紀(jì)70年代才開始流行開來。因為那個時候,集裝箱僅僅是一個工具,僅僅是防止損壞和被盜。它沒有融入到全社會的協(xié)作體系中。1956年,集裝箱之父麥克萊恩,第一次將它用到大規(guī)模的貨物運輸,這個時候,它才由一個單純的工具,開始發(fā)展成一種新的觀念和體系,才開始逐漸融入到全產(chǎn)業(yè)鏈條的運轉(zhuǎn)中去。到上世紀(jì)70年代中期,各種專用的集裝箱港口,拖船,吊裝設(shè)備開始普及和完善,這才代表的一個新的時代的開始。以集裝箱為核心的現(xiàn)代航運體系,開始取代了舊式的貨運體系。
我們再來看看Docker的發(fā)展歷史,容器技術(shù)其實早在10多年前就出現(xiàn)了。但是為什么很少人知道它?因為那個時候,它僅僅只是一個虛擬化的技術(shù),只是從一個角度解決了Run的問題,沒有看出相比KVM,XEM有太多的優(yōu)勢。2013年,Docker的出現(xiàn)是一個標(biāo)志性的節(jié)點。它首次提出了 Build,Ship,Run的概念,將容器技術(shù)向IT產(chǎn)業(yè)鏈條的上游和下游進行了延伸。從軟件的使用領(lǐng)域,延伸到了軟件的生產(chǎn)領(lǐng)域,以及軟件的發(fā)布領(lǐng)域。同時借助于容器技術(shù),打通了DevOps極大的提高了軟件領(lǐng)域的生產(chǎn)率。但是,相比傳統(tǒng)集裝箱的坎坷道路,它還有很多路要走。全產(chǎn)業(yè)界已經(jīng)接受了以容器鏡像為主要形態(tài)的軟件發(fā)布模式了嗎?應(yīng)用的執(zhí)行都基于容器了嗎?分布式以及微服務(wù)架構(gòu)已經(jīng)非常普及了嗎?顯然沒有。
Docker剛開始出現(xiàn)時,很多人覺得它和Java很像,所謂的一次構(gòu)建,隨處執(zhí)行。但是Docker和Java其實有本質(zhì)性的區(qū)別的,Java 只是解決了執(zhí)行環(huán)境的兼容性的問題,或者說它只覺得了Run的問題,并沒有把這個技術(shù)延伸到IT產(chǎn)業(yè)鏈條的各個環(huán)節(jié)中,所以注定它只是一個重要的技術(shù),而不能成為改變世界的創(chuàng)新。
集裝箱也好,容器也罷,當(dāng)我們思考,什么樣的技術(shù),才是一種顛覆性的技術(shù)時,一般從下面幾個維度去思考:
它是否帶來整個產(chǎn)業(yè)生產(chǎn)力的大幅度提升。
它是否融入到了整個產(chǎn)業(yè)的價值鏈條中去了。
整個產(chǎn)業(yè)是否圍繞它進行分工和協(xié)作。
Docker是否是一種改變未來IT產(chǎn)業(yè)的顛覆式創(chuàng)新,這里我大膽的給出肯定的答案,至少,從集裝箱的發(fā)展史,看到了它未來的樣子。
Docker會對IT領(lǐng)域帶來哪些改變
集裝箱航運的發(fā)展史,就是一部產(chǎn)業(yè)興衰史。在這個鏈條的無數(shù)的人和物的命運都被改變。有的國家,有的港口因此快速崛起。而有的則被時代所拋棄。它消滅了很多傳統(tǒng)的工作崗位,同時也帶來了很多新興的職業(yè)。中國這樣的發(fā)展中國家,因此能夠快速融入到全球的協(xié)作體系中去,實現(xiàn)了自己的快速崛起。Docker未來會對IT產(chǎn)業(yè)帶來哪些改變呢?這個問題,的確值得所有人深思。
IT產(chǎn)業(yè)分工方式的變革
傳統(tǒng)的IT產(chǎn)業(yè),大部分是以項目的方式來運行??蛻粽袠?biāo),軟件系統(tǒng)的開發(fā)商和集成商負責(zé)開發(fā)。當(dāng)完成客戶的需求以后,搭建系統(tǒng)進行測試,最后部署到客戶的執(zhí)行環(huán)境。這期間還需要負責(zé)系統(tǒng)的調(diào)試,費時費力,如果有新的模塊時,還需要重新的部署,調(diào)試。系統(tǒng)的開發(fā)者,運營者,客戶之間,無法劃分一條清晰的界限。這很像傳統(tǒng)的航運業(yè)里面,客戶需要自己把一件一件貨物搬到輪船上,費時費力。這種模式注定了無法進行大規(guī)模的分工協(xié)作,所有的模塊需要全部集中在一家大的公司進行開發(fā)。應(yīng)為協(xié)作的方式,導(dǎo)致的溝通成本太高。如果未來,所有的系統(tǒng),全部是以容器鏡像的方式去發(fā)布。任何云的服務(wù)商都可以去執(zhí)行這些計算負載。很多不同的模塊完全可以外包到世界各地的團隊去完成,只要模塊之間以微服務(wù)的方式,定義清晰的接口。完成開發(fā)后,push到統(tǒng)一的鏡像倉庫。軟件系統(tǒng)的運營者,從倉庫pull到鏡像,放到任何的云的系統(tǒng)去執(zhí)行。所有的團隊之間,都有統(tǒng)一的交付界面。大大降低了協(xié)作成本。所帶來的直接好處是,掃除了軟件眾包的方式的最大障礙。軟件眾包會成功一個非常流行的IT生產(chǎn)方式。
運維角色的轉(zhuǎn)變
集裝箱航運史上,碼頭工人是個非常悲劇的角色,一開始,抵制集裝箱,認(rèn)為會大大減少他們的工作機會,到后面,當(dāng)浪潮來臨是,其實是無法抵擋的。整個的職業(yè)基本上就消亡了。大家現(xiàn)在在碼頭上,肯定看不到那種扛貨物的碼頭工人的。但是并不是人消亡了,而是職業(yè)消亡了,取而代之的是各類的吊裝設(shè)備的操作工人,集裝箱的調(diào)度管理人員。Docker的英文意思就是“碼頭工人”,其寓意就是Docker這種東西,取代了碼頭工人的傳統(tǒng)工作,是機器的延伸。傳統(tǒng)運維,如果僅僅是安裝軟件,配置系統(tǒng),備份拷貝文件,部署和發(fā)布。如果所有的系統(tǒng)都是容器鏡像的方式去發(fā)布,所有的計算負載都是在云上面去執(zhí)行。就像傳統(tǒng)的碼頭工人一樣,消亡是必然的。當(dāng)DevOps真正實現(xiàn)后,開發(fā)和運維,其實界限越來越模糊了。人更多的是從事更有創(chuàng)造力的工作。
企業(yè)應(yīng)用市場的興起
Apple Store,帶來了2C領(lǐng)域軟件開發(fā)新的商業(yè)模式。那么企業(yè)應(yīng)用市場會有怎樣的創(chuàng)新呢?如果所有的軟件系統(tǒng),全部是以容器鏡像的方式發(fā)布。那么企業(yè)應(yīng)用市場將是一個非常重要的入口。相比于2C領(lǐng)域,企業(yè)應(yīng)用市場還是有一些不同點。未來,會呈現(xiàn)兩種模式,一種是公有的企業(yè)應(yīng)用市場。另一種是私有的企業(yè)應(yīng)用市場。中小型公司,或者比較傳統(tǒng)企業(yè),會傾向于從公有的企業(yè)應(yīng)用市場獲取軟件服務(wù)。而比較大型的公司,會傾向于建設(shè)自己的企業(yè)應(yīng)用市場。不管是哪種模式,必然會帶來,IT生產(chǎn)領(lǐng)域的分工的細化和全球化。就像目前iPhone手機上的APP所走得道路一樣。
云服務(wù)商會重新洗牌
建立在傳統(tǒng)IT模式下的云服務(wù)商,主要依賴的綁定用戶建立競爭壁壘。Docker技術(shù)會彌合各個云之間的鴻溝,計算負載可以在各個云的服務(wù)商之間自由流動。此時傳統(tǒng)的競爭壁壘不復(fù)存在了。從集裝箱航運的歷史看,云計算的服務(wù)商,好比是傳統(tǒng)集裝箱運輸體系中的港口。倫敦港的迅速衰落,而荷蘭的鹿特丹的快速崛起。為我們提供很好的歷史經(jīng)驗。最快速的擁抱這種變革的港口,會快速的崛起,而傳統(tǒng)利益之間艱難抉擇的港口,會很快被時代拋棄。當(dāng)計算可以自由流動時,更好的開放的姿態(tài)接納這種流動,更快速的規(guī)模擴張,降低單位計算的成本,是在未來云計算競爭中勝出的關(guān)鍵因素。云計算的廠商當(dāng)前要做的不是設(shè)置障礙,阻止計算的流動,也不是推出自己特有的容器的服務(wù),去充當(dāng)航運公司。因為這不會獲取任何的競爭優(yōu)勢。反而是要積極參與Docker“航運”基礎(chǔ)設(shè)施的建設(shè)。標(biāo)準(zhǔn)的制定,有更好的“集裝箱堆場”(鏡像倉庫),兼容各種集裝箱拖船的吊裝設(shè)備,讓自己的航船更經(jīng)濟,有效的運輸各個航運公司的集裝箱。
Docker未來之路在哪里?
Docker發(fā)展的現(xiàn)階段,很像集裝箱剛開始用于航運的最初的那幾年。整個產(chǎn)業(yè)鏈條尚不完善。價格并不比傳統(tǒng)貨運更有優(yōu)勢??蛻舸蟛糠痔幱谟^望狀態(tài)。所以出現(xiàn)了不同的道路的分歧??偨Y(jié)起來,有下面三種道路:
容器技術(shù)往下走,去取代傳統(tǒng)的虛擬機
基于Docker在安全,以及隔離性上面存在的一些問題,以及用戶對傳統(tǒng)機器根生地固的使用習(xí)慣(容器當(dāng)虛擬機在使用)。有一種聲音是容器應(yīng)該網(wǎng)IAAS層發(fā)展,去取代傳統(tǒng)的虛擬機,然后再通過Docker這樣一套體系去管理起來。我覺得未來可能不是這個方向,因為傳統(tǒng)的IAAS層已經(jīng)非常成熟了,傳統(tǒng)的虛擬化技術(shù),也沒用遇到很大問題,Docker再去解決計算,網(wǎng)絡(luò),存儲的問題,是重復(fù)性的工作,是為了技術(shù)而技術(shù),并不會對產(chǎn)業(yè)生態(tài)帶來任何的好處。這非常像傳統(tǒng)航運體系中,曾經(jīng)在一個特殊時期,發(fā)展起來的一種特殊的模式,就是用拖船運送帶集裝箱的卡車。集裝箱,不需要長出輪子。已經(jīng)從歷史經(jīng)驗去證明了。
容器技術(shù)往上走,取代傳統(tǒng)的PaaS
傳統(tǒng)的PAAS的確遇到了很大的問題,容器技術(shù)往上走,去替代傳統(tǒng)PAAS也是必然的趨勢之一。但是,我覺得這只是副產(chǎn)品,Docker主要的變革,并不是去改變PAAS。未來IAAS,PAAS,SAAS之間的界限越來越模糊。有可能是一個新的名詞,譬如CAAS(Container As A Service)。計算單元都是以容器為單位。上世紀(jì)60年代,越戰(zhàn)期間,以集裝箱為單位運送戰(zhàn)略物資時,美軍提出了一個著名的3C原則,也就是一個集裝箱,只運送一種貨物,一個目的地。這個原則,同樣適用于容器,也就是Docker公司提出的一個主要原則,一個進程,只跑在一個容器里面。所以,集裝箱就是最基礎(chǔ)的計算單元。
私有云的容器服務(wù)
現(xiàn)階段,公有云上搭建Docker系統(tǒng),的確鮮有比較成熟的商用案例。因為要實現(xiàn)穩(wěn)定的商用環(huán)境,一方面需要 Docker技術(shù),特別是網(wǎng)絡(luò)技術(shù)的不斷成熟。另外一方面,也需要公有云的IAAS層專門針對容器服務(wù)的深度融合?,F(xiàn)階段公有云上跑容器服務(wù),就和上世紀(jì) 50年代,用老式貨船運輸集裝箱業(yè)務(wù)。反而是私有云領(lǐng)域,得到了較為廣泛的應(yīng)用,國內(nèi)大的互聯(lián)網(wǎng)公司,紛紛在自己的私有云中實踐Docker。但是大部分依然是比較傳統(tǒng)的使用方法,也就是將容器當(dāng)虛擬機用,利用Docker的Build和Ship的體系,實現(xiàn)自己的DevOps。私有云的容器服務(wù),只是特定時期的特定現(xiàn)象。長遠看,公有云逐步取代私有云是必然趨勢。隨著Docker技術(shù)的越來越成熟。分布式以及微服務(wù)架構(gòu)的應(yīng)用越來越廣泛。私有云容器服務(wù)會成為歷史。
Docker的未來在哪里呢?其實很難預(yù)測未來的方式。但是在IT產(chǎn)業(yè)界,兩個原則是永遠不變的:
簡單的東西,永遠是最有生命力的
客戶永遠只會關(guān)注他的業(yè)務(wù),不會關(guān)心除此之外的任何東西。
Docker只要不停的讓客戶使用或者維護IT系統(tǒng)越來越簡單,永遠只需要關(guān)心自己的業(yè)務(wù),而不必費心其他的東西。我相信這就是它未來的方向。
后記
麥克萊恩發(fā)明了集裝箱,并且在此基礎(chǔ)上,建立了一個龐大的商業(yè)帝國,但是,很可惜,在上世紀(jì)80年代卻破產(chǎn)了,其實他并沒有犯什么大的錯誤,就是跑慢了。當(dāng)一股浪潮來臨時,只有在浪尖上的一群人,才能迸射出絢麗的浪花。落后于浪潮的人,則很快被新的浪花所掩蓋。2001年,當(dāng)這個老人逝世時,全世界所有的集裝箱貨船同一時刻拉響了汽笛。給予這位老人已最崇高的敬意。若干年后,或許Docker公司已不存在。但是它所帶來的思想,會流傳更久的時間。我們同樣期待看到業(yè)界對它以及那群天才所創(chuàng)造的一切,致以的相同的敬意。