AWS十週年,亞馬遜cto總結的10個教訓

2021-07-11 04:35:50 字數 3526 閱讀 3431

英文:werner vogels

amazon s3 的發布是 aws 的新紀元,那是2023年3月14日,至今幾乎10年了。回想這10年來,以盡可能最低成本構建乙個要求安全、可靠、可伸縮、效能可**的運營服務,我們學到了數以百計的教訓。

鑑於 aws 是全球領先的雲服務建設和運營商,這些教訓對我們的業務是極其重要的。就像我們以前常說的,「經驗的積累沒有壓縮演算法。」 每月超過100萬活躍使用者,而這些使用者又可能向數億自己的客戶提供服務,這裡絕不缺乏獲取更多經驗的機會,也許沒有哪個系統能想我們這樣持續改進對使用者的服務。

我從這些教訓裡挑選了一些來與你分享,希望對你也有所幫助。

從做aws的第一天起,我們就清楚,我們正在開發的這套軟體不是一勞永逸的。預期是使用者每增加一兩個數量級後,我們就需要重新考慮並修訂架構,以確保應對規模增長產生的問題。

但是,我們不能用停機維護的老辦法來公升級系統,因為全世界許多客戶都是依靠我們的平台提供7 x 24 小時的服務。我們需要構造乙個無需停止服務就能引入新元件的架構。亞馬遜傑出的工程師 marvin theimer 有一次開玩笑地說,對於amazon s3 的演化最恰當的比喻是,從一架單引擎賽斯納小飛機開始,隨著時間的推移,公升級成了波音737,然後是747機群,最後一路發展成目前龐大的空客380機隊。在整個過程中,我們一直在空中加油,把乘客在飛機之間來回轉移,而他們甚至沒有任何察覺。

故障是一定會出現的,只是個時間問題:從路由器到硬碟,從作業系統到破壞了tcp資料報的記憶體單元,從短暫的錯誤到永久的故障。這是不可避免的,不管你用的是最高質量的硬體還是最低成本的元件。

在規模擴大後,問題更加凸顯:比如,由於 s3 負責處理幾萬億次的儲存事務,任何乙個哪怕最微小的出錯可能性,都會演變為現實的故障。很多故障場景可以提前預料,但更多的在設計和開發階段是未知的。

我們開發的系統需要擁抱故障,把故障作為自然存在,即使不知道故障會是什麼樣子。系統需要保持執行,即使「房子著火了」。能夠在不關閉整個系統的同時處理受到衝擊的部分,是非常重要的。我們掌握了控制故障「爆破半徑」的基本技巧,這樣就可以保持系統的整體健康。

很快,我們開始意識到使用者以一種』持續建設』的方式使用我們服務。當使用者擺脫it硬體和資料中心的舊世界的束縛時,他們開始用聞所未聞的、有趣的新方式開發系統。因此,我們需要做到極盡敏捷才能滿足使用者的需求。

最重要的機制之一是,我們提供給使用者的是原語和工具集,什麼都有,他們可以拿來按照自己的喜好與 aws 雲結合,而不是僅僅提供乙個框架來強迫他們使用。這個機制給我們的使用者帶來了巨大的成功,以至於aws 後續的服務也採用了相同的機制,我們的使用者對此已經習慣。

同樣重要的一點是,在使用者還沒開始使用乙個服務之前,我們很難準確預知到該服務的特定優先順序。這也是為什麼所有的新服務最初都會以最小的功能集發布,然後借助使用者的反饋,再對該服務進行功能擴充套件。

開發供人操作的軟體服務與製作發售給使用者的軟體是完全不同的。管理大規模系統需要非常不同的思維方式,以確保滿足使用者對可靠性、效能和伸縮性的要求。

實現這一點的關鍵機制是盡可能自動化管理,摒棄易於出錯的人工操作。我們需要開發控制核心功能的管理 api 來達到這個要求。aws 也幫助使用者實現自動化,方法是將你的應用程式分解為基本的「積木塊」,每乙個都帶有管理 api,你可以設定自動化規則來維持大型系統的可靠性和可**的效能。一條不錯的檢驗原則:如果你需要ssh登入到一台伺服器或例項,那麼你的自動化就是不夠的。

這是我們從亞馬遜零售業務的經歷總結出的一條教訓,對 aws 以api為中心的業務就更加至關重要了。一旦使用者開始用我們的 api 構建應用和系統,這些api就不可能修改了,如果我們要改就會對使用者的業務操作產生巨大影響。我們知道設計 api 是非常重要的任務,只有一次成功的機會。

給乙個服務制定財務模型來確定合適的收費模式的時候,要確保有充分的服務和運維成本資料,特別是運營乙個高容量、低毛利率的業務時。aws 作為服務提供商,需要對成本有非常清晰的認識,這樣才能負擔得起給使用者的服務,還要確定**可以提高執行效率來進一步降低成本,然後把省出來的部分以低價的形式讓利給使用者。

舉個例子,早期我們不知道 s3 在某些使用模式下需要多少資源:我們以為儲存和頻寬是我們需要收費的資源;執行一段時間後才意識到請求次數是同等重要的資源。如果使用者有很多小檔案,即使發出千萬次的請求也占用不了多少儲存和頻寬。我們不得不調整模型來覆蓋所有維度的資源使用,這樣 aws 才能成為可持續的業務。

保護使用者應該始終是你的第一要務,當然也一直是 aws 的……從運營視角到工具和機制,安全永遠是我們首要的投資領域。

我們很快學到的乙個方法是,為了構建安全的服務,必須在服務設計最初就整合安全性。安全團隊不是在系統建成後做驗證的,他們必須從一開始就參與其中,以確保安全性自底向上的從根本上堅不可催。在安全方面是沒有妥協空間的。

加密是確保使用者完全控制誰有權訪問他們資料的關鍵機制。十年前,加密工具和服務是很難使用的,直到幾年前我們才學會如何將加密完美整合到我們的服務中。

根據法規遵從性用例,我們從提供 s3 服務端加密開始。如果你檢查我們資料中心的任何一塊磁碟,裡面的資料是完全無法訪問的。然而,隨著amazon cloudhsm(適於硬體安全性模型)和之後的 amazon key management service 的發布,使用者可以使用自己的金鑰來加密,無需 aws 管理使用者金鑰了。

一段時間以來,每個新服務在設計階段就整合了加密支援。比如 amazon redshift,每個資料塊預設由隨機金鑰加密,這些隨機金鑰又由乙個主金鑰加密。主金鑰可以由使用者提供,保證了只有他們才能解密並訪問關鍵商業資料或個人識別資訊。

加密一直處於我們業務的高優先順序,我們將繼續讓加密技術更加易用,使我們的使用者通過它更好的保護自己和他們的客戶。

aws 在資料中心布局和執行創新方面已經具備一套獨特的技巧,足以建立靈活的網路架構來滿足使用者的各種負載需求。時間一長,我們認識到我們不應該懼怕開發自己的硬體解決方案來幫助使用者達到他們的目標。這使我們可以滿足非常特殊的要求,比如將 aws 使用者在網路上互相隔離以達到最高端別的安全性。

aws 設計的網路硬體和軟體是如何使我們為使用者進一步提公升效能的,這裡有另乙個成功的例子,就是在虛擬機器上處理網路接入的「虛擬化稅」(譯者注:zdnet這篇文章提到了虛擬化稅virtualization tax,指反對虛擬化技術的人士認為虛擬化帶來更多間接費用 )。因為網路接入是個共享資源,使用者以前偶爾會感受到明顯的網路抖動。開發一款支援 single root io 虛擬化的單網絡卡讓我們可以給每台虛擬機器自己的硬體虛擬網絡卡。這使延遲降低了 2 倍,整體網路的延遲不確定性降低了 10 倍。

aws 團隊這些年發布了很多服務和特性,為使用者建立了乙個既有廣度又有深度的平台。但是 aws 完全不止是我們閉門造車出來的服務:借助於我們的合作夥伴交付的服務,乙個非常豐富的服務生態系統形成了,將平台擴充套件到了很多新的方向。

例如,在我們的合作夥伴裡,stripe 提供支付服務,twilio 使得 aws 上可以編寫**語音應用。很多使用者自己在 aws 上層構建平台來滿足特定的垂直需求:philips 建立了 healthsuite 數字平台用於管理醫療資料,ohpen 在 aws 上建立了銀行零售平台, eagle genomics 建立了基因處理平台,還有很多很多。關鍵是,aws 平台上沒有看門人告訴我們的合作夥伴什麼能做什麼不能做。「沒有看門人」解放了創新過程,開啟了許多難以想象的創新大門,這樣的結果是必然的。

我非常期待在下乙個10年裡看到我們還能學到什麼,aws 的使用者能實現什麼。記住,現在依然只是開始 ……

紀念高考十週年

10年前的昨天今天和明天,我參加了人生中最重要的一次考試 高考。回憶那些日子,感覺好像就在不久以前,一切都歷歷在目。我高三上半學期生了場病,斷斷續續地一共休息了2個多月,導致整個學期一直沒進入 學習狀態。高三下學期一開始,明顯感覺自己落後了很多,導致自信心大大下降。人最怕 失去自信,但是一切還得堅持...

理查德 伯恩斯十週年

理查德?伯恩斯十週年 2011年11月26日 11月25日是已故車手理查德?伯恩斯 richard burns 成為英格蘭歷史上首位拉力界世界冠軍的十週年紀念日。作為他的身前好友及領航員的羅伯特?里德 robert reid 將帶領大家一起追憶這位2001賽季伯恩斯在英國站決定年度冠軍的一站。十年前...

和信十週年 堅守與前行

路遙在 平凡的世界 裡寫道,普通並不等於庸俗。他也許一輩子就是乙個普通人,但他要做乙個不平庸的人。在許許多多平平常常的事情中,應該表現出不平常的看法和做法來 網際網路金融行業變革的參與者中有這樣一群人,他們懷揣簡化金融服務的理念,用了10年時間建立了一套完整的服務體系,通過技術創新簡化金融服務流程,...