大家在工作中或許或多或少都接觸過(guò)Docker,那你知道Docker以及容器化背后的原理到底是什么嗎? 容器化技術(shù)滿天下,那為什么只有Docker被大家所熟知呢? 后Docker時(shí)代,到底誰(shuí)才是云原生時(shí)代的王者? 我們相信本系列文章能幫您解答這些疑惑。 被“嫌棄”的物理服務(wù)器在云時(shí)代以前,開(kāi)發(fā)者如需構(gòu)建一個(gè)線上的站點(diǎn),必須自己維護(hù)物理服務(wù)器。但是隨著業(yè)務(wù)發(fā)展,大體量服務(wù)器逐漸增多,隨之而來(lái)的是硬件、場(chǎng)地和維護(hù)成本的不斷提高。對(duì)于面向C端的站點(diǎn)來(lái)說(shuō),網(wǎng)絡(luò)熱點(diǎn)事件具有隨機(jī)性,流量的變化并不可控,難免會(huì)遭遇站內(nèi)流量暴漲的情況。此時(shí)如果沒(méi)有備用服務(wù)器,突發(fā)的大流量很可能會(huì)沖垮整個(gè)站點(diǎn)。但在沒(méi)有突發(fā)事件的時(shí)候,備用服務(wù)器的采購(gòu)和維護(hù)成本又讓人不可忽略。
哪里有問(wèn)題,哪里就有商機(jī)。有人想到,如果買(mǎi)一批服務(wù)器放在外網(wǎng),安排專(zhuān)人管理,然后按照用戶的需要租賃出去,不正好解決了這個(gè)問(wèn)題嗎? 于是,一場(chǎng)云計(jì)算的好戲,正式上演。 虛擬機(jī)還是“超重”了云計(jì)算時(shí)代的大幕拉開(kāi),大廠先后登臺(tái),讓我們先簡(jiǎn)單做一下回顧。
這時(shí)的云計(jì)算技術(shù),本質(zhì)都是虛擬化技術(shù),將硬件資源作為基礎(chǔ)設(shè)施提供給用戶,簡(jiǎn)稱IaaS。簡(jiǎn)單理解,IaaS就是將一個(gè)很大的服務(wù)器,通過(guò)虛擬化技術(shù)拆分成多個(gè)小的虛擬服務(wù)器,提供服務(wù),類(lèi)似于在本機(jī)裝了虛擬機(jī)。
但是,IaaS時(shí)代的虛擬機(jī)還是太過(guò)于笨重了。每一臺(tái)虛擬機(jī)都需要消耗CPU、內(nèi)存等計(jì)算資源才能支撐應(yīng)用的運(yùn)行。即便應(yīng)用再小,系統(tǒng)的開(kāi)銷(xiāo)都是固定的成本。如何為IaaS減肥,讓虛擬機(jī)系統(tǒng)的開(kāi)銷(xiāo)降到最低? 2013年開(kāi)始,云計(jì)算正式進(jìn)入了PaaS時(shí)代。PaaS時(shí)代,云計(jì)算所銷(xiāo)售的單元,從虛擬機(jī)變成了應(yīng)用運(yùn)行平臺(tái)。于是,云廠商提供的服務(wù)更多,資源利用率也更高了。 什么是PaaS?我們用一個(gè)通俗的例子來(lái)解釋。如果我們現(xiàn)在是一個(gè)燒餅店老板,采用IaaS模式意味著我們需要用別人廚房、鍋爐、煤氣,自己和面做餡料,做燒餅。如果是PaaS,我們燒餅的面粉、餡料和調(diào)料都是別人提供好了,我們只需要把餅烤熟。 云廠商該如何構(gòu)建一套好用的PaaS服務(wù)呢?借力開(kāi)源項(xiàng)目,成為各廠商的共識(shí)。 Cloud Foundry開(kāi)啟PaaS開(kāi)源時(shí)代PaaS的核心是平臺(tái)。最早出現(xiàn)在開(kāi)發(fā)者視野中的PaaS開(kāi)源項(xiàng)目中,vmware創(chuàng)立的Cloud Foundry是知名度最高的。與IaaS提供云上虛擬機(jī)的服務(wù)方式不同,基于Cloud Foundry的云計(jì)算能夠提供應(yīng)用托管的功能。開(kāi)發(fā)者只需要通過(guò)一條簡(jiǎn)單的命令比如:cf push "我的應(yīng)用",就可以將項(xiàng)目打成一個(gè)壓縮包,上傳到Cloud Foundry服務(wù)器。而Cloud foundry會(huì)開(kāi)啟自己的調(diào)度器,在一群云主機(jī)中找到滿足用戶需求的主機(jī)(系統(tǒng)版本、性能、個(gè)數(shù)),然后通過(guò)容器化技術(shù),在主機(jī)上創(chuàng)建一個(gè)容器,在容器中下載壓縮包,解壓并運(yùn)行,最終成為一個(gè)對(duì)外提供服務(wù)的應(yīng)用。 此外,Cloud Foundry平臺(tái)對(duì)這些應(yīng)用項(xiàng)目提供分發(fā),災(zāi)備,監(jiān)控,重啟等等服務(wù)(這也是我們提供給用戶的核心服務(wù))。這種托管服務(wù)解放了開(kāi)發(fā)者的生產(chǎn)力,讓他們不用再關(guān)心應(yīng)用的運(yùn)維狀況,而是專(zhuān)心開(kāi)發(fā)自己的應(yīng)用。而這就是PaaS的“初心”,平臺(tái)即服務(wù)。
這里就會(huì)有同學(xué)問(wèn)了,容器是什么?容器是用來(lái)解決多個(gè)應(yīng)用資源沖突與隔離性問(wèn)題的技術(shù)。Linux上的namespace機(jī)制和cgroups命令都能用做資源隔離和限制,這些都是容器技術(shù)。 容器技術(shù)并不是Docker創(chuàng)建的,在Docker興起之前,就已經(jīng)被其他公司商用了,但是為什么現(xiàn)在一談起容器,所有人第一時(shí)間想到的就是Docker呢?這就要提到Cloud Foundry的死亡。 從Cloud Foundry到DockerCloud Foundry似乎已經(jīng)和我們現(xiàn)在使用的云功能區(qū)別不大,但2021年的現(xiàn)實(shí)情況卻是Cloud Foundry已經(jīng)死了。 我們看過(guò)互聯(lián)網(wǎng)上很多文章,再結(jié)合我們活字格公有云開(kāi)發(fā)的經(jīng)驗(yàn),我們認(rèn)為這個(gè)項(xiàng)目的致命缺陷集中它的打包機(jī)制上。 Cloud Foundry最核心的組件就是應(yīng)用的打包和分發(fā)機(jī)制,也是開(kāi)發(fā)者打交道最多的功能。Cloud Foundry為每一種主流的語(yǔ)言都定義了一套打包的方式,這些方式之間毫無(wú)章法。但就是這個(gè)打包功能,成了Cloud Foundry的軟肋,一直為用戶所詬病。開(kāi)發(fā)者不得不為每一種語(yǔ)言,每一種框架,甚至是每個(gè)版本應(yīng)用維護(hù)一個(gè)打好的包,還有可能出現(xiàn)本機(jī)運(yùn)行成功,打了個(gè)包上傳上去之后就無(wú)法運(yùn)行的情況。情況最嚴(yán)重的時(shí)候,開(kāi)發(fā)者在調(diào)試云平臺(tái)系統(tǒng)上花的時(shí)間都已經(jīng)比開(kāi)發(fā)一個(gè)新軟件的時(shí)間要長(zhǎng)了。 本來(lái)是為賦能開(kāi)發(fā)者的而生的技術(shù),Cloud Foundry卻對(duì)開(kāi)發(fā)者如此不友好。當(dāng)開(kāi)發(fā)者的抱怨積累到一定程度,想要在PaaS浪潮中央站穩(wěn)腳跟的Cloud Foundry被后起之秀Docker“紅牌罰出局”也就順理成章了。 最初,Docker是一個(gè)當(dāng)時(shí)還叫dotCloud的公司(2010年由所羅門(mén)??怂箘?chuàng)建,Y Combinator孵化)開(kāi)發(fā)的容器項(xiàng)目。在Cloud Foundry困于打包問(wèn)題時(shí),Docker正在悄悄積蓄力量,在開(kāi)源后的短短幾個(gè)月內(nèi)就迅速崛起,成為一個(gè)不容忽視的PaaS技術(shù)方案,吸引了云服務(wù)開(kāi)發(fā)者的眼球。 滑稽的是,在Docker剛開(kāi)源的時(shí)候,Cloud Foundry的首席產(chǎn)品經(jīng)理 James Bayer就在社區(qū)做了一次詳細(xì)的對(duì)比,告訴用戶Docker和Cloud Foundry一樣,都是使用了Namespace和Cgroups技術(shù)的沙箱而已,沒(méi)什么值得關(guān)注的。 事實(shí)上,Docker也確實(shí)就和他所說(shuō)的一樣,采用了這個(gè)“傳統(tǒng)”的技術(shù)方案,但是Docker與Cloud Foundry相比,做了一點(diǎn)小小的創(chuàng)新,體現(xiàn)了所羅門(mén)??怂沟倪h(yuǎn)見(jiàn)。從2010他就開(kāi)始考慮應(yīng)用打包的一致性與復(fù)用性問(wèn)題,并提出了創(chuàng)新的解決方案,最終對(duì)Cloud Foundry造成了毀滅性的打擊。這個(gè)解決方案就是Docker鏡像。 (Docker,圖片來(lái)自官網(wǎng)) 剛開(kāi)源的Docker迅速爆火,憨態(tài)可掬的小鯨魚(yú),對(duì)用戶友好的文檔,三分鐘部署一個(gè)Nginx集群的宣傳語(yǔ),以及Docker Image這個(gè) “微不足道的創(chuàng)新”,讓Docker席卷整個(gè)PaaS領(lǐng)域。 Docker的制勝法寶:鏡像Docker成功的關(guān)鍵,在于Docker鏡像幾乎完美地解決了Cloud Foundry在打包方面的軟肋。 所謂的鏡像,其實(shí)也是一個(gè)壓縮包,但是比起Cloud Foundry那種執(zhí)行文件+啟動(dòng)腳本的打包結(jié)果,鏡像提供給用戶的是一套完整的運(yùn)行環(huán)境,每一個(gè)鏡像都可以指定操作系統(tǒng)版本,內(nèi)部可以構(gòu)建程序執(zhí)行的文件結(jié)構(gòu),并且一份鏡像可以完全共享在多處使用。 此外,Docker還給開(kāi)發(fā)者提供了一套完善的鏡像制作流程,這套流程與編程語(yǔ)言和框架無(wú)關(guān)。開(kāi)發(fā)者只需要按照該流程,定制對(duì)應(yīng)程序所需要的運(yùn)行的操作系統(tǒng)環(huán)境即可。 總之,Docker 鏡像完美解決了兩個(gè)問(wèn)題: 1.本地環(huán)境和服務(wù)器環(huán)境的差異 從這一刻開(kāi)始,PaaS的市場(chǎng)已經(jīng)完全是Docker的天下。 小結(jié)本文是系列文章的第一期,我們一起回顧了IaaS取代物理服務(wù)器,基于IaaS構(gòu)建PaaS的發(fā)展路線。在構(gòu)建PaaS時(shí),我們經(jīng)歷了Cloud Foundry的衰敗,見(jiàn)證了Docker的成功。 但是,只依靠Docker就能構(gòu)建起完整的PaaS服務(wù)嗎?我們的活字格最終選擇了哪個(gè)技術(shù)方案?云計(jì)算的故事還沒(méi)有講完,敬請(qǐng)期待下期精彩內(nèi)容。 |
|
來(lái)自: 看見(jiàn)就非常 > 《OS操作系統(tǒng)》