這兩年容器技術(shù)及其相關(guān)工具,平臺(tái)異常火爆。在各大技術(shù)論壇或云計(jì)算峰會(huì)議題中,都會(huì)占很大比重,各主流云計(jì)算平臺(tái)也無(wú)一例外地迅速提供了容器服務(wù)。從2014年或更早,就有專家預(yù)見(jiàn)到Docker/容器技術(shù)會(huì)是云計(jì)算的顛覆力量(disruptive force)。坦率地講,云計(jì)算作為一種服務(wù)和應(yīng)用的業(yè)務(wù)模式,很難講會(huì)被顛覆,但容器技術(shù)的確是云計(jì)算的game changer,它改變了我們思考云計(jì)算的視角,是云計(jì)算的reinventor。
目前很多容器技術(shù)分析和經(jīng)驗(yàn)分享中,人們談?wù)摿怂鼛?lái)的諸多好處:
極其輕量:只打包了必要的Bin/Lib;秒級(jí)部署:根據(jù)鏡像的不同,容器的部署大概在毫秒與秒之間;易于移植:一次構(gòu)建,隨處部署,因?yàn)楸旧硎且粋€(gè)自包含鏡像;彈性伸縮:Docker、Kubernetes、Mesos這類容器管理平臺(tái)有著與生俱來(lái)的彈性管理能力;但貌似這些特點(diǎn),之前虛擬化云管理平臺(tái)也或多或少都可實(shí)現(xiàn)。容器鏡像在某種程度上也常被視作為輕量級(jí)虛機(jī)鏡像,至于快速部署,彈性伸縮也可通過(guò)自動(dòng)化腳本、監(jiān)控、編排(比如heat)來(lái)組合完成。那么,容器技術(shù)究竟給云計(jì)算帶來(lái)什么本質(zhì)的改變呢?
圖1. 部署速度的演進(jìn)(引自Adrian Cockcroft, Battery Ventures)
這張圖是Adrian Cockcroft在2014 DockerCon上第一次提出,介紹了部署速度的演進(jìn),但其分類貌似沒(méi)嚴(yán)格遵循統(tǒng)一視角,比如Virtualization和Container從技術(shù)角度講,而Serverless更像應(yīng)用實(shí)現(xiàn)架構(gòu)的視角,不特指某種技術(shù)。假如做個(gè)粗淺的解釋, Datacenters可以理解為傳統(tǒng)技術(shù)下的IT平臺(tái),Virtualization可以理解為基于虛擬化的云計(jì)算平臺(tái),Containers可以是Docker、Kurbernetes、Mesos之類的容器平臺(tái),而Serverless則可是AWS Lambda為代表的新型應(yīng)用平臺(tái)。這里,有了另一個(gè)問(wèn)題,毫秒級(jí)的部署和秒級(jí)的生命周期對(duì)云計(jì)算又意味著什么?
先以AWS Lambda為例,了解一下Serverless。 Lambda是個(gè)事件驅(qū)動(dòng)的彈性計(jì)算平臺(tái)。用戶可以寫一段代碼,AWS為其創(chuàng)建一個(gè)Lambda資源,這樣,當(dāng)指定的事件來(lái)臨的時(shí)候,AWS的runtime會(huì)創(chuàng)建相應(yīng)運(yùn)行環(huán)境,執(zhí)行代碼,執(zhí)行完畢(或者timeout)后,回收相應(yīng)資源。看起來(lái)很平常,但Lambda一推出即驚艷四溢,為什么?
AWS網(wǎng)站上有個(gè)Lambda對(duì)流數(shù)據(jù)處理分析參考案例。Localytics是一家網(wǎng)絡(luò)和移動(dòng)應(yīng)用分析公司,他們需要對(duì)來(lái)自安裝在超過(guò)30億設(shè)備中37,000多個(gè)App的數(shù)據(jù)進(jìn)行App使用情況和用戶行為進(jìn)行分析。工程團(tuán)隊(duì)需要經(jīng)常對(duì)子數(shù)據(jù)集提供新的分析處理服務(wù),通常這意味著分析平臺(tái)需要考慮額外的容量規(guī)劃,性能監(jiān)測(cè)和基礎(chǔ)設(shè)施管理。然而,在這樣量級(jí)上,這無(wú)疑會(huì)讓平臺(tái)變得復(fù)雜,新服務(wù)上線變得緩慢而痛苦。Localytics采用了Lambda實(shí)現(xiàn)了新的數(shù)據(jù)分析服務(wù),這些服務(wù)可以并行訪問(wèn)來(lái)自30億個(gè)設(shè)備的流數(shù)據(jù),從而能迅速為客戶提供相應(yīng)的分析報(bào)告,如圖2所示。
圖2. Lambda對(duì)社交媒體數(shù)據(jù)流處理(來(lái)自Amazon網(wǎng)站)
在AWS Lambda之前,IFTTT已經(jīng)在提供類似事件驅(qū)動(dòng)動(dòng)作(/計(jì)算)的服務(wù),但一直不溫不火。為什么到AWS Lambda就火呢?從目前了解的有限資料來(lái)看,AWS Lambda是基于容器技術(shù)實(shí)現(xiàn)的,它把核心函數(shù)和服務(wù)包裝成容器,相信也同樣打包了用戶代碼,同時(shí)高度優(yōu)化了容器的管理和調(diào)度,實(shí)現(xiàn)快速幾乎實(shí)時(shí)的大規(guī)模scale out和scale down。也就是說(shuō),同樣的業(yè)務(wù)場(chǎng)景,容器技術(shù)讓AWS Lambda和IFTTT產(chǎn)生了完全不同效果。同樣,也正是容器易于部署,編排的特性,讓用戶專注于應(yīng)用本身而不是計(jì)算資源的管理,這就催生了Serverless的概念。
Lacalytics的例子很好說(shuō)明了容器技術(shù)以應(yīng)用/服務(wù)為中心的(application centric),而傳統(tǒng)基于虛擬化技術(shù)的云平臺(tái)是以機(jī)器(虛擬或真實(shí)的物理資源)為中心,后者勢(shì)必讓我們?nèi)タ紤]很多所謂DevOps的工作,而顯然那將是需要不斷提高但卻永無(wú)止境的付出。容器技術(shù)以應(yīng)用/服務(wù)為核心,跳出了原有以資源管理維護(hù)為中心的思維模式,顯然是云計(jì)算演進(jìn)過(guò)程中的一個(gè)里程碑式的跨越。
除了催生Serverless概念,容器技術(shù)還發(fā)展出了另外一個(gè)概念:immutable infrastructure(不可變基礎(chǔ)架構(gòu))。所謂不可變基礎(chǔ)架構(gòu),就是說(shuō)系統(tǒng)一旦部署,就不再更變升級(jí)。當(dāng)服務(wù)/應(yīng)用需要升級(jí)時(shí),只要部署一個(gè)新版系統(tǒng),摧毀舊版就好了。在這個(gè)過(guò)程中,系統(tǒng)對(duì)外服務(wù)幾乎是持續(xù)的。從這個(gè)概念描述中,我們很容易想到容器及相應(yīng)的編排管理框架可以自然地實(shí)現(xiàn)immutable infrastructure。 Google的Brendan Burns有一段對(duì)Kurbenetes介紹視頻,其中一個(gè)非常直觀的演示場(chǎng)景就是在幾乎不影響對(duì)外服務(wù)的情況下如何迅速將Container封裝的應(yīng)用從1.0升級(jí)到1.1。這利用到了container輕量化,快速部署的特性,使得以新替舊的成本大大低于升級(jí)維護(hù)舊Container —— 聽(tīng)起來(lái)是個(gè)很不錯(cuò)的免維護(hù)的場(chǎng)景。表1對(duì)immutable infrastructure和artisanal infrastructure(手工藝架構(gòu))做了比較:
表1. Immutable Infrastructure vs. Artisanal Infrastructure
事實(shí)上,類似免維護(hù)的觀念在硬件領(lǐng)域已非常普遍。比如電腦的顯示屏不亮了,維修工程師要么換屏,要么換主板,沒(méi)有人會(huì)再用儀器去檢測(cè)顯示芯片組了,因?yàn)檫@樣的投入費(fèi)時(shí)費(fèi)工。這里,修(維護(hù)升級(jí))還是換(去舊補(bǔ)新)基于很簡(jiǎn)單的成本邏輯,一旦換新的比升級(jí)舊的成本更低時(shí),人們自然選擇直接換新的。同樣,Container標(biāo)準(zhǔn)化封裝和快捷部署和銷毀,讓新應(yīng)用/服務(wù)取代舊應(yīng)用/服務(wù),比研究如何給應(yīng)用/服務(wù)打patch升級(jí)更為簡(jiǎn)化高效。由此,容器技術(shù)讓應(yīng)用的immutable infrastructure變成現(xiàn)實(shí)。
此外,經(jīng)常跟容器技術(shù)一起談?wù)摰牧硪粋€(gè)概念是Microservice架構(gòu)。Martin Fowler在一篇文章中用下圖3 形象地做了說(shuō)明:
圖3. 整體封裝(應(yīng)用)與Mirco-Serivce架構(gòu)
并談到了微服務(wù)的幾個(gè)主要特征:
組件化的服務(wù)(封裝)圍繞業(yè)務(wù)能力組織是獨(dú)立產(chǎn)品不是項(xiàng)目簡(jiǎn)化的通訊與連接去中心管理去中心數(shù)據(jù)管理基礎(chǔ)架構(gòu)自動(dòng)化容錯(cuò)設(shè)計(jì)遞進(jìn)設(shè)計(jì)從這些特性看,容器技術(shù)及其相關(guān)的編排管理框架是得它成為實(shí)現(xiàn)Microservice架構(gòu)最自然的載體。比如,通常一個(gè)Container鏡像是一個(gè)應(yīng)用/服務(wù)的獨(dú)立完整的封裝,一般要求是Stateless,而且從管理角度看,Container平臺(tái)都提供自動(dòng)化的生命周期,scale out和scale down的管理。
Serverless架構(gòu),Immutable Infrastructure和Micro-service架構(gòu),這些概念/方法的出現(xiàn),給我們構(gòu)建云計(jì)算應(yīng)用/服務(wù)提供了全新視角,使得創(chuàng)建和部署新應(yīng)用就像使用樂(lè)高積木一樣簡(jiǎn)單,大規(guī)模的彈性伸縮就如同自動(dòng)點(diǎn)一下復(fù)制和刪除命令一樣快捷。我們?cè)趧?chuàng)建應(yīng)用/服務(wù)時(shí),不用再考慮機(jī)器(資源),不用再考慮維護(hù),而且有很多可隨時(shí)拼裝的組件待用,同時(shí)服務(wù)的部署也非??旖?,讓失敗的成本大幅降低,我們唯一所需關(guān)心的只是應(yīng)用和服務(wù)本身。通過(guò)上面的討論,我們看到這一切最重要的推動(dòng)力量就是容器技術(shù)。
容器,這個(gè)十幾年前的技術(shù),結(jié)合近年發(fā)展起來(lái)編排管理框架,把Serverless、Immutable Infrastructure 和Micro-Service這些美好概念變成了真正的現(xiàn)實(shí),從而給云計(jì)算的發(fā)展帶來(lái)了革命性的進(jìn)步。正如Docker的創(chuàng)始人Solomon Hykes在DockerCon 15的主題演講談到的,Container技術(shù)讓互聯(lián)網(wǎng)可編程(programmable),使得大規(guī)模創(chuàng)新(massive innovations)成為可能。