在 2012年的時(shí)候,我在豆瓣做 Douban App Engine ( a.k.a DAE)。那時(shí)候我遇到了一個(gè)問(wèn)題,就是如何隔離 Engine 的 Runtime 和應(yīng)用本身的 Runtime,如果不學(xué) GAE 那樣大規(guī)模 Mock Python 的話,無(wú)論怎么做隔離性上終究不會(huì)太完美。
在 2013年春節(jié)過(guò)后,DAE 在豆瓣內(nèi)部已經(jīng)支撐起多數(shù)服務(wù)和應(yīng)用,而我也因?yàn)槁殬I(yè)規(guī)劃準(zhǔn)備離職去穿越亞洲,這時(shí)候一個(gè)叫 Docker 的虛擬化方案進(jìn)入了我的視野。回想起 2012年我遇到的隔離性問(wèn)題的,當(dāng)時(shí)的我立刻被這個(gè)方案給吸引住了,即便在戰(zhàn)火紛飛的阿富汗腹地,也靠著僅有的當(dāng)?shù)鼐W(wǎng)絡(luò)關(guān)注著這個(gè)項(xiàng)目的狀態(tài)。
從我個(gè)人來(lái)看,隨著業(yè)務(wù)的增長(zhǎng)服務(wù)也會(huì)被逐步拆分,為了提高整體的服務(wù)器利用率和調(diào)度效率,平臺(tái)自動(dòng)化將會(huì)是一種比較好的選擇。對(duì)應(yīng)用耦合的,一般稱為 PaaS,平臺(tái)即服務(wù),如果對(duì)硬件耦合的,一般稱為 IaaS,基礎(chǔ)設(shè)施即服務(wù)。如果純粹靠 PaaS,隔離性上會(huì)比較讓人擔(dān)憂,如果是完全的 IaaS,過(guò)重的 overhead 會(huì)使得硬件利用率達(dá)不到預(yù)期以至于成本的失控。有些開(kāi)源項(xiàng)目結(jié)合 IaaS 和 PaaS 去做自動(dòng)化平臺(tái)在我看來(lái)也不是一個(gè)很好的選擇,畢竟公司千千萬(wàn)萬(wàn),業(yè)務(wù)技術(shù)線也不能一概而論,二次開(kāi)發(fā)也需要考慮平衡硬件和人力成本。所以我覺(jué)得一個(gè)好的平臺(tái)應(yīng)該做到嚴(yán)謹(jǐn)?shù)母綦x,無(wú)痛的擴(kuò)展,簡(jiǎn)單的部署,可靠的支撐等幾個(gè)方面,同時(shí)也不能損耗太多的性能,并且能易于上層的開(kāi)發(fā),降低公司成本。Docker 本身是個(gè)不錯(cuò)的基礎(chǔ)技術(shù),在隔離性和性能上取得了較好的平衡,相比之下 VM 雖然隔離很?chē)?yán)謹(jǐn),相對(duì)性能就損耗比較高了。并且 Docker 提供了一系列適合二次開(kāi)發(fā)的 API,可以方便的低成本的做出一個(gè)適合公司本身自己技術(shù)棧的自動(dòng)化平臺(tái),這對(duì)于很多發(fā)展型的公司而言那是極好的。
隨著時(shí)間的推移,在容器方面我們也看到了很多后來(lái)者對(duì)于 Docker 的挑戰(zhàn),如 CoreOS 帶來(lái)的 rocket,如有著更高隔離性的 Hyper 等。但在目前來(lái)說(shuō),我認(rèn)為 Docker 的地位短時(shí)間來(lái)說(shuō)很難被改變。一來(lái)大多數(shù)的公司主要以 Docker 作為基礎(chǔ)組件構(gòu)建對(duì)內(nèi)的自動(dòng)化平臺(tái),對(duì)更高層次的內(nèi)核安全性需求沒(méi)那么強(qiáng)烈,另外一方面基于 Docker API 的周邊組件也趨于成熟,短期內(nèi)其他競(jìng)品沒(méi)那么完備的生態(tài)環(huán)境。隨著 Docker 本身母公司的其他產(chǎn)品諸如 Docker Machine,Docker Swarm 等的成熟,以及業(yè)界第三方的產(chǎn)品如 Kubernetes 和 Mesos 等,Docker 在集群編排和調(diào)度領(lǐng)域的優(yōu)勢(shì)還會(huì)進(jìn)一步擴(kuò)大。
我依稀記得 2014年我來(lái)到芒果TV開(kāi)始搞 Docker 相關(guān)自動(dòng)化平臺(tái)時(shí)的情景,雖然當(dāng)時(shí) Docker 在業(yè)內(nèi)很火,但是實(shí)際上在公司內(nèi)部使用的還是太少,太多公司只是用其做做實(shí)驗(yàn)性質(zhì)的測(cè)試和體驗(yàn)。在 2015 年初始,新浪和騰訊兩家的分享引爆了國(guó)內(nèi)的容器圈,使用 Docker 作為其服務(wù)器集群調(diào)度和編排的公司如雨后春筍般冒了出來(lái)。同時(shí) Docker 本身也在不斷的進(jìn)化,如 1.5 引入的 stats 接口,如 1.7 引入的日志模式,如 1.8 引入的 Volume,Docker 雖然不完美但已經(jīng)足矣勝任生產(chǎn)環(huán)境下大規(guī)模使用。而未來(lái)即將到來(lái)的 libnetwork 等技術(shù),也將會(huì)在 SDN 這塊帶來(lái)新的變革。
我不好說(shuō)未來(lái)一定會(huì)怎樣,是 Docker 勝出亦或是其他技術(shù),但 Docker 所引發(fā)的這個(gè)趨勢(shì),將會(huì)在未來(lái)的一段日子里面,不斷的影響著平臺(tái)層面的開(kāi)發(fā)人員。變革,早已開(kāi)始。