四川中衛(wèi)北斗科技有限公司

在線咨詢
微信

微信掃一掃

長按二維碼關(guān)注微信加好友

從云計算廠商、物聯(lián)網(wǎng)平臺商到程序員,再不了解這項技術(shù)就晚了...

發(fā)布時間:2018-08-15 10:16

------   【導讀】   ------

容器技術(shù)的思想來自于集裝箱。集裝箱解決了什么問題?在一艘大船上,各種類型的貨物,小到奶粉、化妝品,大到機器設(shè)備、跑車,都可以被裝到一個標準的集裝箱內(nèi)。托運貨物的人只需要保證貨物在集裝箱內(nèi)的密封和固定,而無需關(guān)心集裝箱如何被擺放和運輸。同理,容器技術(shù)也可以讓開發(fā)者更加關(guān)注應(yīng)用程序本身,而不需要關(guān)心底層的操作系統(tǒng)和依賴環(huán)境,即容器技術(shù)的誕生其實主要解決了物聯(lián)網(wǎng)平臺PaaS層的技術(shù)實現(xiàn)。

這事兒還得從上世紀60年代以前說起......


那時,集裝箱運輸還未被認可,幾乎所有的貨物都是以散件方式運輸。


以“勇士號”為例,在一次從布魯克林到不來梅的運輸中,貨物裝卸都是由普通的碼頭工人來完成的,它裝載了5015英噸的貨物,主要是食品、日用品、郵件、機器和車輛的零部件以及53輛車。這批貨物的數(shù)量達到了驚人的194582件,而且大小和種類各不相同。


所有的貨物都是碼頭工人一件一件放到貨盤上,再把貨盤降到船艙中一件一件搬下來堆好。他們裝完這艘船總共用了6天時間;橫跨大西洋的航行用了10天半的時間;在不來梅港,碼頭工人是晝夜不停地干活兒,他們卸船用了4天時間。


總而言之,這次航行有一半時間都花在碼頭上了。


為什么非要裝載、卸載、轉(zhuǎn)移和再裝載那么多的散件貨物?為什么不把貨物裝進大箱子里,然后就只裝卸和搬運這些箱子?


集裝箱便由此誕生了。


運輸業(yè)大量采用集裝箱后,由咖啡制造商發(fā)出的一只35噸的集裝箱,可以在馬來西亞離開工廠,裝上一艘貨輪,經(jīng)過16天的航行到達9000營里之外的洛杉磯。一天之后,這個集裝箱被一列火車運到芝加哥,并被隨機轉(zhuǎn)移到了一輛開往辛辛那提的卡車上。從離開馬來西亞的工廠到抵達俄亥俄州的倉庫,這次11000營里的行程可能只需要花費22天的時間,其速度是每天500英里,而費用比一張單程的頭等艙機票還低。另外,在這一路上,很可能沒有人碰過集裝箱里的東西,甚至根本沒有人打開過它。同傳統(tǒng)的貨輪相比,集裝箱船的裝卸只需要大約1/6的時間和1/3的勞動力。


今天我們要講的“容器技術(shù)”的思想正是來源于此。


集裝箱解決了什么問題?在一艘大船上,各種類型的貨物,小到奶粉、化妝品,大到機器設(shè)備、跑車,都可以被裝箱到一個標準的集裝箱內(nèi)。托運貨物的人只需要保證貨物在集裝箱內(nèi)的密封和固定,而無需關(guān)心集裝箱如何被擺放和運輸。


負責運輸?shù)娜藙t無需關(guān)心一個個集裝箱內(nèi)裝的不同貨物,只需把集裝箱當做一個封閉、無差別的獨立個體,進行裝載、卸貨、堆放、運輸,整個過程中集裝箱保持封閉狀態(tài)直到被運送到目的地。從輪船到火車,再到卡車運輸,都可以利用起重機(吊車)對集裝箱進行操作,實現(xiàn)流程的自動化,從而以非常廉價的方式,有效解決了不同類型貨物在長距離運輸中的問題。

類似于集裝箱,容器技術(shù)的誕生給開發(fā)人員帶來了諸多方便,節(jié)約了不少成本,不管是在運維還是開發(fā)上。


容器技術(shù)的誕生史


在很久很久以前,想要在線上服務(wù)器部署一個應(yīng)用,首先需要購買一個物理服務(wù)器,在服務(wù)器安裝一個操作系統(tǒng),然后安裝好應(yīng)用所需要的各種依賴環(huán)境,最后才可以進行應(yīng)用的部署,而且一臺服務(wù)器只能部署一個應(yīng)用。

這就造成了以下幾個明顯問題:

  • 部署應(yīng)用非常慢

  • 需要花費的成本非常高

  • 而且容易造成資源的浪費,因為往往一個應(yīng)用使用不了一個服務(wù)器的資源

  • 難于遷移和擴展

    • 遷移問題:要把應(yīng)用進行遷移,又得重復部署應(yīng)用的過程:買服務(wù)器 -> 安裝os -> 配置環(huán)境 -> 部署應(yīng)用

    • 擴展問題:只能購買新的硬件來升級物理服務(wù)器,或者購買更高性能的服務(wù)器,這就又涉及到遷移問題了

  • 可能會被限定硬件廠商,因為那時候有不同硬件平臺


虛擬化技術(shù)出現(xiàn)以后,對于這種問題有所改變,虛擬化技術(shù)會在本地操作系統(tǒng)之上加多一層 Hypervisor層。Hypervisor是一種運行在物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可以虛擬化硬件資源,例如cpu、硬盤、內(nèi)存資源等。然后我們可以基于通過虛擬化出來的資源之上安裝操作系統(tǒng),這也就是所謂的虛擬機。


通過Hypervisor層,我們可以創(chuàng)建不同的虛擬機,并且可以限定每個虛擬機的物理資源,并且每個虛擬機都是分離、獨立的。例如A虛擬機給它使用2個cpu、8g內(nèi)存、100g磁盤,B虛擬機給它使用4個cpu、16g內(nèi)存、300g磁盤等等......這樣就可以實現(xiàn)物理資源利用率的最大化。


如此一來:

  • 一臺物理機就可以部署多個應(yīng)用

  • 每個應(yīng)用都可以獨立運行在一個虛擬機里

    虛擬化技術(shù)的優(yōu)點:

    • 資源池——一個物理機的資源分配到了不同的虛擬機里

    • 很容易擴展——增加物理機或者虛擬機即可,因為虛擬機是可以復制的

    • 很容易云化——亞馬孫AWS,阿里云,谷歌云等


  • 然而,隨著時間推移,用戶發(fā)現(xiàn)hypervisor這種方式麻煩越來越多。


    為什么?因為對于hypervisor環(huán)境來說,每個虛擬機都需要運行一個完整的操作系統(tǒng)以及其中安裝好的大量應(yīng)用程序。但實際生產(chǎn)開發(fā)環(huán)境里,我們更關(guān)注的是自己部署的應(yīng)用程序,如果每次部署發(fā)布我都得搞一個完整操作系統(tǒng)和附帶的依賴環(huán)境,那么這讓任務(wù)和性能變得很重和很低下。


    基于上述情況,人們就在想,有沒有其他什么方式能讓人更加的關(guān)注應(yīng)用程序本身,底層多余的操作系統(tǒng)和環(huán)境我可以共享和復用?換句話來說,那就是我部署一個服務(wù)運行好后,我再想移植到另外一個地方,可以不用再安裝一套操作系統(tǒng)和依賴環(huán)境。


    Linux Container容器技術(shù)的誕生(2008年)就解決了IT世界里“集裝箱運輸”的問題。Linux Container(簡稱LXC)它是一種內(nèi)核輕量級的操作系統(tǒng)層虛擬化技術(shù)。


    Linux Container主要由Namespace和Cgroup兩大機制來保證實現(xiàn)。


    剛才我們上文中提到了集裝箱,集裝箱的作用當然是可以對貨物進行打包隔離了,不讓A公司的貨跟B公司的貨混在一起,不然卸貨就分不清楚了。那么Namespace也是一樣的作用,做隔離。


    光有隔離還沒用,我們還需要對貨物進行資源的管理。同樣的,航運碼頭也有這樣的管理機制:貨物用什么樣規(guī)格大小的集裝箱,貨物用多少個集裝箱,貨物哪些優(yōu)先運走,遇到極端天氣怎么暫停運輸服務(wù)怎么改航道等等.....通用的,與此對應(yīng)的Cgroup就負責資源管理控制作用,比如進程組使用CPU/MEM的限制,進程組的優(yōu)先級控制,進程組的掛起和恢復等等。

    為什么容器技術(shù)對物聯(lián)網(wǎng)和云計算

    如此重要?


    說了這么多,我們不妨來總結(jié)一下容器技術(shù)的特點:


    1.資源獨立、隔離 

    Docker通過Linux Namespace、Cgroup限制了硬件資源與軟件運行環(huán)境,與宿主機上的其他應(yīng)用實現(xiàn)了隔離,做到了互不影響。不同應(yīng)用或服務(wù)以“集裝箱”(container)為單位裝“船”或卸“船”,“集裝箱船”(運行container的宿主機或集群 )上,數(shù)千數(shù)萬個“集裝箱”排列整齊,不同公司、不同種類的“貨物”(運行應(yīng)用所需的程序、組件、運行環(huán)境、依賴)保持獨立。


    這恰好也是云計算平臺的最基本需求。


    2.環(huán)境的一致性 

    開發(fā)工程師完成應(yīng)用開發(fā)后build一個docker image,基于這個image創(chuàng)建的container像是一個集裝箱,里面打包了各種“散件貨物”(運行應(yīng)用所需的程序、組件、運行環(huán)境、依賴)。無論這個集裝箱在哪里:開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境,都可以確保集裝箱里面的“貨物”種類與個數(shù)完全相同,軟件包不會在測試環(huán)境缺失,環(huán)境變量不會在生產(chǎn)環(huán)境忘記配置,開發(fā)環(huán)境與生產(chǎn)環(huán)境不會因為安裝了不同版本的依賴導致應(yīng)用運行異常。這樣的一致性得益于“發(fā)貨”(build docker image)時已經(jīng)密封到”集裝箱“中,而每一個環(huán)節(jié)都是在運輸這個完整的、不需要拆分合并的”集裝箱“。


    3.輕量化 

    傳統(tǒng)的虛擬機通過硬件虛擬化創(chuàng)造一個虛擬的系統(tǒng),每個虛擬機都有自己的內(nèi)存、硬盤和操作系統(tǒng),預(yù)分配的資源會被虛擬機完全占用。使用虛擬機來隔離應(yīng)用會造成比較大的資源浪費,一個應(yīng)用加上依賴只有幾十到幾百M的大小,而操作系統(tǒng)往往還需要消耗10G左右容量。

    上圖展示了容器技術(shù)和虛擬機的區(qū)別。容器包含了應(yīng)用和所需的依賴,但不需要獨占資源,沒有一個虛擬系統(tǒng),而是和宿主機共享硬件資源和操作系統(tǒng),和其他容器共享內(nèi)核,從而實現(xiàn)資源的動態(tài)分配。多個容器在同一個宿主機操作系統(tǒng)中的用戶空間以獨立的進程運行。因此,容器相比虛擬機要輕量許多,在一個主機上可以同時啟動近百個容器,一個應(yīng)用要在數(shù)量上橫向擴展非常便捷,而虛擬機則幾乎不可能啟動同樣多的數(shù)量。對于重啟操作,容器近似于重啟一個進程,而虛擬機則相當于重啟操作系統(tǒng)。


    4.Build Once, Run Everywhere 

    “貨物”(應(yīng)用)在“汽車”,“火車”,“輪船”(私有云、公有云等服務(wù))之間遷移交換時,只需要遷移符合標準規(guī)格和裝卸方式的“集裝箱”(docker container),削減了耗時費力的人工“裝卸”(上線、下線應(yīng)用),帶來的是巨大的時間人力成本節(jié)約,這使未來僅有少數(shù)幾個運維人員運維超大規(guī)模裝載線上應(yīng)用的容器集群成本可能。


    看到這里,有沒有覺得非常眼熟?


    近幾年大熱的物聯(lián)網(wǎng)平臺,宣傳的不也就是這些點嗎?


    物聯(lián)網(wǎng)平臺商往往會這么告訴你:在我們的平臺上提供了多種多樣的開發(fā)工具,你可以使用拖拽式的手法開發(fā)程序,完全不用操心底層的操作系統(tǒng)和所依賴的環(huán)境,只需專注于客戶的需求和應(yīng)用程序本身......


    就像OpenStack、Cloudstack這樣的技術(shù)是解決IaaS層的問題,容器技術(shù)的誕生其實主要解決了PaaS層的技術(shù)實現(xiàn)。


    現(xiàn)在最常用的開源云平臺架構(gòu)Kubernetes、Cloud Foundary還是Serverless,其背后驅(qū)動都是容器技術(shù)。而市面上多達上百家的物聯(lián)網(wǎng)平臺,幾乎都是PaaS平臺。

     圖:各XaaS中用戶管理和平臺功能的劃分

    說到這里,大家可能就會充分理解容器技術(shù)的重要性了。


    容器技術(shù)為軟件開發(fā)和系統(tǒng)運維帶來了顛覆性的突破,而隨著容器技術(shù)的普及,系統(tǒng)開發(fā)和管理的效率必將上升到一個新的臺階,從而為企業(yè)帶來不可估量的效益。


    【參考文章】

    1.CSDN ,Gary的影響力,《為什么容器技術(shù)將主宰世界?》

    2.騰訊云+社區(qū),寶哥@devops運維,《十分鐘明白什么是容器技術(shù)?》

    3.51CTO,ZeroOne01,《容器技術(shù)概述》

    4.達觀數(shù)據(jù),《從“集裝箱運輸”了解容器技術(shù)》

    5.Docker,《如何理解容器技術(shù)平臺的不同姿態(tài)》





掃一掃在手機上閱讀本文章

版權(quán)所有? 四川中衛(wèi)北斗科技有限公司    蜀ICP備14007264號-3    技術(shù)支持: 竹子建站