爲什麼容器技術(docker)將主宰世界,docker的意義

                      轉自:http://blog.csdn.net/gaoyingju/article/details/49616295

爲什麼容器技術將主宰世界


由於本文篇幅較長(我竟然寫了7千多字),爲了幫助你快速理解,我先列出核心思想:

  • 先講一個集裝箱改變全球運輸業的生動故事,

  • 再拿容器技術與集裝箱做聯繫與對比,說明筆者是如何通過集裝箱參悟了容器技術的發展命脈 —— Docker實現了應用發佈和運行的集裝箱化。

  • 說說容器技術,尤其是Docker的誘人之處,

  • 預測容器技術的未來發展。


正文:

請允許我先做一個大膽的預測:容器將統治世界。本文不討論容器技術細節,而是從更高的格局:容器對互聯網的變革,它的經濟成本和效益上娓娓道來。

集裝箱何以徹底顛覆了全球運輸業和世界經濟?

這裏寫圖片描述

在香港、上海、深圳或者荷蘭的鹿特丹貨運港口,停靠在碼頭的巨大的集裝箱船和岸邊堆場裏疊起來的數萬個金屬集裝箱;旁邊數十米高的大型起重機臂不停地吊起這些幾十噸的集裝箱,在幾分鐘內安放到集裝箱船上;幾小時後巨輪拔錨啓航,上面承載了數千個集裝箱。如果你曾見識過此情此景,一定會讚歎現代航運的高效率和大容量,以及依託它而建立的廣泛的全球貿易。

上世紀60年代以前,集裝箱運輸還未被認可,幾乎所有的貨物都是以散件方式運輸。

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

這裏寫圖片描述

所有的貨物都是碼頭工人一件一件放到貨盤上,再把貨盤降到船艙中一件一件搬下來堆好。他們裝完這艘船總共用了6天時間,其中還有一天是因爲罷工而浪費掉了。橫跨大西洋的航行用了10天半的時間;在不來梅港,碼頭工人是晝夜不停地幹活兒,他們卸船用了4天時間。總而言之,這次航行有一半時間都花在碼頭上。這船貨物中的最後一批到達其最終目的地的時間,是”勇士號“停靠不來梅港之後的第33天,是它從紐約港起航後的第44天,是其中最早起運歐洲的貨物從美國的來源地上路後的第95天。95天!!!重要的事說3遍。

運送這批貨物的總成本達到了237577美元,還沒有算上”勇士號“返回紐約的成本以及運輸過程中暫時存放貨物的支出。在這個總額當中,海上航行本身的支出僅佔11.5%,而在航行起點和終點的兩個碼頭上,貨物處理的費用佔到了總支出的36.8%。這比輪船公司的主管常常說的50%要低,但是,這僅僅是因爲德國的“經濟奇蹟”還沒有把碼頭工人的工資推上去。研究者注意到,如果不是因爲德國碼頭工人的工資比美國的碼頭工人低1/5,港口成本肯定還會高出很多。研究者最後得出的結論是,要降低總的運輸成本,最好的辦法是降低在美國各港口接收、儲運、裝載離崗貨物的成本。他們還進一步提出忠告說,政府和企業應該提高碼頭工人的勞動生產率,消除低效率的工作慣例,儘早徹底地反思整個流程。他們在研究報告中寫道:“或許,補救的方法就在於找到可以避免散件處理的包裝、搬運和裝載貨物的方法。”

爲什麼非要裝載、卸載、轉移和再裝載那麼多的散件貨物?爲什麼不把貨物裝進大箱子裏,然後就只裝卸和搬運這些箱子?

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

這裏寫圖片描述

集裝箱最大的成功在於其產品的標準化以及由此建立的一整套運輸體系。無論貨物的體積、形狀差異有多大,最終都被裝載進集裝箱裏。由於要實現標準尺寸集裝箱的運輸,堆場、碼頭、起吊、船舶、汽車乃至公路橋樑、隧道等,都必須適應它在全球範圍內的應用而逐漸加以標準化,形成影響國際貿易的全球物流系統。由此帶來的是系統效率大幅度提升,運輸費大幅度下降,地球上任何一個地方生產的產品都可以快速而低廉地運送到有需求的地方。

兩種貨運方式的對比:

…… 散貨運輸 集裝箱運輸
貨物裝卸時間 幾天到一個星期,分揀、合併、裝卸過程繁瑣 幾個小時
貨物裝卸時間佔整個運輸過程的比例 >50% <10%
所需勞動力 大量的碼頭工人 少數的碼頭工人和起重機操作員
自動化程度
安全性 低,裝卸時常有物品損毀和盜竊 高,貨物被隔離在封閉的集裝箱內
總體運輸時間 貨物裝卸時間+實際運輸時間 在總距離和運輸工具的運輸速度不變的前提下,可節約一半以上的時間
成本 貨物越多,成本越高,耗時越長 前期固定成本投入較高,隨着集裝箱規模、運貨量的增加,分攤到運送每個集裝箱的成本極低,總成本幾乎不變
貨物運價 貨運成本佔到了商品銷售成本的9%~15% 運價降到原來的10%~20%,貨運成本可忽略不計

集裝箱對容器技術(Docker)的啓發

這本書的英文名稱是”The Box:How the shipping Container made the world smaller and the world economy bigger”

閱讀此書的過程中,我已經聯想到了現今逐漸流行也備受質疑的以Docker爲首的容器技術;當留意到container一詞出現在書名中時,我已經迫不及待地把我的觀點分享給你,幫助你從一個技術圈從未提及的角度來理解容器技術。

Docker近兩年成了容器技術的代言,我們做一個集裝箱與容器的類比:

集裝箱 類比 容器技術(Docker)
發貨商 <=> 應用的發佈者,現實中多爲應用的生產方,即開發者
客戶 <=> 使用應用的互聯網用戶
貨物 <=> 構成應用的代碼、組件、依賴等
集裝箱 <=> Docker容器
裝卸貨 <=> 應用的發佈、撤銷
碼頭工人 <=> 實際操作應用發佈過程的人,現實中多爲運維人員
散件裝卸、運輸方式 <=> 應用發佈過程中逐個安裝部署代碼、組件、依賴、配置環境等
集裝箱裝卸、運輸方式 <=> 把應用運行所需的外部環境、內部代碼、組件、依賴打包放進容器,應用發佈以容器爲單位
港口的碼頭、起重機、集裝箱堆場 <=> 應用發佈所需的基礎設施與工具
輪船/輪船公司 <=> 容器運行平臺,如可以運行容器的雲計算平臺

我開始懷疑,Docker公司的創始人讀過此書或研究過貨運業的發展歷史,並從其中汲取了靈感,其公司的Logo即是大鯨魚上拖着集裝箱。Docker的創始人堪稱當代互聯網界的麥克萊恩[見註釋1]。

這裏寫圖片描述

爲什麼容器技術(Docker)如此誘人?

容器技術正在快速改變着公司和用戶創建,發佈,運行分佈式應用的方式,在未來5年將給雲計算行業帶來它應有的價值,其誘人之處包括:

  • 資源獨立、隔離 
    資源隔離是雲計算平臺的最基本需求。Docker通過Linux namespace, cgroup限制了硬件資源與軟件運行環境,與宿主機上的其他應用實現了隔離,做到了互不影響。不同應用或服務以“集裝箱”(container)爲單位裝“船”或卸“船”,“集裝箱船”(運行container的宿主機或集羣 )上,數千數萬個“集裝箱”排列整齊,不同公司、不同種類的“貨物”(運行應用所需的程序,組件,運行環境,依賴)保持獨立。

  • 環境的一致性 
    開發工程師完成應用開發後build一個docker image,基於這個image創建的container像是一個集裝箱,裏面打包了各種“散件貨物”(運行應用所需的程序,組件,運行環境,依賴)。無論這個集裝箱在哪裏:開發環境、測試環境、生產環境,都可以確保集裝箱裏面的“貨物”種類與個數完全相同,軟件包不會在測試環境缺失,環境變量不會在生產環境忘記配置,開發環境與生產環境不會因爲安裝了不同版本的依賴導致應用運行異常。這樣的一致性得益於“發貨”(build docker image)時已經密封到”集裝箱“中,而每一個環節都是在運輸這個完整的、不需要拆分合並的”集裝箱“。

  • 輕量化 
    相比傳統的虛擬化技術(VM),使用docker在cpu, memory, disk IO, network IO上的性能損耗都有同樣水平甚至更優的表現。Container的快速創建、啓動、銷燬受到很多讚譽。

  • Build Once, Run Everywhere 
    這個特性着實吸引了我,“貨物”(應用)在“汽車”,“火車”,“輪船”(私有云、公有云等服務)之間遷移交換時,只需要遷移符合標準規格和裝卸方式的“集裝箱”(docker container),削減了耗時費力的人工“裝卸”(上線、下線應用),帶來的是巨大的時間人力成本節約。這使未來僅有少數幾個運維人員運維超大規模裝載線上應用的容器集羣成本可能,如同60年代後少數幾個機器操作員即可在幾小時內連裝帶卸完一艘萬級集裝箱船。

我相信以上4點是容器能夠定義未來應用發佈的幾個原力,現在正值原力的覺醒。

我在日常工作中遇到的一個有趣的例子是:我所在的部門有人希望使用或爲其他人提供大數據技術棧中的某些軟件服務,如:Elasticsearch(ES), Kibana, Spark, Kafka, RedisMongoDB。一些人甚至只是想做些簡單的功能驗證,而他們卻要先花一上午甚至一天去依次完成下載軟件本身、修改ulimit、設置環境變量、下載Java運行環境、編譯某些組件、安裝其他依賴包、創建目錄、進行若干次容易出錯的配置、經歷3次以上程序啓動失敗。可悲的是,下次如果想在其他服務器上提供類似的服務仍要重複前面的經歷,更別提把這個任務交給一個新人負責完成需要多長時間。他們就像50年前可憐的碼頭工人一樣,四肢發達,頭腦簡單,重複着舊式散貨裝卸模式,抱怨着活多錢少。我們現在正着手用Docker做一個類似Google Cloud Engine一鍵創建服務(one click)的Setup ELK (ES + Logstash + Kibana) in One Click

容器技術是整個互聯網的協同創新和原有技術的組合創新

正如集裝箱對全球運輸業及經濟的變革不應僅僅歸因於集裝箱本身而是全社會系統協同創新一樣,Docker也將是全系統的變革和原有技術的組合創新,除了擁有運行容器的基礎技術工具,還需要構建整個生態系統。如 “Build, Ship, and Run 
Any App, Anywhere”需要依賴應用所有的宿主在基礎架構上搭建好docker container的運行環境纔可以;而要實現現在容器行業大力宣揚的”大規模應用彈性伸縮“,如果沒有大規模的容器和資源管理方案(如Mesos, Kubernetes)是絕不可能實現的。Docker公司在這方面還是比較有遠見的,自己開發或收購了不少產品佈局整個生態,如Docker hub, Docker swarm, Docker compose, Tutum。

實際的貨運中,發貨商只關注貨物從出發到到達客戶手中的總運價和時間,他們希望減少總成本和時間,運輸公司負責並且能夠處理好公路鐵路航海運輸中的一切細節。沒有發貨人會去關注運輸的路線、順序以及集裝箱輪船停靠在哪個港口。目前提供容器服務的產品還遠未達到真正幫助應用發佈者節省時間和成本的目的,享受容器優勢的同時,應用發佈者總是不得不親自處理各種細節甚至親自實現其中缺失的功能,開發者在Docker及周邊產品的源碼中發現了很多坑,由此導致的額外成本埋沒了容器服務潛在的巨大價值。隨着容器技術及其生態系統的發展,相信以上問題會逐漸得到改善,Docker版本的迭代速度一直很快。

容器技術(Docker)的必然發展趨勢

我們在這裏預測一下容器技術接下來的發展:

容器技術本身及生態系統的發展

  • 容器是一項偉大的變革,但它還不能在短時間內產生巨大效益

我們中國人何不盡早加入容器行列,與美國佬一起完善的容器生態系統呢,還那麼鍾愛Copy to China?

  • 自動化

隨着雲計算和容器的普及,互聯網行業自動化程度將進一步提高,運維人員由勞動密集型逐漸轉向技術知識密集型。

這裏寫圖片描述

  • 容器技術標準

容器相關的技術標準的誕生將促進整個大系統的各方更好的協調和兼容。

  • 雲計算平臺的支持

現有云計算平臺要麼儘快支持容器技術,要麼被新的支持容器的雲計算平臺超越。中國香港、上海、深圳、青島、天津在上世紀60~80年代抓住了集裝箱發展的機遇,成爲全球供應鏈上的主要樞紐港,2014年仍處在全球10個最大吞吐量集裝箱港之列。

  • 使用容器的習慣逐漸形成

培養應用發佈者使用容器發佈應用的習慣是非技術問題,也需要時間去沉澱。全球運輸業花了近15年培養出了發貨商使用集裝箱的習慣,在互聯網行業不需要這麼慢。

  • 行業規模

Mesos, Kubernetes等容器管理方案將助力 “巴拿馬級”,“馬六甲級”[見註釋2]的容器“輪船”。Mesos, Kubernetes等成熟通用的集羣管理方案將爲你做好大規模分佈式容器的啓停、調度、編排、高可用。與現有的大部分互聯網服務類似,容器依賴於規模,雲計算平臺服務的客戶越多,運行的容器規模越大,構建整套容器運行體系的固定成本就被分攤得越薄,客戶使用雲計算服務的資費就能降下來。

  • 應用在雲計算平臺間的無縫遷移

未來的應用在不同的雲計算平臺(支持容器)間遷移成本更低。如同集裝箱在汽車、火車、集裝箱船之間的無縫遷移。

在未來世界,雲計算不止是互聯網的公共基礎服務,也是被互聯網滲透的所有行業的公共基礎服務,公有云也好,私有云也罷,幾乎所有的信息服務都將在雲上。從集裝箱誕生到運輸業廣泛採用集裝箱,大宗貨物運輸成本普遍減少50%以上,耗費了約60年。我相信在互聯網領域,容器的普及都用不了6年,希望在這個互聯網基礎服務裏掘金的企業,請跑步入場!


註釋

  1. 麥克萊恩是歷史上第一個用純集裝箱船運輸裝在集裝箱裏的大宗貨物的企業家,他極大推動了集裝箱運輸方式在運輸業(公路、鐵路、航海)的發展和普及。

  2. 巴拿馬級,馬六甲級的輪船指的是巴拿馬運河、馬六甲海峽允許通過的最大尺寸的輪船,意指集裝箱船體量大,運載能力強。如《集裝箱改變世界》一書中提到“馬六甲級集裝箱船的長度將達到1320英尺,寬地達到190英尺,它的運載能力將是18000只標準箱。”


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章