當前位置:
首頁 > 最新 > 從「集裝箱運輸」了解容器技術

從「集裝箱運輸」了解容器技術

容器技術的火爆和日益普及已經成為不爭的事實,眾多公有雲平台紛紛支持Docker,AWS、Google、Azure、阿里雲以及國內的各大公有雲廠商都推出了容器雲業務,國內也有不少創業公司通過構建容器Paas平台幫助企業實現微服務架構改造。

達觀數據作為領先的人工智慧企業,在容器技術領域也積累了比較多的實踐經驗。達觀提供的文本挖掘、智能推薦、垂直搜索,無論是公有雲服務,或者私有化部署,主要是基於容器雲實現,從而保證部署的高效率、服務的穩定性、快速可擴展性和應用的隔離性,為我們的客戶提供了持續升級的長久穩定服務。

為什麼使用容器?

發布一個應用的經典過程一般是這樣:首先要在測試伺服器上進行開發,配置環境依賴並測通;再到生產環境中,為一台台伺服器配置環境依賴並部署應用。即使現在已經進入雲計算時代,整個發布過程依然沒有太大變化。當我們有大量架構迥異的應用服務,需要發布到多種環境,如本地環境、虛擬機環境、公有雲環境等等,底層使用的又是各種不同類型的硬體,稍有不慎就會導致發布失敗。

圖 1 異構應用部署到多樣硬體的問題

從下面的矩陣圖可以更直觀的感受到我們面對的困難之大,矩陣的列代表不同的硬體環境,行代表各種應用/服務。矩陣列出了一個應用的發布或者重構所要考慮的複雜情況,不管是應用的開發人員,還是系統運維人員,都必須從一開始就要考慮複雜環境帶來的問題,以保證發布和升級的順利。

圖 2 異構應用和多樣硬體矩陣

解決這個問題的思路非常有意思。Docker公司給出了非常形象的比喻:集裝箱運輸。1960年之前的全球化運輸過程如下圖所示,不同的貨物和不同的運輸方式也構成了一個龐大的矩陣。託運貨物的人,和搬運工會擔心不同類型的貨物放在一起會造成相互碰撞、擠壓導致損壞。

然而將不同貨物分類進行運輸是一種非常高成本、低效率的解決方式,貨物在運輸途中可能需要在某個港口卸貨,與來自其他地方的同類型貨物一起裝車,再運到下一個目的地。整個運輸過程導致大量的貨物被損壞,或者被盜。

圖 3 1960年以前的貨物運輸

全球化運輸現在已經不是問題,各個港口整齊堆放的集裝箱就是完美的解決方案。各種類型的貨物,小到奶粉、化妝品,大到特斯拉跑車,都可以被裝箱到一個標準的集裝箱內。託運貨物的人只需要保證貨物在集裝箱內的密封和固定,而無需關心集裝箱如何被擺放和運輸。

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

圖 4 標準化集裝箱解決運輸問題

將Docker比喻為代碼方面的集裝箱綜合運輸系統,確實非常形象而恰當。Docker將任何類型的應用(貨物)和它的依賴打包成為一個標準的,輕量級的,便攜的,獨立的集裝箱,讓各類應用都支持一套標準的運作模式,只要安裝了Docker程序的伺服器都可以運行。

開發者在筆記本上開發和測試完成的Docker容器,可以無差別的運行在測試環境、生產環境,無論伺服器是物理機、虛擬機、公有雲伺服器上,或者是以上各種類型伺服器的組合。應用開發過程只需執行一次,即可保證應用在任何環境上運行的一致性。對於運維人員,則只需要配置一次不同環境的伺服器,即可運行任何Docker容器,不管容器是web服務還是api系統,規避了傳統部署方式中開發、測試、生產和其他環境的不一致性問題。

圖 5 標準化的Docker技術解決代碼「運輸」問題

Docker主要特性

Docker技術的有多重特點和優勢,我們基於實踐經驗進行簡單總結,其在實際應用中體現出的主要特性有以下三個方面:

1

環境標準化和持續部署

前面已經提到,傳統的開發和部署的生命周期中,常常因為不同環境的細微差異導致應用運行失敗,例如依賴的缺失或者版本不匹配。Docker的出現很好的解決了這一問題,保證了從開發、測試到部署的環境一致性。Docker將應用和所需的配置和依賴一起打包到鏡像中,在不同環境中只要使用同一個鏡像,即可保證應用的正常運行,無需其他人工干預,這也是Docker對開發和運維人員都有巨大吸引力的原因。

2

隔離性

Docker不同容器志堅是相互隔離的,每個容器使用自己的環境和資源。使用不同堆棧的應用程序基於Docker可以運行在同一個宿主機上,相互之間不會產生影響,也就不會產生使用源碼部署常常會遇到的依賴相互衝突的問題。使用源碼部署的另一個問題,是當從宿主機上刪除應用的時候,刪除依賴的時候就需要考慮是否有別的應用也在使用,經常導致誤刪依賴影響其他應用,或者忘記刪除無用的依賴。基於Docker則不會有此類問題,當我們不再需要某個應用的時候,可以簡單的通過刪除容器,則應用的代碼和依賴會作為一個整體一併刪除,同時也不影響其他應用。

3

版本控制

Docker另一個重要功能,是提供了類似git倉庫一樣的鏡像倉庫Docker hub,支持開發人員將鏡像的變更提交到Docker hub倉庫,並通過版本號進行管理。發布變更的時候也只需要修改鏡像版本號並重啟容器,假設發布的變更引入了一個bug,也可以非常快速的回滾到前一個版本。相比虛擬機,Docker的啟動和停止非常快速,如同運行一個進程一般,整個變更的過程往往只需幾分鐘時間。

容器和虛擬機的區別

傳統的虛擬機通過硬體虛擬化創造一個虛擬的系統,每個虛擬機都有自己的內存、硬碟和操作系統,預分配的資源會被虛擬機完全佔用。使用虛擬機來隔離應用會造成比較大的資源浪費,一個應用加上依賴只有幾十到幾百M的大小,而操作系統往往還需要消耗10G左右容量。

圖 6 容器技術和虛擬機的對比

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

微服務和容器集群管理

隨著容器技術的日益成熟,微服務架構也有了越來越多的實踐落地。傳統集中式架構開發的大型應用,比如CRM、ERP等系統,在今天看來已經顯得過於龐大複雜,缺乏靈活性,隨著新需求的不斷出現,對集中式架構的升級和調整變得日益困難,比如修改原有系統以適配移動設備。技術層面上,現在已經有大量的輕量級開源技術,包括容器技術,在互聯網、雲計算、人工智慧領域被大量運用,催生了微服務架構的出現。下圖展示了服務架構的演變。

圖 7 軟體系統架構演變

微服務架構是指一個較為複雜的應用由多個相對「微小」的服務組成,每個微服務只負責完成一個特定的任務,可以被獨立部署,支持快速的橫向擴展。各個微服務之間以松耦合的方式相互配合,不同的服務可以部署在不同的伺服器上。每個微服務將相關的業務邏輯和數據放在一起,可以看作是整個應用的組件,可以被獨立升級甚至替換。這樣做的好處是保證各個微服務相互獨立,從而實現快速交付和迭代升級。

Docker容器技術的特性使其天然地適用於微服務的落地實現,一個容器實現一個微服務,在伺服器集群上運行各個微服務容器,來構建一套完整的應用。為了支持多租戶,甚至可以部署多套完全相同的應用,每套應用服務一個或一部分租戶,應用之間相互隔離,應用的資源也按照租戶的使用量來分配。

容器編排技術

當容器和伺服器的數量達到一定規模的時候,就會碰到管理的問題,即如何有效管理大量的伺服器和容器,保證應用的穩定運行、方便升級和故障的快速解決。容器編排工具提供圖形化界面或者命令行來管理容器和伺服器集群,提供容器配置、任務發布、服務發現、負載均衡、系統監控和故障恢復、聲明式系統配置以及有關容器部署和性能的規則和約束定義機制等。

從最新趨勢來看,Google開發的Kubernetes從眾多編排工具中脫穎而出,贏下了容器編排工具大戰。基於達觀自身的容器實踐經驗,Kubernetes是所有編排工具中穩定性最高的,尤其是在管理較大規模的容器集群時,這和業界同行的實踐經驗基本吻合。Kubernetes針對pods進行調度,pod是最小的基本單位。一個pod封裝一個或多個容器、存儲資源、一個獨立的網路IP以及管理控制容器運行的策略。Pod封裝的多個容器一定是緊耦合的,它們之間能共享資源。

相比Kubernetes,Docker原生編排工具Swarm在集群搭建和使用上要相對簡單一些,學習和部署成本相對低一些。較新版本的Docker已經集成了Swarm。Swarm支持跨多個主機進行編排,管理較小規模的容器集群也綽綽有餘,對於初學者也可以很快的部署和運行。

結語

容器技術為軟體開發和系統運維帶來了顛覆性的突破,在達觀的客戶中,不管是新晉的互聯網企業,還是久居行業重心的傳統企業,都紛紛擁抱容器技術,開啟了系統架構的容器化升級和微服務轉型。如此大規模的不分行業的普及,足以預示容器技術無可限量的發展前景,而隨著容器技術的普及,系統開發和管理的效率必將上升到一個新的台階,為企業帶來效益的提升。

參考文獻

https://github.com/DeanXu/Docker-introduce/blob/master/README.md

https://www.weave.works/blog/comparing-container-orchestration

http://docs.kubernetes.org.cn

https://docs.docker-cn.com/

A

BOUT

關於作者


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達觀數據 的精彩文章:

TAG:達觀數據 |