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

在線咨詢
微信

微信掃一掃

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

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

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

------   【導(dǎo)讀】   ------

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

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


那時(shí),集裝箱運(yùn)輸還未被認(rèn)可,幾乎所有的貨物都是以散件方式運(yùn)輸。


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


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


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


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


集裝箱便由此誕生了。


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


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


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


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

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


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


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

這就造成了以下幾個(gè)明顯問題:

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

  • 需要花費(fèi)的成本非常高

  • 而且容易造成資源的浪費(fèi),因?yàn)橥粋€(gè)應(yīng)用使用不了一個(gè)服務(wù)器的資源

  • 難于遷移和擴(kuò)展

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

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

  • 可能會(huì)被限定硬件廠商,因?yàn)槟菚r(shí)候有不同硬件平臺(tái)


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


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


如此一來:

  • 一臺(tái)物理機(jī)就可以部署多個(gè)應(yīng)用

  • 每個(gè)應(yīng)用都可以獨(dú)立運(yùn)行在一個(gè)虛擬機(jī)里

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

    • 資源池——一個(gè)物理機(jī)的資源分配到了不同的虛擬機(jī)里

    • 很容易擴(kuò)展——增加物理機(jī)或者虛擬機(jī)即可,因?yàn)樘摂M機(jī)是可以復(fù)制的

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


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


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


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


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


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


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


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

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

    如此重要?


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


    1.資源獨(dú)立、隔離 

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


    這恰好也是云計(jì)算平臺(tái)的最基本需求。


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

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


    3.輕量化 

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

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


    4.Build Once, Run Everywhere 

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


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


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


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


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


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

     圖:各XaaS中用戶管理和平臺(tái)功能的劃分

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


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


    【參考文章】

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

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

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

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

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





掃一掃在手機(jī)上閱讀本文章

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