1. 程式人生 > >搬個小板凳,我們扯扯Docker的前生

搬個小板凳,我們扯扯Docker的前生

mapreduce ufs shift 保留 group 高峰 大數 app 輕量級

一、新瓶裝舊酒

首先我們需要知道,Docker是一個“籮筐”:

技術分享圖片

1.存儲:Device Mapper、BtrFS、AUFS

2.名字空間:UTS、IPC、Mount、PID、Network、User

3.網絡:Veth、Bridge、Iptables

4.Cgroups:CPU、CPUset、Memory、Device

5.安全:Capability、SELinux、Seccomp

……

二、又是Jeffrey Dean

Docker的誕生其實跟Google有很大的淵源:那年,Jeffrey Dean還是一枚鮮肉。

技術分享圖片

眾所周知MapReduce是現在通用大數據處理的理論基石,在Jeffrey Dean提出這個模型後,Google內部率先用這個模型在內部實現了大數據計算的統一模型。Jeffrey Dean在2004年的OSDI(Operating Systems Design and Implementation)會議上發表MapReduce論文之後,Hadoop按圖索驥慢慢成為了開源界最為流行的大數據處理框架。

甚至在後面,Hadoop變成了一個生態系統和Android一起養活了一大批Java程序員。

Java程序在飯前都禱告:

“噢,感謝偉大的Hadoop,感謝Android賜予我們食物,Amen!”

技術分享圖片

但和Hadoop不一樣的一點是:Hadoop需要搭建專屬的集群,而Google的MapReduce離線計算是和線上的業務是共享計算資源的。

首先說一下Google這麽做的必要性:

絕大多數線上的業務的繁忙程度是和業務類型、用戶的作息、地理位置相關的。 例如:在中國`11.11`是一個大日子,所有電商都拼了命的在搞促銷,而在歐美國家與之相對應是聖誕節;
傳統的辦法為了應對高峰期的流量往往要預備很多硬件資源備用,但這些資源在平時基本上是閑置狀態。對於更新速度極快的IT設備來說,閑置就是浪費。

Google這樣做的好處自然是能大大的提高計算資源的利用率。但之所以大多數公司沒有這麽做,是由於Linux Kernel對資源(CPU、內存、I/O)隔離設施的缺乏。誰也不願意看到一個日誌挖掘的任務導致線上業務宕機。

三、Google爸爸改內核

但Google畢竟是Google,Kernel不支持,那就改Kernel!!

技術分享圖片

於是Google的工程師就在Kernel裏增加了一種可以做資源隔離的設施:Control Groups,再配合chroot實現了一套較為完善的機制來保證進程之間可以不互相影響。

作為這套系統的某後英雄之一的Borg就是Google內部的分布式計算調度系統,負責統一調度各種MapReduce的資源分配和線上服務。

當時Google之所以選擇了這條路,也一定程度上是由於Xen、KVM這些虛擬化技術還不成熟。但即使後來外面的公司廣泛的用Xen、KVM來做資源隔離,Google也並沒有跟風,正是因為Google的這種方式省去了額外的Hypervisor和Guest OS的開銷,可以達到更高的資源利用率。

四、Google Borg rocks!

Google幾乎所有的機器都是混部的,在一臺機器上,可能運行著不同jobs的tasks。根據Google在Borg論文裏披露的數據:

Google的50%的機器運行了9個甚至更多的tasks;90%的機器運行著25個tasks,達到4500個線程。

當然Google也並不排斥KVM、Xen等虛擬化技術。對於外部運行在GAE(Google App Engine)和GCE(Google Compute Engine?)上的代碼,Google的做法就是讓它們運行在虛擬機(KVM)上,KVM進程被作為Borg的task運行。也就是說,Borg是作為下層的,KVM運行在它之上。

資源隔離機制在Google內部使用的比較穩定了之後,就被毫無保留地貢獻給了開源社區,並把它命名為Cgroups。

五、Docker

Cgroups出現後,Docker所需要的各種原材料就齊備了:

2010年,幾個雄心勃勃的年輕人懷揣1000萬美元的融資在舊金山成立了一家做PaaS平臺的公司,起名為dotCloud。目標是做世界上最好的PaaS,打敗他們:

Amazon AWS

Google GAE

IBM Bluemix

RedHat OpenShift

Microsoft Azure

VMware Cloud Foundry

Heroku

……

面對這些動輒千億市值的大佬,絕大多數人都跟他們說:『呵呵??』。

在苦苦支撐了幾年之後,公司業務始終不見起色。dotCloud的創始人Solomon Hykes決定把dotCloud的所有源代碼開源來搏一把。 沒想到,他們的核心引擎Docker重現了當年Linux Kernel開源時的豐彩,獲得了廣大服務端程序員的追捧:“這個容器管理引擎大大降低了容器技術的使用門檻,輕量級,可移植,虛擬化,語言無關,寫了程序扔上去做成鏡像可以隨處部署和運行,開發、測試和生產環境徹底統一了,還能進行資源管控和虛擬化。”

於是,dotCloud迅速停下其它手中業務的開發,開始專心研發Docker產品和維護相關社區,過上了幸福而快樂的生活。後面甚至把公司名字都改成Docker,2014年8月Docker宣布把PaaS的業務dotCloud出售給位於德國柏林的PaaS提供商CloudControl,dotCloud的歷史告一段落,Docker的序幕緩緩拉開……

技術分享圖片

搬個小板凳,我們扯扯Docker的前生