1. 程式人生 > >AWS CTO對過去十年的經驗總結 – 十條軍規

AWS CTO對過去十年的經驗總結 – 十條軍規

AWS(Amazon Web Service) 開始於 2006 年 3 月 14 日 Amazon S3 的釋出,距今已有十年時間。回首過去十年,我們在構建和運營 AWS 雲端計算服務中積累了大量的經驗教訓——這些服務不僅需要確保安全性、可用性和可擴充套件性,同時還要以儘可能低廉的成本提供可預測的效能。考慮到 AWS 是世界範圍內構建和運營此類服務的開拓者,這些經驗教訓對我們的業務來說至關重要。正如我們多次重申的,“經驗不存在壓縮演算法”。考慮到 AWS擁有每月超過一百萬的活躍使用者,而這些使用者也許會為數以億計的自家客戶提供服務。因此,積累上述經驗教訓的機會在 AWS 比比皆是, 在這些經驗教訓中,我挑選了一些分享給大家,希望對各位也能有所幫助。

1.構建可持續演進的系統

從做 AWS 的第一天開始,我們就清楚地認識到,我們在做的這套軟體不是一勞永逸的。現在可以用的軟體,一年之後很可能將不再適用。我們的預期是,隨著(使用者)數量級的增加一或兩次,我們都需要重新檢視和適當修改我們已有的架構,以便解決擴充套件性的問題。

但是我們無法採取過去常用的通過檢修停機進行系統升級的方式來實現上述目標,因為世界各地諸多業務都依賴著我們平臺所提供的7 x 24 小時的可用性。因此,我們需要構建一個在引入新的軟體構件時不會引起服務癱瘓的架構。Amazon 傑出的工程師 Marvin Theimer 有一次開玩笑說,Amazon S3 這項服務的持續演進用開飛機來形容最為貼切。我們最開始開的是一架單引擎的賽斯納,一段時間後升級成一架波音 737,之後又換成了一支波音 747 小隊,而現在更像是由空中巨無霸空客 A380 組成的一支大型機隊。自始至終,我們一邊通過空中加油確保飛機的正常飛行,一邊在萬米高空上將 AWS 的使用者從一架舊飛機挪到另一架新的上面去。同時,AWS 的使用者對此毫不知情。

2. 預料到不可預料的情況

故障是註定的;隨著時間的流逝,一切終將歸於失敗:從路由器到硬碟,從作業系統到儲存單元損壞的TCP資料包,從瞬時誤差到永久失效,無論你用的是最高質量的硬體還是最低成本的元件,這都是理所當然的。

在服務規模變得很大之後,這個問題愈加地凸顯:舉例來說,當Amazon S3 服務處理萬億級儲存交易時,即使誤差概率極小的事件也將成為現實。在設計和構建階段,這些故障場景中的一部分事先會被考慮到,但更多的則是未知數。

因此,我們需要構建的是將故障視為自然發生的系統,即使我們並不知道故障是什麼。這個系統應該要做到,即使在“後院已經著火”的情況下依然可以繼續執行。重要的是在不需要引起整個系統宕機的情況下就能管理好受影響的區域性元件。對此,我們已經發展出一套控制故障發生影響範圍的基本技能,以期系統的總體健康狀態得以維持。

3. 提供基元而非框架

很快我們開始發現,使用者大都喜歡在 AWS 提供的服務上持續構建和演進自己的業務系統。在擺脫了傳統 IT 硬體和資料中心的束縛之後,他們開始以一種全新、有趣的、之前從未出現過的使用模式開發自己的系統。也正是因為如此,為了滿足使用者多樣的需求,我們的架構需要保持高度的靈活性。

關於這一點,最重要的機制之一就是,我們提供給使用者的是一系列基元和工具,使用者可以選擇他們喜歡的方式來使用AWS雲服務,而不是由我們提供一個大而全的統一的框架。這個機制給我們的使用者帶來了巨大的成功,甚至 AWS 自身後續的一些服務也用上了這套機制,就像我們的普通使用者一樣。

同樣重要的一點是,我們很難在使用者還沒開始使用一個服務之前,就準確預知到對使用者而言該服務需要優先考慮的問題。這也是為什麼所有的新服務最初都會以最小的功能集釋出,然後藉助使用者的反饋,再對該服務進行後續的擴充套件。

4. 自動化是關鍵

開發一個需要持續維護的軟體服務和開發一個最終交付給客戶的軟體有著巨大的差異,管理一個像 AWS 這種規模的系統,需要一種完全不同的觀念,才能確保滿足使用者對可用性、效能以及可擴充套件性的要求。

實現這個目標的一個主要的機制,就是避免容易產生誤差的手工操作,儘可能地將管理工作自動化。為此,我們需要構建一套可以控制主要功能的管理 API。在這方面,我們同時也對自己的使用者給予幫助。通過將應用分解成一個個獨立的模組,每個模組都有自己的管理 API,你可以很方便地定義自動化規則來進行大規模的維護。判斷自動化做的是不是到位,可以思考一下你是不是還需要使用SSH登陸到某臺伺服器進行運維操作?如果答案是 yes,說明你的自動化做得還不夠好。

5. API 定義要嚴謹,因為一旦上線就無法更改

我們在 Amazon 零售專案中已經接受過類似的教訓,但對於 AWS 這種以 API 為中心的服務,這個原則變得更加重要。一旦使用者開始用我們的 API 開發他們的應用和系統,我們就不可能再對這些 API 進行變更了。因為 API 的任何改動都會影響到使用者已有的專案。因此我們充分意識到,在 API 給到使用者之前,我們只有一次將 API 做對的機會。

6. 監控你的資源使用情況

當你為一項服務確定計費模式的時候,請務必確保你有一份關於該服務的資源成本和運營的資料。對於邊際成本很低的業務尤其如此。作為服務提供 商,AWS 需要對服務成本保持足夠的敏感,以便我們能清楚地認識到我們是否承擔得起某項服務,同時也能夠定位到一些可以通過提高運營效率而進一步降低成本的地方,並藉此降低服務價格,最終惠及使用者。

舉一個例子,早期的時候,我們對於 Amazon S3 服務所用到的資源成本並不是很清晰。我們當時假定,儲存和頻寬應該是我們首要考慮的收費點;後來運行了一段時間之後,我們才意識到,請求數量跟儲存與頻寬同 等重要。如果某個使用者有大量的小檔案要儲存,這種情況下,即使是百萬量級的請求,都不會佔用太多的儲存和頻寬資源。最終我們做了調整,將請求數量也納入了計費模型,以便 AWS 在收支上可以保證這項服務的可持續性。

7. 從頭開始建立安全機制

保護你的使用者,這一點的優先順序永遠都應該排在第一位,在 AWS 也不例外。不光要從運營的角度,還要從工具和機制的角度保證這一點。對此,我們也將繼續保持最高的支援與投入。我們很快就學到的一個經驗就是,為了實現安 全的服務,我們需要在服務設計的最初階段就抱有這種安全意識。安全團隊的任務不是在一項服務實現完了之後才開始安全檢查,相反地,安全團隊的工作應該和開 發團隊一道,貫穿於整個專案的生命週期,以確保專案的安全性。總之,涉及到安全的問題,沒有任何妥協的餘地。

8. 資料加密是頭等大事

資料加密,是保證使用者資料安全的重要機制。十年前,資料加密相關的工具和服務還不夠完善,直到 AWS 剛開始運營的最初幾年,我們才逐步積累了很多關於在服務中整合資料加密的最佳實踐。

Amazon S3 最初提供的,是伺服器端的加密機制。當我們在資料中心移除帶有使用者資料的磁碟的時候,這些資料就無法被訪問到了。但是後續上線的諸如 Amazon CloudHSM 和 Amazon Key 管理服務,均向用戶提供了自定義加密金鑰的機制,這樣一來,AWS 就不需要替使用者維護這些加密金鑰了。

現在,AWS 所有的新服務,在原型設計階段就會考慮到對資料加密的支援。比如,在 Amazon Redshift 服務中,每一個數據塊都通過一個隨機的金鑰進行加密,而這些隨機金鑰則由一個主金鑰進行加密儲存。使用者可以自定義這個主金鑰,這樣也就保證了只有使用者本人才能訪問這些機密資料或敏感資訊。

資料加密在我們的業務中的優先順序一直非常高。我們也會持續改進,讓資料加密機制用起來更簡單,最終,讓使用者能更好地保護自己的資料安全。

9. 網路的重要性

AWS的服務支撐了各種各樣的負載場景。從高併發處理到視訊轉碼,從高效能平行計算到海量的網路請求。這些不同的負載場景,對網路的要求也各不相同。

關於資料中心的設計和運營,AWS 開發了一套獨特的機制,這套機制提供了靈活的網路基礎設施,以便滿足任何使用者的不同負載場景的需求。在這個過程中,我們也認識到,為了讓使用者達成自身的目 標,我們必須開發自己的網路解決方案。這樣也能滿足我們自身的一些定製化的需求,比如在保證高安全性的同時,通過網路來隔離使用者的能力。

AWS 自主開發的這套軟硬體解決方案,也能給使用者帶來進一步的效能提升。關於這一點,有一個成功的例子,那就是虛擬機器之間的網路通訊。由於網路通訊是一個共享的資源,在使用 AWS 自己定製的解決方案之前,使用者時常會遇到網路擁堵的問題。最終,AWS 通過開發支援單個根 IO 虛擬化技術的 NIC,實現了給每個虛擬機器虛擬出自己的 NIC 的解決方案。這一改動成倍地降低了網路延遲,同時提升了高達十倍的網路效能。

10. 不設限,保持平臺的中立與開放

隨著時間的推移,AWS 團隊提供了越來越多的服務和功能,這也給我們的使用者創造了一個廣闊的開發平臺。但是 AWS 遠不止我們團隊開發的這些功能與服務,一些合作伙伴基於 AWS 提供的服務進一步擴大和豐富了整個系統的生態。比如,我們的合作伙伴 Stripe 提供的支付服務得以讓 Twilio 在 AWS 上支援電話業務。

很多使用者基於 AWS 本身的服務,開發出自己的產品,用於解決特定的垂直領域的問題。比如,飛利浦開發了用於健康資料管理的 Healthsuite 數字平臺;Ohpen 則基於 AWS 開發出自己的零售銀行平臺;Eagle Genomics 開發了自己的計算平臺用於基因處理等等,這樣的例子不勝列舉。AWS 並不會限制我們的合作伙伴,規定他們什麼可以做什麼不可以做。“不設限”的原則釋放了創新的動力,為意想不到的創新敞開了大門。

對於在接下來的十年裡, AWS 的團隊會學到哪些經驗教訓,我們的使用者又會創造出什麼樣的價值,我充滿了期待。

永遠記得,對 AWS 來說,這僅僅是一個新的開始。

相關推薦

AWS CTO過去經驗總結十條軍規

AWS(Amazon Web Service) 開始於 2006 年 3 月 14 日 Amazon S3 的釋出,距今已有十年時間。回首過去十年,我們在構建和運營 AWS 雲端計算服務中積累了大量的經驗教訓——這些服務不僅需要確保安全性、可用性和可擴充套

阿里架構師經驗分享,你還在迷茫嗎?

第一階段:三年 我認為三年對於程式設計師來說是第一個門檻,這個階段將會淘汰掉一批不適合寫程式碼的人。這一階段,我們走出校園,邁入社會,成為一名程式設計師,正式從書本上的內容邁向真正的企業級開發。我們知道如何團隊協作、如何使用專案管理工具、專案版本如何控制、我們寫的程式碼如何測試如何在線上執行等等

選結婚還是結束?這相愛的初戀男女陷入“精神異..

阿里巴巴官方釋出微博稱,連續幾日,一篇名為《阿里員工透露:馬總早移走 1200 億人民幣!網友:不愧是老師》的文章被有組織的進行惡意傳播。阿里巴巴官方釋出微博稱,連續幾日,一篇名為《阿里員工透露:馬總早移走 1200 億人民幣!網友:不愧是老師》的文章被有組織的進行惡意傳播。 對此,阿里表示,該文完全捏造事

一個老程式設計師生涯總結(轉載)

今年是我大學畢業滿10年的日子,也是我投身IT技術的第10年。一直想能對過去的經歷做些回顧與反思,以更      好地走向未來,但總沒有筆。剛好CSDN舉辦“講述程式設計師的故事”徵文,這件事成了一個引子,我終於趁著暑期有時間,敲了一天鍵盤,便有了這篇人生自述。       10年對於一個人

工作三經驗總結

一、職業規劃         今年年初,職業規劃方面愈發的清晰,將畢業時制定的前10年職業規劃(前三步),拓展到了20年(後三步);       

大學四總結

去年,也就是2017,我順利從一個普通二本的計算機學院畢業,這是一篇遲來的總結。 因為一些原因,可能自己沒有能抽出時間和精力來寫這麼一篇文章,所以一直拖到了現在。儘管已經過去了這麼久,還是該對自己人生中很珍貴的四年青春做一個全面的認識,放下一些東西才能更好開始,也正好元旦假

一位程式設計師的工作總結,值得每位網際網路人看

---------2018/03/04更新--------- 特地搜尋了一番,找了最遠的記錄是在這裡。 https://www.cnblogs.com/jirigala/archive/2009/08/03/1537874.html#!comments ---------

工作兩經驗總結

        時至2017年終,畢業2年,實際開發經驗4年+。早已沒有了職場小鮮肉的感覺,取而代之的是一種奔三的成熟感。 一、年度任務計劃完成情況         1、娶妻成家、搖到了京號買了第一輛坐騎、有了微薄的積蓄         2、對於工作中常用的一些技術,看了相

畢業工作總結

        轉眼間,研究生畢業已經10年了,從2009年到2019年,整整10年。今天是2020年2月8日,正月十五元宵節。2020年,是本命年,一開始就發生了很多事情,武漢發生新型冠狀病毒肺炎,科比直升機墜毀去世。到今天為止,全國共確診新型冠狀病毒肺炎病例3177

Java架構經驗總結:這幾點尤為關鍵!

驀然回首自己做開發已經十年了,這十年中我獲得了很多,技術能力、培訓、出國、大公司的經歷,還有很多很好的朋友。 但再仔細一想,這十年中我至少浪費了五年時間,這五年可以足夠讓自己成長為一個優秀的程式設計師,可惜我錯過了,我用這五年時間和很多程式設計師一樣在困惑和迷茫中找不到出路

JAVA架構經驗總結:這幾點尤為關鍵!

驀然回首自己做開發已經十年了,這十年中我獲得了很多,技術能力、培訓、出國、大公司的經歷,還有很多很好的朋友。但再仔細一想,這十年中我至少浪費了五年時間,這五年可以足夠讓自己成長為一個優秀的程式設計師,可惜我錯過了,我用這五年時間和很多程式設計師一樣在困惑和迷茫中找不到出路!

阿里Java架構經驗總結,這幾點尤為重要!

你有沒有靜下心來思考過:同樣是做了x年Java開發,為什麼你的技術比別人差很多?為什麼別人每月28K你卻只有10K? 其實技術水平的高低和個人智商關係不大(畢竟能做Java程式設計開發大家都不會差),主要和勤奮程度、提升方法有關。 勤奮程度不必多說,全靠自我監督和自制力。

乾貨分享:大廠資深程式設計師的開發經驗總結

本文由騰訊雲加社群整理和釋出,原文連結:cloud.tencent.com/developer/article/1004735,內容有刪減和改動。 1、引言 在網際網路一線做了十年的程式開發,經歷了網易、百度、騰訊研究院、MIG 等幾個地方,陸續做過 3D 遊戲、2D 頁遊、瀏覽器、移動端翻

騰訊Python開發經驗寫的Python入門筆記,是否你有幫助?

啟動python 從IDLE啟動Python IDLE是一個Python Shell。Shell的意思是“外殼”,是一個通過 鍵入文字與程式互動的途徑 (類似windows中的cmd。Visual Studio 也是一種Shell) >>>是指Python

做開發,我總結出了這些開發經驗

裏的 由於 翻譯 一次 吃飯 局部變量 單個 含義 .... 本文由雲+社區發表,原文轉載地址:https://www.cnblogs.com/qcloud1001/p/10218876.html 在一線做了十年的開發,經歷了網易、百度、騰訊研究院、MIG 等

程式設計經驗總結,三點技巧幫你提升程式碼能力!

大家好,今天和大家聊一個老生常談的的話題,作為程式設計師,我們怎麼提升我們的程式碼能力? 在回答這個問題之前,我們需要先給程式碼能力下一個定義,搞清楚究竟什麼是程式碼能力。只有找對了路才方便發力,很多同學對這個問題其實是不夠清楚的。往往會覺得程式碼能力就是演算法能力,就是去刷LeetCode或者是演算法題。還

Java後端程序員1工作經驗總結

互聯 常用語 耦合 請求 fab 單例 intercept spool accept java後端1年經驗和技術總結(1) 1.引言   畢業已經一年有余,這一年裏特別感謝技術管理人員的器重,以及同事的幫忙,學到了不少東西。這一年裏走過一些彎路,也碰到一些難題,也受到過做為

磨一劍,水產寶與升鮮寶即將橫空出世,將正面與市面上的商業軟件競爭。用小米加步槍洋槍洋炮。升鮮寶將為杭州生鮮配送企業服務,8的生鮮電商行業沈澱。

不一致 img 管控 賺錢 很難 blog 生鮮電商 不知道 同時 一直堅守著.net開發陣營,一直致力於生鮮配送行業的信息化解決方案。用程序員本來的堅持,在這個行業中,默默的承受著,不斷優化流程。不斷的實踐。 生鮮配送企業的

基於Metronic的Bootstrap開發框架經驗總結(18)-- 在代碼生成工具Database2Sharp中集成Bootstrap-table插件的分頁及排序支持

關註 基礎 表頭 數據 database 一定的 處理 tree的使用 適合 在我們開發系統界面,包括Web和Winform的都一樣,主要的界面就是列表展示主界面,編輯查看界面,以及一些輔助性的如導入界面,選擇界面等,其中列表展示主界面是綜合性的數據展示界面,一般往往需要對

SEO從業五,軟文編寫經驗總結

軟文從事SEO工作五年,對於很多SEO的技術也有一些自己的經驗和想法,在這裏想和大家交流一下關於SEO中的主要一塊——軟文編寫的經驗和總結。一、最關鍵:蜘蛛喜歡收錄並且有排名蜘蛛喜歡的,用戶不一定喜歡;用戶喜歡的,蜘蛛一定喜歡二、基本原則內容原創度+關鍵詞相關性+關鍵詞布局合理+內容通順規範三、標題編輯要點主