開(kāi)源真是火了,近些年成功的IT項(xiàng)目像TensorFlow、RocketMQ、TDEngine都是開(kāi)源項(xiàng)目,而且這種火爆還出了圈,連帶著RISC-V這種準(zhǔn)開(kāi)源的芯片也成為了各方爭(zhēng)搶的香餑餑。但是如果仔細(xì)觀察這一片開(kāi)源火爆的背后其實(shí)也有不少隱憂,由于開(kāi)源只是一種松散、開(kāi)放的合作方式,這種合作方式往往能夠帶來(lái)人們意想不到的高價(jià)值產(chǎn)出,但由于目前主流的開(kāi)源協(xié)議往往沒(méi)有對(duì)于后續(xù)價(jià)值分配做出嚴(yán)格約定,這也就造成了諸如“某大廠上開(kāi)源恥辱墻”、“開(kāi)發(fā)者上門(mén)要索要代碼”的鬧劇頻頻出現(xiàn),但這些小紛爭(zhēng)和開(kāi)源巨大的利益蛋糕比起來(lái)都是小場(chǎng)面,目前開(kāi)源界的三大戰(zhàn)役主要是Dockers vs k8s、紅帽Linux vs Cent OS以及亞馬遜 vs Elastic,而這其中Docker的發(fā)展軌跡最為典型,也最值得我們思考。
Dockers Desktop收費(fèi)如飲鴆止渴,加快與k8s的分手歷程
近期,Docker 公司更新了旗下產(chǎn)品的訂閱策略,其中最顯著的變化是Docker Desktop條款的修改。Docker Desktop 對(duì)于同時(shí)滿足雇員少于 250 人,年收入少于 1000 萬(wàn)美元的小型企業(yè)、個(gè)人、教育和非商業(yè)性開(kāi)源項(xiàng)目仍然免費(fèi)。但是大中型企業(yè)則需要它需要付費(fèi)了,價(jià)格每個(gè)用戶每月 5 美元起。
雖然收費(fèi)條款有5個(gè)月的寬限,但是而對(duì)不斷商業(yè)化的Docker,開(kāi)源替代產(chǎn)品也開(kāi)始躍躍欲試,比如像Podman UI、lima都是不錯(cuò)的選擇。而最令人唏噓的是Docker這樣一位開(kāi)源界的三好學(xué)生,為什么會(huì)有如此之大的轉(zhuǎn)變。
Docker-曾經(jīng)的屠龍少年
天下武功唯快不破,在云計(jì)算的江湖從虛擬機(jī)到容器,再到Serverless莫不如此。十年前OpenStack的發(fā)布讓云計(jì)算正式進(jìn)入了虛擬機(jī)的IaaS時(shí)代,OpenStack憑借其開(kāi)源、開(kāi)放的特性,使得私有云的創(chuàng)建門(mén)檻大幅度降低,理論上講任何掌握了OpenStack開(kāi)發(fā)能力的企業(yè)都可以自行創(chuàng)建和提供云計(jì)算服務(wù)。
當(dāng)時(shí)的云計(jì)算,本質(zhì)上都是基于虛擬機(jī)的,OpenStack可以將一些性能強(qiáng)勁的物理服務(wù)器,拆分成若干個(gè)虛擬機(jī),提供給用戶使用,但虛擬機(jī)還是太重了。即使是飛天集群,新增部署虛擬機(jī)的時(shí)間也是以分鐘來(lái)計(jì)的。但是互聯(lián)網(wǎng)上的機(jī)會(huì)往往轉(zhuǎn)瞬即逝,分鐘級(jí)的等待對(duì)于用戶來(lái)講就是不能忍受的煎熬,因此瘦身版的虛擬機(jī)也就是容器開(kāi)始走入了大家的視野。
通俗的講,容器就是基建狂魔版的云平臺(tái),雖然傳統(tǒng)的基建技術(shù)安全性更高,穩(wěn)定性也更好,但是從頭修路、蓋房、裝修成本太高時(shí)間也太長(zhǎng),而容器本質(zhì)上是一個(gè)最小運(yùn)行環(huán)境的鏡像,只要給點(diǎn)陽(yáng)光就能野蠻生長(zhǎng),而且用完以后想拆也很方便,是應(yīng)對(duì)云時(shí)代流量沖擊的神器。目前Docker幾乎已經(jīng)成了容器的代名詞,每個(gè)網(wǎng)民都接受過(guò)由Docker提供的服務(wù),IT人在日常工作中肯定都接觸過(guò)Docker,Docker作為容器技術(shù)的始祖,以一個(gè)憨態(tài)可掬的小鯨魚(yú)形象出現(xiàn),在剛剛出場(chǎng)之際就將Vmware旗下的Paas平臺(tái)-Cloud Foundry斬于馬下。
2013年開(kāi)始,云計(jì)算的PaaS大幕開(kāi)啟。在PaaS時(shí)代,云計(jì)算的最小使用單位從虛擬機(jī)變成容器。最早出現(xiàn)流行開(kāi)來(lái)的PaaS平臺(tái)是由Vmware創(chuàng)立的CloudFoundry。2012年在帕特.基辛格正式接手Vmware以后,就開(kāi)始在PaaS方向發(fā)力,Cloud Foundry正是基辛格親手打造出來(lái)的拳頭產(chǎn)品,通過(guò)應(yīng)用托管功能。開(kāi)發(fā)者只需要通過(guò)一條簡(jiǎn)單的命令,就可以將整個(gè)項(xiàng)目打包,上傳到Cloud Foundry,而Cloud foundry主機(jī)集群中,找到滿足用戶需求鶴機(jī),通過(guò)容器化技術(shù),解壓并運(yùn)行用戶的項(xiàng)目包,并快速對(duì)外提供服務(wù)。令人感嘆的是歷史總是這樣的對(duì)稱美,Cloud Foundry在被Docker打敗之后,基辛格回歸英特爾推出的首款拳頭產(chǎn)品至強(qiáng)三代Ice Lake有一款專門(mén)針對(duì)docker的增加型號(hào)-8352v,這個(gè)型號(hào)在高密度容器部署方面有奇效,這段往事讀者可以參考前文《溢價(jià)5倍欲將Sifive收入麾下,英特爾的絕地反擊戰(zhàn)》、《超異構(gòu)時(shí)代“煉金術(shù)”,開(kāi)發(fā)者表示“驚艷”》這里不加贅述了。
除了基本的容器功能以外,Cloud Foundry還提供應(yīng)用分發(fā)、監(jiān)控,標(biāo)準(zhǔn)化災(zāi)備體系等等服務(wù),Cloud Foundry將程序員從繁重的運(yùn)維任務(wù)中解放出來(lái),讓開(kāi)發(fā)者不需要再去關(guān)心運(yùn)行平臺(tái)的資源使用狀況。但是Cloud Foundry并沒(méi)有把工作做到極致, 其打包功能一直為外界所詬病。開(kāi)發(fā)者甚至要為每個(gè)應(yīng)用版本應(yīng)用打一個(gè)包,其帶來(lái)的調(diào)試成本之高令人咋舌,甚至有人抱怨在Cloud Foundry所花費(fèi)的調(diào)試時(shí)間遠(yuǎn)遠(yuǎn)高于開(kāi)發(fā)一款新的應(yīng)用。
Build once,Run anywhere這句響亮的口號(hào)就是Docker打敗Cloud Foundry的最大秘決, Docker與Cloud Foundry相比其底層技術(shù)都是namespace和cgroups,但是Docker很好的考慮了應(yīng)用打包的一致性與復(fù)用性問(wèn)題,并提出了鏡像這種創(chuàng)新式的解決方案,完全可以做到三分鐘部署一個(gè)Nginx集群的效果,正是這種對(duì)程序員的友好特性,讓Docker成功取代Cloud Foundry成為當(dāng)之無(wú)愧的C位。
痛失標(biāo)準(zhǔn)話語(yǔ)權(quán),Docker埋下隱憂
Docker成為C位后,巨頭們也看到了容器方面的商機(jī),CoreOS推出了Rocket容器,Google也推出了lmctfy容器,但是面對(duì)簡(jiǎn)潔易用的Docker,即便是開(kāi)源界無(wú)往不利的Google也敗下陣來(lái),推出不久之后lmctfy容器項(xiàng)目就被關(guān)停,
幸福來(lái)得太快也讓Docker有點(diǎn)飄了,在得到大筆融資之后Docker公司開(kāi)始了瘋狂的買(mǎi)買(mǎi)買(mǎi),不過(guò)Docker之前一直是靠開(kāi)源社區(qū)的力量發(fā)展壯大的,靠收購(gòu)打造出的容器三件套:DockerCompose、Docker Swarm以及DockerMachine明顯有點(diǎn)水土不服。不過(guò)這倒是影響不大,在有了容器三件套之后Docker正式把公司的名字由原來(lái)的dotCloud改名為Docker,并且將Docker注冊(cè)成了商標(biāo)全面開(kāi)啟商業(yè)化之路。
這一系列的動(dòng)作基本宣告了之前的開(kāi)源少年已經(jīng)開(kāi)始了商業(yè)化的轉(zhuǎn)身,這也就意味著,未來(lái)云廠商要容器就要向Docker公司支付授權(quán)費(fèi)用,這一系列的動(dòng)作讓容器領(lǐng)域的眾多玩家對(duì)于Docker產(chǎn)生了警惕,過(guò)舊暴露的商業(yè)化意圖,讓云廠商們感到自身利益受到威脅,Docker沒(méi)落的種子就此埋下。
2015年,Docker在同行巨大的壓力下,他們牽頭成立了OCI(Open Container Initiative)基金會(huì),并將自己的容器運(yùn)行時(shí)LibContainer改名為RunC捐贈(zèng)給OCI,由OCI與容器各方共同制定容器和鏡像的標(biāo)準(zhǔn)和規(guī)范。但是當(dāng)時(shí)的Docker基本沒(méi)怎么把OCI放在眼里,而且憑借自身的用戶優(yōu)勢(shì)對(duì)于對(duì)于標(biāo)準(zhǔn)的制定也是漠不關(guān)心。現(xiàn)在回顧起來(lái)放棄標(biāo)準(zhǔn)制訂的話語(yǔ)權(quán),也是后來(lái)K8S有勇氣和Docker說(shuō)再見(jiàn)的主要原因,雖然OCI在Docker的缺位下發(fā)展緩慢,但接下來(lái)出場(chǎng)的CNCF(Cloud Native Computing Foundation)基金會(huì)卻是個(gè)真正的狠角色,隨著CNCF的出現(xiàn),Kubernetes也就是K8S終于登場(chǎng)了。
君以此始,必以此終,Docker終失C位
K8S是Google在2014開(kāi)源的一款容器編排項(xiàng)目,一開(kāi)始K8S只算是一個(gè)Google一個(gè)人參與的獨(dú)角戲,但CNCF帶來(lái)的社區(qū)力量改變了這一切,由于這個(gè)時(shí)候Docker已經(jīng)在商業(yè)化的道路上一去不返了,不久以后K8S社區(qū)就開(kāi)始和Docker分庭抗禮了,而且逐漸有后來(lái)者居上的趨勢(shì),基于K8S的微服務(wù)等新興技術(shù)框架迅速流行開(kāi)來(lái),最終使得以K8S為代表的容器編排平臺(tái)成為了云原生時(shí)代的C位。面對(duì)CNCF的迅速發(fā)展壯大,Docker不得已將自己的Containerd捐贈(zèng)給了CNCF,并且在2017年10月在Docker企業(yè)版中默認(rèn)內(nèi)置K8S平臺(tái)。
如果說(shuō)Docker打敗Cloud Foundry依靠的是簡(jiǎn)潔、簡(jiǎn)單的微創(chuàng)新,那么K8S對(duì)于Docker就是降維打擊了,Docker Swarm編排工作只是站在容器視角處理問(wèn)題,而站在K8S的角度上,容器只是一個(gè)運(yùn)行時(shí)的環(huán)境,Pod和Service才是K8S編排建模中所考慮的重點(diǎn),只要符合標(biāo)準(zhǔn)的容器運(yùn)行時(shí)都可以做為Pod進(jìn)行編排,也就是說(shuō)K8S對(duì)于所有容器一視同仁,用戶是否用Docker根本無(wú)所謂。在取得優(yōu)勢(shì)身位以后,K8S果斷開(kāi)始了去Docker化的動(dòng)作,在去年年底,CNCF官宣在K8S的1.20版本中Docker能夠正常使用,但是會(huì)有警告提示,而1.22版本以后,則移除Docker的支持。這其中最大的影響那些用到Docker API的應(yīng)用都將不能在K8S平臺(tái)上運(yùn)行了。
正如剛剛所說(shuō)Docker在如日中天的時(shí)候?qū)τ谶\(yùn)行時(shí)的標(biāo)準(zhǔn)漠不關(guān)心,這也使得很多Docker的增強(qiáng)功能是由Docker Shim組件提供的專屬API來(lái)完成的,但是Docker Shim并不屬于標(biāo)準(zhǔn)的容器運(yùn)行時(shí),這也就意味著K8S甩掉Docker時(shí)根本沒(méi)有什么太大的負(fù)擔(dān),而且Docker目前在商業(yè)化道路上與CNCF社區(qū)漸行漸遠(yuǎn),K8S目前作為云原生時(shí)代的C位,完全沒(méi)必要為企業(yè)版的Docker去背書(shū)。
目前DockerDesktop企業(yè)版收費(fèi)的做法并不是一個(gè)明智之舉,以目前Docker的江湖地位,各種開(kāi)源替代產(chǎn)品比比皆是,商業(yè)化的動(dòng)作只會(huì)加快他們與開(kāi)源社區(qū)的分手歷程。不過(guò)拿了人的總是手短,接受融資就要受制于資本,Docker的歷程在開(kāi)源界也算典型,比如Red Hat在被IBM收購(gòu)以后就停掉了免費(fèi)版的Cent OS項(xiàng)目,如何平衡免費(fèi)、開(kāi)放的理念與商業(yè)化利益之間的關(guān)系,是整個(gè)IT界都需要仔細(xì)考慮的問(wèn)題。