8年前,亞馬遜發布了第一個云計算產品。亞馬遜一直堅持云計算的目的,就是屏蔽底層的硬件,為開發者提供計算資源以運行應用程序。 對于AWS,還有其母公司亞馬遜,硬件都是一個競爭優勢。亞馬遜一向不大愿意過多談論自己的數據中心和系統。 但是那些競爭對手們,包括GOOGLE,MICROSOFT和IBM,則大肆宣傳在云計算上的投入和創新。亞馬遜也就不得不稍稍揭開一點自己的神秘面紗。
原因很簡單。亞馬遜的在線零售業務,是一個700億美金的龐然大物,大雖大,但耗費現金并不多。Jeff Bezos,亞馬遜的創始人兼CEO,對于利潤的興趣很小,對于改變世界的興趣倒是很大。然而,云計算畢竟是這個世界上,資本最為密集的行業之一。Google可以在數據中心上花費幾百億美金而毫不心痛,背后有壟斷性業務“搜索引擎”的支撐。Microsoft,則在桌面軟件和數據中心軟件方面有著壟斷的地位,錢袋一樣深不可測,自然也一樣敢于一擲千金。
Google和Microsoft在燒錢上的本事,無人能及。 但他們的基礎設施和平臺服務,面對亞馬遜時的競爭力,還是令人生疑。 但若從長期來看,亞馬遜能否跟得上google和microsoft的腳步,卻很成問題了。 于是,AWS的副總裁,卓越的工程師,James Hamilton透露了AWS云的規模和范圍。目的自然為了告訴大家,亞馬遜的領先地位以及對云計算的決心。
最重要的,永遠是規模。做在線零售的亞馬遜,當然清楚這個。 亞馬遜很少談及公有云,因為在亞馬遜的理論中,云計算就不該是私有云。亞馬遜認為,長期來看,公有云的巨大規模,意味著大部分的組織和機構都不需要運營自己的數據中心。
在AWS的Re:Invent大會上,jassy又一次強調,自云計算業務開始以來,他和亞馬遜的CTO Werner Vogels就支持這個論點。(亞馬遜為美國中央情報局建設過一個特殊的AWS私有云,簽署了為期10年,6.6億美金的合同。但那只不過是一個例外。云計算本質上還應該是公有的)。Jassy and Vogels的信念很簡單: 只有覆蓋了全區域,具備大容量,提供最豐富功能的云,才能勝出。會有一些例外,比如說金融服務云,或者那種100%運行特殊硬件和軟件的巨型計算中心。 公有云的資源不僅足夠好,而且一定會超越大部分的私有云。
AWS將底層的計算能力、存儲和網絡功能,抽象出來,這樣開發者就可以專注于應用開發。抽象出來的資源,要么形成純粹的基礎設施,要么在其上繼續抽象出一層平臺服務,便于進一步實現自動化部署和對中間件、數據庫和支持應用的其他服務的管理。但這并不是說底層的基礎設施不重要。 實際上,亞馬遜投入了巨大資金,用來設計和建設數據中心,并優化各方面的設施從內存條到數據中心的墻壁。基礎設施確實重要,絕對能夠形成競爭優勢。
網絡的事,比服務器還麻煩
和許多超級數據中心一樣,亞馬遜的服務器,剛開始也是從一線的服務器制造商那里購買。亞馬遜成了rackable system(現在是SGI旗下公司)最大的客戶。 后來,亞馬遜決定自行制造系統,以便針對自己的工作性質進行精確調優。尤為重要的,是為了能夠與其數據中心、電力、制冷系統嚴絲合縫的配合。數據中心在與時俱進的發展,系統也需要步調一致的前進。
過去,亞馬遜在其基礎設施的規模問題上,只含糊其辭,從不給出準確的數據。從2004年開始,AWS每一天都要安裝足夠多的服務器以支撐亞馬遜的在線零售業務。那個時候,亞馬遜的收入規模,僅為70億美金,僅為現在的1/10。
“去年發生的那些變化?”Hamilton反問道,然后開玩笑說:“我們都執行過365次了。”
換句話說,去年AWS增添了足夠多的容量,以支撐2.55萬億的在線零售業務。
那么,AWS到底容量多大? 答案是:比很多人想的還要大。
下面就是關于服務器的計算了。 亞馬遜在全球11個地區擁有數據中心。 每一個地區擁有最少2個可用區,這樣所有地區一共擁有28個可用區。 (包括兩周前在德國法蘭克福啟動的新地區)這些可用區為本地的工作負荷,提供隔離的和冗余的能力。類似那種串聯或者分層的容錯系統,在數據中心和服務的層次上工作,而不是在兩個系統之間嚴格步調一致。每個可用區最少有一個數據中心,有些則多達6個數據中心。 (2013年1月,Hamilton在Re:Invent會議上說,僅只美東地區便有超過10個數據中心,但在2014年的Re:Invent會議上他的演講中,又說沒有可用區擁有超過6個數據中心。)目的是為了讓客戶能夠構建自己的應用,運行在不同的可用區上,以實現本地數據保護。更進一步,實現跨地區部署,達到更高層次的可用性。 亞馬遜通過增加新的數據中心,以為每個可用區提升容量。
基本上,和企業客戶增加的機架一樣,數據中心實際上就是AWS的新機架。
好了,這一切都還是很有意思的。Hamilton說AWS的每一個區域都最少有兩個可用區,每個可用區則最少有1個數據中心。然后他又補充說,一個典型的數據中心最少有5萬臺服務器,有的超過8萬臺。 另外,數據中心的規模效益在到達頂峰后便即下降。隨著規模擴大,在某一個點,數據中心的邊際成本開始上升,而不是下降。 更重要的是,在到達某一個數值后,一旦發生災難型事故導致數據中心失效,則殃及的“爆炸半徑”太大,使得過多的負載無法轉移。
做一點計算吧。 假設AWS有28個可用分區,每一個數據中心只有5萬服務器。這是AWS基礎設施最小的容量了。這樣,全球共有140萬服務器。如果你不相信,說每個分區有8萬臺服務器(我們知道這不是真的,只不過設置一個錯誤的最高界線),那么就是224萬機器。 為了更準確的猜測AWS基礎設施的規模,你必須猜測可用區中,數據中心數量的分布情況。 我認為很少情況下,只有一個數據,大部分都是2個數據中心,擁有更多數據中心的情況則越來越少,直到到達最大值6個數據中心。我把數據擺弄來擺弄去,覺得28個分區,一共87個數據中心這樣的估算還是靠譜的。 每個分區平均3個數據中心還要多一點。 如果假設每個可用區平均6萬5千個服務器,那么你會看到數值很大:564萬服務器。如果平均5萬服務器,則降低到全球420萬機器。如果假設每個可用區的數據中心少一些-比如平均2個-那么一共280萬臺機器。 由此,答案是AWS可能擁有280萬到560萬服務器。 我也意識到很可能誤差很大,可是也只能這樣猜測了。
總的來說,規模是巨大的。 還不止這些,亞馬遜還投入了巨大資金,制造自有的網絡設備,并建設了私有網絡,從而把所有數據中心連接在一起形成一個巨大的全球集群。 這是Hamilton談起來最興奮的東西,因為網絡是計算能力最大的瓶頸。
“對我們而言,網絡互聯是當前最大的危機”Hamilton解釋道“網絡建設的成本,與所有其它設備的成本都相關,不斷攀升。在這方面是反摩爾定律的。我們所有的設備都在降低成本,我們也在壓低價格,但網絡成本則反向而行。這是個大問題。往前再看遠幾年,網絡的問題越發嚴重。同時網絡是反摩爾定律的,網絡建設對計算能力的占比也在上升。”
Hamilton說,部分原因,是由于每一代的cpu都帶來更多的計算能力,而每單元計算能力的成本則在下降。 越來越多的人,做越來越多的數據分析,而數據分析工作對網絡的需求巨大,給網絡帶來巨大壓力。(這是因為數據分析,和超級計算機的運作一樣,在節點之間要進行大量通信,也就是所謂的“東西流量”。而另一種“南北流量”則是web應用從服務器上請求一點數據并在互聯網上顯示出來。二者區別很大。)
所以約五年前,當問題剛剛出現時,AWS設計了自己的網絡路由器并去原廠制造硬件,并組建團隊在硬件上開發網絡軟件。
亞馬遜從定制網絡設備中學習到的第一件事,和它很久以前從服務器和存儲中學到的一樣: 如果你用極簡主義理念,自主制造所需的設備,那么就會便宜很多。“僅僅網絡設備的服務合同,常常就要幾千萬美金。”
但即便對Hamilton而言,也是頗為驚奇的事:網絡的可用性上升了,而不是下降。 這是因為AWS交換機和路由器只具備AWS在網絡上所需的功能。 但商業網絡操作系統,則必須覆蓋所有可能需要的場景和協議,因而往往需要幾千萬行的代碼,從而帶來維護上的困難。 “我們的設備更可靠,因為我不需要面對那些更麻煩的問題。能完成任務的,就是好方法。”
另一件事,亞馬遜,尤其是AWS熱衷于測試并收集運行數據。 當亞馬遜第一次測試自己的網絡時,用了8000臺服務器,容量3兆瓦的數據中心。而這個數據中心的建設成本約為4千萬美金。任何一家最大的網絡設備提供商都做不到,但AWS可以,而且做到了。 嚴格來說,亞馬遜是從自己那里租了這巨大規模的數據中心用以測試,在幾個月里花費了幾十萬美金。今天亞馬遜所有網絡都在使用這自有的網絡軟件。與擁有軟件和詳細測試一樣重要的是,亞馬遜持續開發代碼并投入生產。 “也許開始的時候確實差一點,但確實越來越好。”
簡單來說,這就是超級系統的獨特之處。 總是從簡陋,到還湊活,一直到完善狀態。 走一條穩定、革新的路,當然這條路會時時被新的理念打斷均衡的過程。
AWS當前有11個地區,2年前是9個地區,還將增加更多以接近客戶,并滿足業務上對政府管轄權的需求。(德國地區就是因為德國的商業機構和政府機構,不能在愛爾蘭存儲數據而創建的)這是他們分布的位置:
所有的地區都連接在一起,通過私有光纖通道,而不是通過購買第三方的通道。原因很簡單: 這樣做,不會因為運營商的問題而導致網絡帶寬缺乏,而且網絡是你自己的,你清楚知道網絡的效率。也更加經濟,對于亞馬遜這么大的規模,自己擁有網絡,在每個字節上的單位價格一定更便宜。 另外,自有的網絡也比較快,亞馬遜不會緩沖自己的流量。而運營商遇到過載的時候,就會對流量進行緩沖。 “更可靠、更經濟、也更少延遲”Hamilton這樣說。
美東地區,弗吉尼亞州的阿什本,共有5個可用區。這些可用區都是受保護的區域,各自分離并隔開幾公里,由高速、低延遲網絡連接。這樣一來,同步的復制就是可能的,而且地理上的隔離足夠遠,兩個可用區(存儲數據和應用的多個版本)同時出現事故的可能性就很小。 可用區單元由光纖聯接,使用密集型波分復用傳送數據包。在美東地區,一共有82864條光纖。 可用區在延遲方面通常都小于1毫秒,絕對小于2毫秒;這個速度是可以進行同步數據復制的。要知道,固態硬盤的數據保存也要在1-2毫秒之間。
企業經常在關鍵應用上,通常都會進行跨區域復制。但在麻煩一些的場景中,比方說,一個數據中心在紐約,一個在洛杉磯,則延遲大約為74毫秒。這種情況下,就無法進行同步復制,這就意味著一次失敗,數據就會在到達備份系統的傳輸途中丟失。這樣一來,就只能使用日志恢復,而這則要花費數天時間了。
這就是為什么亞馬遜在2000年要發明可用區。 這種方法一定程度上,更加昂貴,但災難恢復更快。 可用區在美東地區有25Tb/sec的帶寬,為了應用的可靠性,這個花費還是值得的。對于在線零售商來說,這肯定是必須的。 想像一下你開車去沃爾瑪,而整個庫存卻都空了。如果發生了愚蠢的錯誤,例如負載均衡失效,則可用區中的一個就會承擔負荷并繼續工作,重建同步隨即便可開始。
讓我們進入一個可用區看看。 美東地區的可用區中,每個數據中心之間網絡傳輸只需1/4毫秒,而且沒有一個數據中心跨越2個分區。 實際上,如上所述,一個可用區可以有多個數據中心,美東看上去有10個數據中心,而據說有些可用區有多達6個數據中心。 可用區中有多個冗余交換中心。這樣,即使亞馬遜丟掉一個交換中心和多個可用區,一切都還可以正常運行。
進入一個可用區的數據中心,如上所述,有50000服務器,有時候還會多達80000機器。 一個aws數據中心大概在25兆瓦到30兆瓦之間,如果一共有87個數據中心,則總共有2.17吉瓦(2.17個十億瓦)到2.6吉瓦電力消耗。Hamilton說亞馬遜可以運行60兆瓦的數據中心,但問題是,從2000個機架到2500個機架,成本并不會降低很多,而且災難范圍,也就是他所說的“爆炸半徑”,太巨大。 “從某個點開始,價值降低而成本升高。在我們看來,這大概就是正確的數字了”Hamilton這樣評價亞馬遜為數據中心定義的大小。
記下來吧,競爭對手們。
一個單獨的數據中心,有高達102 Tb/sec帶寬的分配,這是美東地區的可用區之間的帶寬的4倍。Hamilton補充說數據中心內部的帶寬還要“遠超”102Tb/sec。
再到一個機架里看看,到一個服務器和虛擬網卡里看看。 網卡支持SR-IOV,這是PCI-Express協議的擴展。PCI-Express協議對物理網絡設備的資源進行虛擬化。SR-IOV繞過操作系統上運行的通常軟件協議棧,以及網絡驅動和支撐他們的hypervisor層。從應用到網卡,需要幾毫秒。 通過網卡只需要微秒,而通過光纖到達另一個服務器的網卡接口則只需要幾個納秒(十億分之一秒)。“這就是說最麻煩的就是兩端軟件上的延遲”Hamilton解釋。SR-IOV非常輕量,給虛擬機上的每一個客戶分區一個自己的虛擬網卡。這些虛擬網卡來自物理網卡。
為什么亞馬遜實現這些這么難? 因為需要為網絡協議棧添加安全、隔離、計量、控制和效率衡量等去掉的功能。 這些都需要耗費時間。AWS的新實例類型都有SR-IOV功能,也將在所有實例類型中普及。