1. 程式人生 > >閒話雲端計算(一) 雲計算髮展史

閒話雲端計算(一) 雲計算髮展史

說到雲計算曆史,很多人腦海裡第一個彈出的詞就是AWS(Amazon Web Service,亞馬遜推出的雲端計算服務)。的確,AWS是目前為止商業上最成功的雲端計算公司,也是業界的一個標杆,以至於很多IT業內人士提起亞馬遜,首先冒出的概念就是這是一家雲端計算公司,但卻忘了亞馬遜的老本行是電子商務。在亞馬遜的身後,另外一家巨頭公司雖然在雲端計算商業上沒有亞馬遜成功,但卻通過獨特的技術和理念深刻的改變了雲端計算產業和技術的格局,這家公司就是谷歌(Google)。

從一開始,亞馬遜和谷歌在雲端計算方面就走了兩條不同的路。亞馬遜雲服務於2006年推出,最初提供的服務主要是EC2(雲主機)、S3(物件儲存)、EIP(彈性IP)、RDS(關係資料庫)等純IaaS層面的產品服務。即使後來的產品線愈加豐富,但是主流產品的基石仍然是圍繞EC2,也就是虛擬機器,至今EC2仍然是亞馬遜雲端計算最賺錢的產品。相比亞馬遜,谷歌的雲端計算技術並不落後,某種程度上甚至可以說更加先進,但是他的雲端計算商業化之路要落後亞馬遜很多。這和谷歌的理念有很大關係,谷歌的雲端計算更多的是作為內部的基礎設施,為谷歌的業務部門服務,即使對公眾開放,推廣力度也並不大。這從最早兩年的主要目標客戶是大學和研究機構就可以看出。2018年有一個很著名的事件是谷歌退出了美國國防部的雲端計算採購招標專案,理由居然是谷歌秉持的“不做惡”理念,谷歌認為參與國防專案和公司的價值觀不符,當然可能還有一點是谷歌不差錢,看不上雲端計算這點收入。

隨著亞馬遜在雲端計算商業上的成功,一大票IT巨頭公司殺入了雲端計算市場。微軟於2010年釋出雲服務,並於2013年開始在Azure上支援IaaS服務。IBM於2013年通過收購當時雲端計算收入排名第2的Softlayer進入雲端計算領域。Oracle稍晚一些,於2015年才開始推進雲端計算戰略。這些巨頭公司的雲端計算業務很難說非常成功,因為雲端計算的利潤被亞馬遜壓的很低,並且和他們的傳統業務產生了衝突,並沒有在商業上帶來突破性的進展。亞馬遜的商業成功也帶動了中國的網際網路公司對雲端計算的投入,阿里雲、騰訊雲、華為雲等在中國市場逐漸成長起來,並開始向海外探索。

除了傳統的IT巨頭,中小型的IT公司也把目光投向雲端計算這片熱土。這些公司沒有巨頭公司那樣的投入能力,所以希望通過開源社群的方式來集合更多力量,和亞馬遜等巨頭抗衡,CloudStack、OpenStack等專案應運而生。這些專案一開始的目標就是對標亞馬遜,後來又因為需要去滿足各個參與廠商的需求,偏離了最初始的目標,最後折衷的結果是公有云能力上距離亞馬遜越來越遠,私有云能力上也沒有突出的特色能力。

和亞馬遜相比,谷歌在雲端計算方面始終保持一個清高的姿態,並沒有去刻意追求商業上的成功。谷歌在雲端計算基礎技術上另闢蹊徑,走上了一條與眾不同的道路。谷歌認為虛擬機器還是太沉重、不利於資源使用效率提升和快速排程,於是自研了一套基於容器的排程管理系統Borg,排程的目標是程序(沒錯就是程序,一個容器本質上還是一個作業系統的程序)。使用程序作為排程物件,最大的問題是程序可以使用的計算資源無法限制,比如一個程序佔用了太多CPU資源,其它程序就會受到影響。為了解決這個問題,谷歌開發了Linux Cgroup技術,並推動該技術進入Linux Kernel,這也成為了後來容器技術的基礎之一。Borg在容器的基礎上,引入了Alloc(Pod)、Service、Label的概念和技術實現,成為了谷歌內部的雲端計算基礎設施。感謝谷歌,於2014開源了Borg,並將其命名為Kubernetes,從此掀起了波瀾壯闊的容器雲和PaaS時代。Kubernetes在出現初期,雖然背靠谷歌,但是並沒有贏得絕對的優勢,只是後來和Docker結合起來,才逐漸建立起不可動搖的地位。

在Kubernetes出現以前,容器的優勢已經被很多人發現。那個時候雲端計算設計人員希望找到一種技術,可以很快地提供應用開發和部署所需的基礎軟體資源,並能提供應用打包能力和服務間呼叫管理能力。這個技術被命名為PaaS。基於虛擬機器的資源供給方式仍然被認為效率太低,因為在部署虛擬機器之外還需要額外安裝應用所需的軟體,即使把軟體打到虛擬機器映象裡,所需要的時間也是分鐘級別,更別提在不通環境間遷移虛擬機器映象的難度。而容器的輕量級能夠很好的滿足需求,易於打包、遷移和部署。這個時代的PaaS代表技術有CloudFoundry和Mesos。IBM曾經重金投入CloudFoundry打造了Bluemix,EMC也收購了CloudFoundry的創始公司Pivotal。這些投入最後證明都沒有那麼成功,最大的問題是這些系統沒有像Kubernetes那樣,在開源之前,已經在谷歌的資料中心執行並持續優化了超過10年的時間,使得Kubernetes在誕生之初就已經有了很高的起點。

提到PaaS,就不能不提到另外一個開源產品Docker。Docker自2013年釋出開始,就帶動了容器技術的熱度。其實在Docker之前,已經有LXC(Linux Container),但是LXC更多地是側重在容器執行環境的資源隔離和限制(類似於一個程序沙箱),而沒有涉及容器映象打包技術,這使得LXC並沒有得到普及。Docker在LXC的基礎上更進一步,規範並建設了一套映象打包和執行機制,將應用程式和其所依賴的檔案打包到同一個映象檔案中,從而使其在轉移到任何執行Docker的機器中時都可以執行,並能保證在任何機器中該應用程式執行的環境都是一樣的。Docker所提出的“Build, Ship and Run”的概念迅速得到了認可,Docker也逐漸成為容器技術的領導者,甚至讓很多人誤認為容器就是Docker。隨著Kubernetes的成熟,以及和Docker的融合,PaaS技術的主流路線逐漸過渡到Kubernetes+Docker,並於2018年左右開始佔據統治地位。