橫空出世的江湖少俠:Docker
2013年司澎,后端的江湖并不平靜卢佣。Clound Foundry為代表的開源PaaS項目正在辛辛苦苦普及概念重荠,培育用戶,吸引了百度虚茶、京東戈鲁、華為、IBM等國內外一線大廠嘹叫。當他以為四海安固婆殿,應用托管和虛擬機云計算組合,天下無敵罩扇,可為武林盟主之時鸣皂,一位少俠橫空出世,來者不是別人暮蹂,正是Docker寞缝。
說起當時還叫dotCloud的Docker公司,出道時平平無奇仰泻,相比于Heroku荆陆、Pivotal、Red Hat等江湖大俠而言集侯,docker還只是個名不經傳的毛頭小子被啼。但是docker出手不凡,直接就是降維打擊棠枉,短短幾個月在這些江湖大佬還沒反應過來之時浓体,就已經贏得了開發(fā)者的青睞,在所有的PaaS社區(qū)還沒有意識到真正危機的時候辈讶,就被提出局了命浴。
那么docker到底是怎么降為打擊,怎么一出山就打敗各大江湖名宿的呢贱除?
有人會說docker是用了容器生闲,cgroup, namespace等技術,所以出手才這么猛月幌。其實不管是容器技術還是cgroup, namespace等linux技術碍讯,并不新鮮,也不是docker公司發(fā)明的扯躺,07年的時候cgroup就已經合入linux主線了捉兴,“容器”的概念早已使用多年蝎困。Docker項目和Cloud Foundry容器并沒有太大不同,在docker發(fā)布不久后倍啥, Cloud Foundry首席產品經理James Bayer就在社區(qū)里做了對比难衰,說明Docker只是使用Cgroup和Namespace的一個沙盒實現(xiàn)而已,并沒有什么“黑科技”逗栽,不需要特別關注。那么到底是什么使得這位PaaS界征戰(zhàn)多年的大佬James Bayer判斷失誤的呢失暂?
任何技術或者產品被人們所青睞彼宠,除了易用性、好用等產品邏輯做的好之外弟塞,能對業(yè)內形成降維打擊的凭峡,往往是解決了用戶的某個核心痛點。而Docker就解決了開發(fā)運維的核心痛點决记,這個痛點就是測試摧冀、線上、開發(fā)環(huán)境問題系宫,而Docker使用的方法就是鏡像索昂。
作為一個開發(fā),比如使用python扩借,有pip的依賴, 上線時需要解決的一個問題是椒惨,依賴環(huán)境等能同步到線上機器。常見的解決方法是各種黑腳本潮罪、黑配置or ansible playbook康谆,太麻煩,太糟心了嫉到。而cloud foundry所代表的PaaS項目沃暗,雖然提供了所謂的“應用托管”能力,但是何恶,適配起來需要額外的工作量孽锥,而且各家有各家的玩法,不同的環(huán)境也不易復用细层。
對于這個痛點忱叭,docker的提供了新的解題思路,這個思路也很簡單今艺,能不能創(chuàng)建一個壓縮包韵丑,這個包里包含程序運行所需要的環(huán)境,讓我的程序在這個環(huán)境里運行虚缎。這樣不管是在線上撵彻、測試等任何環(huán)境下都可以正常的運行钓株。
Docker Image這個產品就是解決上述痛點,它最厲害的地方就在于只要有這個壓縮包在手陌僵,不需要任何配置或者修改就可以達到本地環(huán)境和云端環(huán)境高度一致轴合。
自古英雄出少年,Docker通過鏡像這個小小的創(chuàng)新碗短,一舉打破了江湖的平衡受葛,開發(fā)者紛紛用腳投票,加入了Docker陣營偎谁。但事情并未如此簡單的截止总滩。
有人的地方就有云,有云的地方就有江湖巡雨,而江湖從不平靜闰渔,解決了項目打包,隔離環(huán)境等基本問題后铐望,PaaS還有新的高山等待攀登冈涧。
高山既是險阻,也是巨大的機遇正蛙,各大廠商為此又開啟了紛爭督弓。
一統(tǒng)江湖 kubernetes
鏡像技術只是PaaS之路的起點,客戶最終要部署的還是網站乒验、服務咽筋、數(shù)據(jù)庫甚至是云計算業(yè)務。解決了單個服務的打包問題徊件,剩下的路要如何走呢奸攻?
Docker公司在這條路上經驗并不豐富,比不了Could foundry或者是Red Hat, Mesos等業(yè)界大拿虱痕。所以他收購了fig睹耐,SocketPlane等項目,推出Docker Compose部翘,Swarm硝训,Machine三件套。此時新思,大數(shù)據(jù)最受歡迎的資源項目管理Mesosphere公司窖梁,也發(fā)布了一個名為Marathon的項目,成為了Docker Swarm的有力競爭對手夹囚。
武林傳奇谷歌也不甘寂寞纵刘,推出了他的殺手锏,kubernetes荸哟。k8s源于谷歌內部的項目Borg假哎,是谷歌多年內部資源調度瞬捕,任務編排實踐的成果。并不是常見的開源社區(qū)實踐反饋到理論的路線舵抹,而是谷歌內部大量實踐的基礎上肪虎,形成的理論,直接投放到開源社區(qū)惧蛹。上來就是pod, sidercar等功能和設計模式扇救,一時間,大家紛紛表示過于“超前”香嗓,理解不鳥迅腔。
由于現(xiàn)在k8s一統(tǒng)天下,形成了事實上的基礎設施陶缺,所以大家覺得k8s背靠谷歌,所以一定是一出山就不同凡響洁灵。其實并不是這樣饱岸,k8s早期還是很弱雞的,在17年的時候徽千,k8s的早期展示的時候還是各種問題苫费,非常差勁,當年曠視做私有化平臺組件的時候沒有選擇k8s双抽,蝦皮也是根據(jù)Mesos自研百框,并沒有看出k8s的神奇之處。這是因為再好的指導思想也需要代碼的落地實現(xiàn)牍汹。而k8s初始團隊很小铐维,投入的工程能力也很緊張,直到red hat下場慎菲,與谷歌形成聯(lián)盟參與和主導k8s演進嫁蛇。同時成立了CNCF基金會,以k8s為核心孵化了Prometheus和Istio等十分給力的項目露该。
k8s設計之初就留下了Operator等便于二次開發(fā)的方案睬棚,同時社區(qū)鼓勵二次創(chuàng)新,打造了繁榮的開源社區(qū)解幼。
尾聲
在這里我要根據(jù)我的親身經歷說一下抑党,我們很多開發(fā)同學,尤其是做平臺類開發(fā)或者是定規(guī)范的撵摆,都喜歡留下文檔或者接口表示公司其他團隊可以這樣對我們的平臺做二次開發(fā)底靠,接入平臺。然后發(fā)現(xiàn)各部門平臺組大家都是這么想特铝,公司里留下一堆所謂平臺或者公共組件的爛攤子苛骨。
想做一個好的平臺篱瞎,讓別人愿意使用,甚至愿意再次基礎上做二次創(chuàng)新痒芝,那么平臺必須做好如下幾點:
平臺必須提供足夠好的抽象或者能力俐筋,解決別人的痛點。
提供足夠好的工具(組件)比如Prometheus严衬。
產品有一定的易用性澄者,做好產品文檔。
唯有這樣其他部門或者同學才有意愿接入擴展请琳。當你抱怨別人為什么不愿意使用你的東西的時候粱挡,除了部門墻這樣的問題,最大的可能就是沒有解決別人的核心痛點俄精,易用性也非常差勁询筏。