足球资料库数据/孙祥/nba五佳球/足球直播哪个平台好 - cctv5今日现场直播

首頁 > 知識庫 > 正文

彎道超車:容器技術究竟為云計算帶來了什么?
2016-03-02 17:50:24   來源:鄢達來   評論:0 點擊:

這兩年容器技術及其相關工具,平臺異常火爆。在各大技術論壇或云計算峰會議題中,都會占很大比重,各主流云計算平臺也無一例外地迅速提供了容器服務。從2014年或更早,就有專家預見到Docker 容器技術會是云計算的顛覆力量(disruptive force)。坦率地講,云計算作為一種服務和應用的業務模式,很難講會被顛覆,但容器技術的確是云計算的game changer,它改

這兩年容器技術及其相關工具,平臺異常火爆。在各大技術論壇或云計算峰會議題中,都會占很大比重,各主流云計算平臺也無一例外地迅速提供了容器服務。從2014年或更早,就有專家預見到Docker/容器技術會是云計算的顛覆力量(disruptive force)。坦率地講,云計算作為一種服務和應用的業務模式,很難講會被顛覆,但容器技術的確是云計算的game changer,它改變了我們思考云計算的視角,是云計算的reinventor。

目前很多容器技術分析和經驗分享中,人們談論了它帶來的諸多好處:

  • 極其輕量:只打包了必要的Bin/Lib;
  • 秒級部署:根據鏡像的不同,容器的部署大概在毫秒與秒之間;
  • 易于移植:一次構建,隨處部署,因為本身是一個自包含鏡像;
  • 彈性伸縮:Docker、Kubernetes、Mesos這類容器管理平臺有著與生俱來的彈性管理能力;

但貌似這些特點,之前虛擬化云管理平臺也或多或少都可實現。容器鏡像在某種程度上也常被視作為輕量級虛機鏡像,至于快速部署,彈性伸縮也可通過自動化腳本、監控、編排(比如heat)來組合完成。那么,容器技術究竟給云計算帶來什么本質的改變呢?
\
圖1. 部署速度的演進(引自Adrian Cockcroft, Battery Ventures)

這張圖是Adrian Cockcroft在2014 DockerCon上第一次提出,介紹了部署速度的演進,但其分類貌似沒嚴格遵循統一視角,比如Virtualization和Container從技術角度講,而Serverless更像應用實現架構的視角,不特指某種技術。假如做個粗淺的解釋, Datacenters可以理解為傳統技術下的IT平臺,Virtualization可以理解為基于虛擬化的云計算平臺,Containers可以是Docker、Kurbernetes、Mesos之類的容器平臺,而Serverless則可是AWS Lambda為代表的新型應用平臺。這里,有了另一個問題,毫秒級的部署和秒級的生命周期對云計算又意味著什么?

先以AWS Lambda為例,了解一下Serverless。 Lambda是個事件驅動的彈性計算平臺。用戶可以寫一段代碼,AWS為其創建一個Lambda資源,這樣,當指定的事件來臨的時候,AWS的runtime會創建相應運行環境,執行代碼,執行完畢(或者timeout)后,回收相應資源。看起來很平常,但Lambda一推出即驚艷四溢,為什么?

AWS網站上有個Lambda對流數據處理分析參考案例。Localytics是一家網絡和移動應用分析公司,他們需要對來自安裝在超過30億設備中37,000多個App的數據進行App使用情況和用戶行為進行分析。工程團隊需要經常對子數據集提供新的分析處理服務,通常這意味著分析平臺需要考慮額外的容量規劃,性能監測和基礎設施管理。然而,在這樣量級上,這無疑會讓平臺變得復雜,新服務上線變得緩慢而痛苦。Localytics采用了Lambda實現了新的數據分析服務,這些服務可以并行訪問來自30億個設備的流數據,從而能迅速為客戶提供相應的分析報告,如圖2所示。

\
圖2. Lambda對社交媒體數據流處理(來自Amazon網站)

在AWS Lambda之前,IFTTT已經在提供類似事件驅動動作(/計算)的服務,但一直不溫不火。為什么到AWS Lambda就火呢?從目前了解的有限資料來看,AWS Lambda是基于容器技術實現的,它把核心函數和服務包裝成容器,相信也同樣打包了用戶代碼,同時高度優化了容器的管理和調度,實現快速幾乎實時的大規模scale out和scale down。也就是說,同樣的業務場景,容器技術讓AWS Lambda和IFTTT產生了完全不同效果。同樣,也正是容器易于部署,編排的特性,讓用戶專注于應用本身而不是計算資源的管理,這就催生了Serverless的概念。

Lacalytics的例子很好說明了容器技術以應用/服務為中心的(application centric),而傳統基于虛擬化技術的云平臺是以機器(虛擬或真實的物理資源)為中心,后者勢必讓我們去考慮很多所謂DevOps的工作,而顯然那將是需要不斷提高但卻永無止境的付出。容器技術以應用/服務為核心,跳出了原有以資源管理維護為中心的思維模式,顯然是云計算演進過程中的一個里程碑式的跨越。

除了催生Serverless概念,容器技術還發展出了另外一個概念:immutable infrastructure(不可變基礎架構)。所謂不可變基礎架構,就是說系統一旦部署,就不再更變升級。當服務/應用需要升級時,只要部署一個新版系統,摧毀舊版就好了。在這個過程中,系統對外服務幾乎是持續的。從這個概念描述中,我們很容易想到容器及相應的編排管理框架可以自然地實現immutable infrastructure。 Google的Brendan Burns有一段對Kurbenetes介紹視頻,其中一個非常直觀的演示場景就是在幾乎不影響對外服務的情況下如何迅速將Container封裝的應用從1.0升級到1.1。這利用到了container輕量化,快速部署的特性,使得以新替舊的成本大大低于升級維護舊Container —— 聽起來是個很不錯的免維護的場景。表1對immutable infrastructure和artisanal infrastructure(手工藝架構)做了比較:
\
表1. Immutable Infrastructure vs. Artisanal Infrastructure

事實上,類似免維護的觀念在硬件領域已非常普遍。比如電腦的顯示屏不亮了,維修工程師要么換屏,要么換主板,沒有人會再用儀器去檢測顯示芯片組了,因為這樣的投入費時費工。這里,修(維護升級)還是換(去舊補新)基于很簡單的成本邏輯,一旦換新的比升級舊的成本更低時,人們自然選擇直接換新的。同樣,Container標準化封裝和快捷部署和銷毀,讓新應用/服務取代舊應用/服務,比研究如何給應用/服務打patch升級更為簡化高效。由此,容器技術讓應用的immutable infrastructure變成現實。

此外,經常跟容器技術一起談論的另一個概念是Microservice架構。Martin Fowler在一篇文章中用下圖3 形象地做了說明:
\
圖3. 整體封裝(應用)與Mirco-Serivce架構

并談到了微服務的幾個主要特征:

  • 組件化的服務(封裝)
  • 圍繞業務能力組織
  • 是獨立產品不是項目
  • 簡化的通訊與連接
  • 去中心管理
  • 去中心數據管理
  • 基礎架構自動化
  • 容錯設計
  • 遞進設計

從這些特性看,容器技術及其相關的編排管理框架是得它成為實現Microservice架構最自然的載體。比如,通常一個Container鏡像是一個應用/服務的獨立完整的封裝,一般要求是Stateless,而且從管理角度看,Container平臺都提供自動化的生命周期,scale out和scale down的管理。

Serverless架構,Immutable Infrastructure和Micro-service架構,這些概念/方法的出現,給我們構建云計算應用/服務提供了全新視角,使得創建和部署新應用就像使用樂高積木一樣簡單,大規模的彈性伸縮就如同自動點一下復制和刪除命令一樣快捷。我們在創建應用/服務時,不用再考慮機器(資源),不用再考慮維護,而且有很多可隨時拼裝的組件待用,同時服務的部署也非常快捷,讓失敗的成本大幅降低,我們唯一所需關心的只是應用和服務本身。通過上面的討論,我們看到這一切最重要的推動力量就是容器技術。

容器,這個十幾年前的技術,結合近年發展起來編排管理框架,把Serverless、Immutable Infrastructure 和Micro-Service這些美好概念變成了真正的現實,從而給云計算的發展帶來了革命性的進步。正如Docker的創始人Solomon Hykes在DockerCon 15的主題演講談到的,Container技術讓互聯網可編程(programmable),使得大規模創新(massive innovations)成為可能。

相關熱詞搜索:what container change 架構 & 設計 語言 & 開發 Docker 云計算 容器 微服務

上一篇:我從.Net Native中學到了什么
下一篇:解密微博紅包:架構、防刷、監控和資源調度

分享到: 收藏