• <code id="qkqy2"><abbr id="qkqy2"></abbr></code>
    <dfn id="qkqy2"><dd id="qkqy2"></dd></dfn>
    <rt id="qkqy2"><em id="qkqy2"></em></rt>

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

    在線咨詢
    微信

    微信掃一掃

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

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

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

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

    容器技術(shù)的思想來自于集裝箱。集裝箱解決了什么問題?在一艘大船上,各種類型的貨物,小到奶粉、化妝品,大到機(jī)器設(shè)備、跑車,都可以被裝到一個標(biāo)準(zhǔn)的集裝箱內(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)。

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


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


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


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


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


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


    集裝箱便由此誕生了。


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


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


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


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

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


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


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

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

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

    • 需要花費的成本非常高

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

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

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

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

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


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


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


    如此一來:

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

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

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

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

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

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


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


      為什么?因為對于hypervisor環(huán)境來說,每個虛擬機(jī)都需要運行一個完整的操作系統(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)境我可以共享和復(fù)用?換句話來說,那就是我部署一個服務(wù)運行好后,我再想移植到另外一個地方,可以不用再安裝一套操作系統(tǒng)和依賴環(huán)境。


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


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


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


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

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

      如此重要?


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


      1.資源獨立、隔離 

      Docker通過Linux Namespace、Cgroup限制了硬件資源與軟件運行環(huán)境,與宿主機(jī)上的其他應(yīng)用實現(xiàn)了隔離,做到了互不影響。不同應(yīng)用或服務(wù)以“集裝箱”(container)為單位裝“船”或卸“船”,“集裝箱船”(運行container的宿主機(jī)或集群 )上,數(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)境不會因為安裝了不同版本的依賴導(dǎo)致應(yīng)用運行異常。這樣的一致性得益于“發(fā)貨”(build docker image)時已經(jīng)密封到”集裝箱“中,而每一個環(huán)節(jié)都是在運輸這個完整的、不需要拆分合并的”集裝箱“。


      3.輕量化 

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

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


      4.Build Once, Run Everywhere 

      “貨物”(應(yīng)用)在“汽車”,“火車”,“輪船”(私有云、公有云等服務(wù))之間遷移交換時,只需要遷移符合標(biāo)準(zhǔn)規(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ù)。而市面上多達(dá)上百家的物聯(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.達(dá)觀數(shù)據(jù),《從“集裝箱運輸”了解容器技術(shù)》

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





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

    版權(quán)所有? 四川中衛(wèi)北斗科技有限公司    蜀ICP備14007264號-3    技術(shù)支持: 竹子建站
    国产精品无码2021在线观看,欧美一级特黄特黄大片连接,亚洲欧洲无码一区2区无码,国产精品无套内谢 国产AⅤ视频一区二区三区 欧美亚洲国产卡通
  • <code id="qkqy2"><abbr id="qkqy2"></abbr></code>
    <dfn id="qkqy2"><dd id="qkqy2"></dd></dfn>
    <rt id="qkqy2"><em id="qkqy2"></em></rt>