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