5月18日,第八屆中國雲計算大會在北京國家會議中心召開。做爲領先的雲計算創新技術實踐者,數人云CEO王璞博士應邀出席並在全體大會上進行主題爲「中美容器之融合與變革」的分享,如下是演講實錄:java
首先我科普一點什麼是容器技術。容器技術其實自己並非什麼嶄新的技術,你們常常拿容器技術跟虛擬化技術比較。有一個通俗的說法,容器是極度輕量的虛擬機。怎麼理解你們看這個圖,左邊圖展現的是虛擬機,物理服務器裏裝操做系統,再裝上虛擬機管理軟件,生成不少虛擬機,而後虛擬機再裝操做系統再裝各類各樣的應用。右邊圖展現的是容器,物理服務器裏裝操做系統,絕大多數狀況下,容器基於的操做系統是Linux操做系統,而後Linux裏裝一個容器軟件,最多見的是Docker,用Docker運行各類各樣的容器,容器裏面不須要再裝一次操做系統裏,容器裏面只裝各類各樣的應用就行了。這兩張圖對比你們看出來容器跟虛擬機比最大的優點就是輕量不少,容器裏面不須要再裝一遍操做系統。容器裏面的應用重用容器外面的操做系統,特別是Linux內核這些操做系統核心組件。再一點,容器是用於對應用進行封裝,容器裏面是各類各樣的應用程序。用容器封裝應用時,會把程序自己和依賴庫都打包在一塊兒,這樣容器應用具備可移植性,在不一樣的Linux環境下均可以運行,而不須要再安裝依賴庫。容器自己的理念是很是很是簡單的。數據庫
容器技術自己並非嶄新的,倒推到2000年Free BSD的Jail,2005年出現的Solaris Containers這些都是容器技術的早期實現。Docker屬於容器技術的一種。Docker有鏡像的概念,Docker鏡像和虛擬機鏡像不同的特色就是Docker的鏡像是分層的,最下面是基礎的鏡像,是基礎Linux環境,上面每一層鏡像裝不一樣應用。Docker鏡像分層最大的好處就是應用分發很方便,每次分發Docker應用的時候,只須要下載更新部分的鏡像,而不用從新下載整個鏡像,實現應用增量分發更新。容器自己用於封裝各類應用,容器以外還有各類管理需求。編程
這是容器的技術棧,中間部分是兩個容器的示例,仍是服務器上面裝操做系統,再裝上Docker運行各類Docker應用,應用在運行時還有其餘各類需求,好比網絡、服務發現、負載均衡、任務調度等需求,這些需求自己是Docker技術沒法知足的,還須要各類相應的周邊技術。這樣,容器技術棧慢慢演化成一個PaaS的環境了。
服務器
這是美國的容器技術相關的生態圈,你們看到各類各樣的廠商,估計近百家,都在美國的容器生態圈。我特別想畫出一張Docker技術中國生態圈,很遺憾如今還畫不出像美國同樣豐富的Docker生態圈,可是我相信將來兩三年時間內咱們也能畫出很是豐富的Docker關於中國的生態圈。網絡
雲計算分爲三層,SaaS、PaaS、IaaS,這三層隨着雲計算髮展獲得不一樣程度的發展,好比說SaaS的發展,因爲各行各業的互聯網相關業務發展,SaaS以服務爲中心,SaaS提供各類各樣的服務,各類互聯網業務型的,HR、財務、CRM等等,這些不一樣的服務,企業應用的服務均可以以SaaS方式交付這些都有彈性特徵。另一方面雲計算髮展之後對於大規模數據中心的需求愈來愈旺盛,數據中心規模愈來愈大,數據中心相對管理負責度也增長不少,跟數據中心相關就是IaaS和PaaS,數據中心是雲計算雲端真正計算的載體。好比說IaaS以資源爲中心,IaaS要提供資源彈性,數據中內心面IaaS管理整個數據中心資源,讓整個資源以彈性方式提供出來。PaaS在數據中心以應用爲中心,PaaS提供應用的彈性,這是雲計算的三層,都獲得不一樣程度的發展。可是跟IaaS和SaaS相比PaaS發展實際上是相對滯後的。好比說上一代PaaS沒有解決好自己複雜度的問題,後面我簡單介紹一下。負載均衡
2014年先後上一代PaaS基本上是市場的最低點,我2014年回國跟國內同行討論咱們如何作一個PaaS,PaaS有沒有前景,2014年國內同行都對PaaS持懷疑的態度,Docker2013年在美國誕生的,Docker出來之後催生新一代的PaaS,很重要一點Docker出來之後造成事實上應用交付的標準,將來你們廣泛這樣認爲,將來企業級應用都會以容器Docker的形式進行交付。這樣很好的一點Docker定義了企業級客戶和PaaS之間的一個邊界,這個邊界怎麼理解?就是企業只須要關心本身的業務應用、業務程序,企業業務程序分裝在容器裏面,PaaS只須要提供標準的容器運行環境,有了清晰邊界之後PaaS複雜度大大下降,PaaS做爲一個標準,以前沒有容器的時候PaaS和企業客戶之間邊界在哪裏?邊界在於程序編程語言這個層面,好比說Heroku等須要支持各樣的開發語言,上一代的PaaS複雜度很是高,新一代的PaaS因爲Docker定義一個標準,新一代PaaS能夠不用管業務應用拿java仍是其餘語言寫的,解決Docker運行所須要的CPU、網絡、負載均衡、報警等常見的企業內部的需求,這樣新一代PaaS複雜度大大下降,這個也就是我說爲何Docker出現催生了新一代的PaaS。運維
很重要一點中國和美國在新一代PaaS發展方向是齊頭並進的。異步
這張圖我列一下新一代PaaS在中美兩國落地的狀況,左上角是新一代PaaS在美國落地的狀況,右下角是新一代PaaS在國內落地的狀況。基本上你們能夠看出來新一代PaaS落地從互聯網公司到IT巨頭到傳統行業都有各類各樣的落地。落地的這些企業並非全部我只是挑一些有表明性的,從有表明性落地企業來看國內和美國其實幾乎處在同一個起跑線上。編程語言
講到PaaS不得不講一下谷歌的PaaS,其中一個緣由有很大影響力,尤爲是谷歌內部的PaaS很是複雜、功能無比的強大,我以前在谷歌工做過,我見過谷歌的PaaS是怎麼運做的。首先幾個特色,谷歌內部的PaaS分層的,PaaS管理東西不少,PaaS只管理應用,跟應用相關還有不少東西,資源分配,任務調動等等,谷歌PaaS以一種容器方式分裝分發,谷歌有著名的分佈式文件系統,還有各類各樣數據管理的數據,還有Big Table、 MapReduce,這是谷歌分佈式應用編程的範式,這是PaaS提供的能力。分佈式
谷歌PaaS的特色是什麼?就是輕量,輕量怎麼理解?PaaS支撐應用快速迭代快速上線,你們提的持續交付持續集成的概念。谷歌PaaS是以應用爲中心的,PaaS平臺必定提供應用彈性能力,讓各類各樣應用按需使用資源,PaaS平臺提供容錯能力把開發運維複雜度下降,這三點我稱之爲應用PaaS平臺的輕量特性。
再一點谷歌內部的PaaS很是強大,谷歌資源管理和任務調動數據,能夠管理谷歌兩百多臺服務器統一進行管理。爲了讓你們更深入的理解,我找了一張谷歌數據的照片,這是谷歌數據中心照片的一角,不少機櫃,每一個機櫃裏面有差很少20臺服務器左右。這張照片我想強調一點是什麼?這麼大規模的數據中心其實硬件故障頻率很高的,這張圖是我從谷歌一個數據中心的PPT報告上摘下來的,就是說一個谷歌新建的數據中心平均下來一年要發生這麼多各類各樣的故障。舉個例子第一個故障一年大概有半次左右過熱,一年有一次的供電單元有故障。一年至少有一個機架作挪動,至少有一次機架進行排線,一年可能有12次路由器重啓,3次路由器故障,每一年大概有上千次服務器宕機,由硬件故障形成的宕機,一年有數千次的硬盤損壞。目前大規模數據中心基本都是用X86服務器,都不是像大型機或小型機這樣的高可靠硬件。基於X86服務器的數據中心怎麼應對這些硬件故障,保障應用服務高可靠,這是PaaS和IaaS一塊兒要作的工做。
這裏面我主要把新一代PaaS的特性給它勾勒了出來,跟谷歌的PaaS有類似的地方,新一代PaaS基於微服務理念打造的,特別是像谷歌的PaaS分層管理。新一代PaaS也有輕量的特性,介紹谷歌PaaS的輕量特性,應用要具備彈性要分佈發佈,再一個容錯性強、易於維護,PaaS也要對計算資源故障進行容錯。這裏面特別強調一點大規模數據中心或者如今這種數據中心對於硬件管理方式有兩種,一種上一代的寵物型管理方式,另外是放養型的。對於寵物型的數據中心管理方式實際上是很常見的,好比說對於數據庫服務器,通常企業裏面數據庫服務器絕對不容許宕機,數據庫宕機全部應用所有宕了,因此要有人爲維護,DBA,人圍機器去轉,這是寵物型對數據中心的管理,一旦數據庫宕機人立刻去修。另外是放養型跟寵物型相反,放養型什麼意思?好比說谷歌這樣的量級中心,兩百萬臺服務器不可能保證每一臺服務器都是處於工做狀態,必定有一些服務器處於故障狀態,要經過軟件PaaS平臺保證上面應用服務不宕機,PaaS對於軟硬件都要有很強的容錯能力,放養型的工做管理必然極大下降對數據中心維護,包括PaaS自己,維護成本運維成本都會大大下降,這是新一代PaaS很重要的特性主要就是輕量。
接下來簡單講一點點咱們數人云對於新一代PaaS是怎麼實現的?其實最主要就是分層的實現,分層實現這是谷歌提出來的理念。大規模數據中心是雲端計算的載體,大規模數據中心的軟硬件系統是IT行業最高科技的結晶。這麼多複雜系統拼在一塊兒組成大規模的數據中心,對外提供雲計算服務能力,不是一套系統可以所有作下來的,必定是分層實現的。
咱們實現新一代雲計算平臺首先有一個是核心模塊,核心模塊自己也是分好幾個層面的,核心模塊基本上圍繞運行時的基本管理提供好比說容器運行的標準環境,這個核心模塊包括幾個層面,首先應用的封裝用到的是Docker的技術,這是很火的容器技術。光有應用封裝不夠的,應用封裝完應用運行還有別的需求,須要CPU、內存需求等等,資源分配核心模塊裏面功能咱們基於Apache來作的,應用不是運行在一臺服務器,大規模數據中心有成百上千臺服務器,對於大規模的集羣裏面應用該怎麼調度這是很關鍵的模塊,咱們用的是任務調度模塊作的。好比說應用分發,涉及到應用的更新上線等等,好比說老版本的應用已經運行了,新版本應用程序我要分發下去,新版本應用我要有一個分發的倉庫存在什麼地方,這時Docker的鏡像倉庫用於應用分發。
核心模塊還要管理網絡,咱們不少客戶提出來不一樣應用之間的網絡要進行應用隔離,有些應用可達有些應用不可達,這都須要對容器之間網絡進行有效管理。咱們經過Calico來實現網絡管理。
還有服務發現,容器運行環境在大規模數據中內心面,對於容器調度不是靜態調度,不是一個容器應用就跑到一臺服務器上,它是動態調度的,不一樣應用之間我有通訊需求,我應用A怎麼找到應用B就須要有應用發現的需求,這是核心模塊的基本功能。
周邊模塊支撐應用運行方便應用運維,周邊模塊體現出新一代PaaS平臺的應用度。
周邊模塊很重要一塊就是持續集成,這是企業客戶對於PaaS平臺很強需求的一點,由於這些業務應用你們須要快速迭代,這是互聯網給你們帶來的企業級IT最大的衝擊,應用怎麼作到快速上線須要持續的集成,開發人員作的新的代碼怎麼持續集成各類各樣的應用並且發佈出去。
再一個彈性伸縮這也是互聯網帶來新業務的特色,互聯網業務最大特色就是集中爆發,很經典例子就是淘寶雙十一,12306你們訂票,彈性伸縮是PaaS平臺必須提供的性能,沒有彈性面對集中爆發的業務需求這個後臺支撐不了,彈性伸縮咱們用API實現的。再一個監控報警,任何企業生產環境系統不是孤立存在的,必定有各類各樣的監控報警,生產系統誰也不能保證100%的正常。
再一個日誌的處理,這是企業很強的需求,生產環境裏面各類各樣的業務都有,生產環境都是比較大規模的集羣環境,不一樣應用產生的日誌留在不一樣的服務器上,怎麼把這些日誌在分佈式環境下進行統一收集查詢統一處理,須要有日誌統一管理,咱們主要用的是ELK這個模式。
再一點就是文件存儲,企業生產環境數據中內心面業務應用必然有一些數據存下來,就要存在文件系統上,文件存儲咱們用的是Hadoop的文件系統。再有對於數據的管理,多個應用要對數據同時進行讀寫操做,對於數據訪問管理等等這些咱們用的是HDFS。還有咱們用Kafka消息隊列來處理不一樣應用之間的異步通信需求,將來Kafka能夠替代企業服務總線。還有數據處理,如今企業對於大數據處理有很強的需求,你們用Hadoop還有Spark這些,咱們主要用Spark作大數據處理更快。
前面介紹一下咱們作的新一代PaaS平臺的核心模塊和周邊模塊,我簡單給你們演示一下咱們的程序,這是咱們對於應用管理作的,咱們作到應用統一管理,各類各樣的應用經過這個平臺統一的分發部署。再一個集羣管理,它的PaaS也要向下管理各個集羣的資源。中間有一個紅點表明某一臺集羣主機是異常的,異常沒有關係,上面應用把這個平臺容錯自動遷走遷移到其餘地方,一兩臺主機宕機不影響整個的應用使用。再一個應用管理,散落在不一樣集羣上。跟日誌相關的數據統一收集起來方便後臺運維人員管理。軟件定義世界,這是咱們全部作軟件的人很是喜歡的一句話,如今你們平常工做生活都跟各類各樣的軟件在打交道,以前有你們提的隨着雲計算髮展提出的軟件定義存儲、軟件定義計算、軟件定義網絡等等。再進一步的提法軟件定義數據中心。我剛纔講PaaS講到不少數據中心的概念,說到底我喜歡軟件定義世界這句話。
這個背景圖其實就是黑客帝國電影的主題圖。黑客帝國裏邊講的是將來人類生活在虛擬軟件定義世界裏面。這個軟件定義世界正在發生,每一個人如今天天都要大量跟各類各樣的軟件打交道。隨着雲計算新一代PaaS平臺普及,隨着容器技術如火如荼的發展和推廣,下一步就是不只僅是軟件定義世界了,咱們最後會達到容器定義的世界,全部的軟件都是以容器形式交付運行的,歡迎你們來到容器定義的世界。