Amazon的CEO Jeff Bezos前幾天在致股東的信中表示,亞馬遜云服務(wù)AWS目前已經(jīng)有超過100萬的用戶,2016年的營收也將突破100億美元。Amazon的AWS服務(wù)是在2006年3月推出,距今已有整整10年的時間了。AWS最早推出的云服務(wù)是簡單儲存服務(wù)Simple Storage Service(S3),后來又陸續(xù)推出了Amazon彈性計(jì)算網(wǎng)云Elastic Compute Cloud (EC2)、亞馬遜簡單數(shù)據(jù)庫(Amazon SimpleDB)、亞馬遜簡單隊(duì)列服務(wù)(Amazon Simple Queue Service)以及Amazon CloudFront等云服務(wù)。目前,成千上萬的創(chuàng)業(yè)公司在AWS的數(shù)據(jù)中心和服務(wù)基礎(chǔ)上構(gòu)建了自己的在線業(yè)務(wù)。不僅大量小公司依賴于Amazon AWS的云計(jì)算服務(wù),很多諸如Adobe、GE、Netflix和Pinterest這樣的大公司也都在使用Amazon的AWS服務(wù)。
在Amazon的AWS服務(wù)上線10周年之際,推動AWS服務(wù)發(fā)展的核心人物、Amazon的CTO Werner Vogels在本文中專門總結(jié)和分享了他在AWS上線運(yùn)營10年過程中的學(xué)到的10條經(jīng)驗(yàn),希望對大家有所啟發(fā)和借鑒。
1.從第一天開始,就要打造一個可以持續(xù)演化的系統(tǒng)
從第一天開始,我們就非常清楚地認(rèn)識到,我們所開發(fā)的這套軟件是一個一定需要持續(xù)改進(jìn)的軟件,現(xiàn)在開發(fā)的軟件可能并不是一年以后運(yùn)行的軟件。我們當(dāng)時是這樣預(yù)期的,隨著數(shù)量級的增加,我們就需要去重新檢視和修改我們已有的架構(gòu),確保能夠解決擴(kuò)展性的問題。
然而,由于全世界不同地方的很多公司都依賴著我們平臺所提供的7x24小時全天候不間斷的服務(wù),因此我們無法采用過去通常采用的通過維護(hù)停機(jī)、進(jìn)行系統(tǒng)升級的方式來達(dá)到這一目標(biāo)。因此,我們從開始就需要打造一個在引入新的軟件構(gòu)件時不會迫使服務(wù)暫停的架構(gòu)。Amazon的一位非常出色的工程師Marvin Theimer有一次曾開玩笑說,Amazon S3服務(wù)的持續(xù)演進(jìn)和下面這個場景非常像:我們最開始開的是一架單引擎的賽斯納飛機(jī),在開了一段時間后升級成了一架波音737飛機(jī),之后又換成了一支波音747飛機(jī)編隊(duì),我們現(xiàn)在開的則更像是由空中巨無霸空客A380組成的一支大型飛機(jī)編隊(duì)。從最開始到現(xiàn)在,我們都是通過空中加油的方式確保飛機(jī)的正常飛行的,與此同時,我們直接將AWS的用戶在空中從一架舊飛機(jī)上轉(zhuǎn)移到另一架新飛機(jī)上面,而AWS用戶在這整個過程中甚至沒有意識到他們被悄悄地轉(zhuǎn)移到另一架更先進(jìn)的飛機(jī)里了。
2.為意料之外的失敗和問題做好充分準(zhǔn)備
失效是難以避免的的,隨著時間的推移,任何東西都有可能會出現(xiàn)這樣那樣的問題:從路由器到硬盤,從操作系統(tǒng)到存儲單元損壞的TCP數(shù)據(jù)包,從瞬間誤差到永久失效等等。不管是使用高質(zhì)量的硬件還是低成本的組件,這些問題都將無可避免地出現(xiàn)。
隨著服務(wù)規(guī)模的擴(kuò)大,懂得這個問題將變得越來越重要:舉個例子,當(dāng)AmazonS3的服務(wù)處理數(shù)億的存儲交易時,即使是可能性最小的錯誤也會變成現(xiàn)實(shí)。這些失敗和出問題的場景中的一部分是可以被事先預(yù)想的,然而很多問題在設(shè)計(jì)和構(gòu)建過程中是無法被事先考慮到的。
所以說,我們需要打造一個將失敗和故障視為自然會發(fā)生的系統(tǒng),即使我們不知道故障和問題可能會是什么。這個系統(tǒng)需要在即使“屋里已經(jīng)失火”的情況下依然能夠維持正常運(yùn)行的狀態(tài)。其中很重要的一點(diǎn)是,要能夠在不讓整個系統(tǒng)宕機(jī)的情況下就能處理好受到影響的組件。我們現(xiàn)在已經(jīng)掌握了一套能夠控制故障發(fā)生后所波及范圍的基本技能,這樣一旦出現(xiàn)任何問題,系統(tǒng)的整體健康狀況是可以繼續(xù)維持的,不會出現(xiàn)服務(wù)停機(jī)的狀況。
3.要提供基元,而非僅提供一個大而全的統(tǒng)一框架
很快,我們就發(fā)現(xiàn)很多用戶喜歡在AWS提供的服務(wù)上持續(xù)構(gòu)建自己的業(yè)務(wù)的。在離開了傳統(tǒng)舊世界里備受束縛的IT硬件和數(shù)據(jù)中心之后,他們開始以一種全新有趣的使用方式來開發(fā)自己的系統(tǒng)。正因?yàn)槿绱,我們就需要做到足夠地靈活性去滿足用戶各種不同的需求。
我們提供的最重要的機(jī)制之一是為用戶提供一系列基元功能和工具,他們可以選擇自己喜歡的方式來使用AWS服務(wù),而不是提供一個強(qiáng)迫用戶必須使用的包羅一切的大而全的統(tǒng)一框架。這個方法讓我們的用戶獲得了巨大的成功,甚至AWS后來提供的的很多服務(wù)都使用了同樣類似的服務(wù)機(jī)制,而這個服務(wù)機(jī)制是我們的很多用戶都已經(jīng)習(xí)慣了的。
此外,在用戶真正開始使用我們的服務(wù)開發(fā)產(chǎn)品和服務(wù)之前,我們很難去預(yù)測對用戶自己的優(yōu)先級到底是什么,意識到這一點(diǎn)非常重要。這也是為什么我們后來推出新服務(wù)最開始只配有最小的功能集,這樣一來,我們可以通過用戶的反饋來對擴(kuò)展我們服務(wù)的新功能,以更好地滿足用戶的需求。
4.自動化是關(guān)鍵
開發(fā)一個需要去檢測維護(hù)的軟件服務(wù)和開發(fā)一個最終交付給客戶的軟件是有著非常大的區(qū)別的。為了滿足用戶對產(chǎn)品可靠性、性能以及可擴(kuò)展性等方面的期待和需求,管理AWS這樣的規(guī);到y(tǒng)是需要一種不同的心態(tài)和方法的。
要想實(shí)現(xiàn)上述目標(biāo),一個關(guān)鍵的機(jī)制就是盡可能地將管理工作全部自動化,這樣就可以避免手工操作可能帶來的任何容易產(chǎn)生的誤差。為了實(shí)現(xiàn)這一目標(biāo),我們需要打造一套可以控制操作中各項(xiàng)主要功能的管理API。此外,AWS也能夠幫助用戶同樣實(shí)現(xiàn)這個目標(biāo)。通過把你的應(yīng)用分解成一個個基本的構(gòu)建模塊,每個模塊都有自己的管理API,這樣你就可以利用自動化規(guī)則進(jìn)行大規(guī)模可靠、可預(yù)測的的運(yùn)營。自動化工作究竟做得如何,有個很簡單的檢驗(yàn)方法就是看你是不是還需要SSH登陸到服務(wù)器進(jìn)行操作,如果需要的話,說明你的自動化的工作還有待加強(qiáng)。
5.API是永恒的,一旦上線便無法變更
其實(shí)之前在Amazon零售業(yè)務(wù)中已經(jīng)吸取了類似的經(jīng)驗(yàn)和教訓(xùn)了。然而對于AWS這種以API為中心的服務(wù)而言,“API是永恒的”這個原則顯然就變得更為重要了。一旦用戶開始使用我們的API開發(fā)他們的應(yīng)用和系統(tǒng)后,我們就不可能再去對那些這些API做任何變動了,因?yàn)樽儎覣PI會嚴(yán)重影響到用戶的業(yè)務(wù)。我們已經(jīng)意識到,設(shè)計(jì)API是一個非常重要的任務(wù),必須要一次性成功。
6.關(guān)注和了解自己的資源使用情況
在你為一項(xiàng)服務(wù)制定合適的計(jì)費(fèi)模式的時候,一定要確保你有一份關(guān)于這項(xiàng)服務(wù)的各項(xiàng)成本和運(yùn)營費(fèi)用的詳細(xì)數(shù)據(jù),當(dāng)你運(yùn)營一個業(yè)務(wù)量大、利潤率低的業(yè)務(wù)時更需要如此。AWS作為一個服務(wù)提供商,我們必須對服務(wù)成本非常了如指掌,這樣我們就能清楚地了解基于這一成本,我們是否能夠承擔(dān)得起為用戶提供這項(xiàng)服務(wù)。此外,我們還可以借此找到那些可以通過提高運(yùn)營效率而降低成本的一些方法,并通過這種方法進(jìn)一步降低服務(wù)價格,從而讓用戶從中受益。
舉例說明一下,在我們發(fā)展早期,我們一開始對Amazon S3服務(wù)所需要的資源成本其實(shí)并不是非常清楚。我們當(dāng)時是這樣設(shè)想的,存儲和寬帶成本是我們首先需要考慮的收費(fèi)點(diǎn)。不過后來在Amazon S3運(yùn)行了一段時間之后我們開始意識到,請求數(shù)量其實(shí)和存儲與帶寬是一樣重要的。如果有用戶有大量的小文件,在這種情況下,即使這個用戶請求上百萬次,其實(shí)都不會占用太多的存儲和帶寬資源,占最多資源的其實(shí)是請求數(shù)量。因此我們必須對收費(fèi)模型進(jìn)行調(diào)整,將請求數(shù)量也放進(jìn)了資源成本中去,這樣才能確保AWS有一個可以持續(xù)發(fā)展的業(yè)務(wù)。
7.從一開始就要將安全問題考慮進(jìn)去
保護(hù)用戶的安全是一個你永遠(yuǎn)都要排在第一位的優(yōu)先級問題,在AWS當(dāng)然也是這樣,這無論從運(yùn)營的角度來看,還是從工具和機(jī)制的角度來看都是如此。因此,我們在安全方面的投入將一直是我們的第一大投入。
我們很快就學(xué)會的一個方法是,為了打造更加安全的服務(wù),這就要求我們在服務(wù)設(shè)計(jì)的最初階段就將安全問題考慮進(jìn)去。安全團(tuán)隊(duì)的工作不是在一項(xiàng)服務(wù)開發(fā)完成之后再去檢查驗(yàn)證它的安全性問題到底如何。安全團(tuán)隊(duì)?wèi)?yīng)該在開發(fā)工作開始后的第一天就參與到產(chǎn)品開發(fā)中去,確保安全問題在剛開始開發(fā)時就被考慮進(jìn)去,而且貫穿于整個項(xiàng)目的開發(fā)的全過程。在任何涉及安全的問題時,你都不能做任何妥協(xié)。
8.數(shù)據(jù)加密太重要
數(shù)據(jù)加密是讓用戶確保他們對誰能獲取自己的數(shù)據(jù)擁有絕對控制權(quán)的一個關(guān)鍵機(jī)制。在10年以前,用于數(shù)據(jù)加密的相關(guān)的工具和服務(wù)的使用體驗(yàn)非常差,直到AWS開始運(yùn)營后的最初幾年里,我們慢慢知道了如何最好地將數(shù)據(jù)加密功能整合進(jìn)我們的服務(wù)里。
Amazon S3最初提供的是服務(wù)器端的加密。如果你想檢查我們數(shù)據(jù)中心的任何磁盤,你是無法訪問到任何數(shù)據(jù)的。后來,我們陸續(xù)推出了Amazon CloudHSM 和Amazon Key Management Service,這些服務(wù)允許用戶利用自己的加密秘鑰對數(shù)據(jù)進(jìn)行加密,這樣就不需要AWS再去幫助用戶去管理他們的加密密鑰了。
如今,在AWS所有新推出的服務(wù)中,對數(shù)據(jù)加密的支持已經(jīng)在服務(wù)的原型設(shè)計(jì)階段就被整合進(jìn)去了。例如在Amazon Redshift這項(xiàng)服務(wù)里,每一個數(shù)據(jù)模塊都是通過一個隨機(jī)的密鑰進(jìn)行加密的,而所有這些隨機(jī)密鑰最后又都是由一個主密鑰進(jìn)行加密的。用戶是可以自己自主定義這個主密鑰的,這樣就保證了用戶自己是唯一能夠加密和訪問這些關(guān)鍵業(yè)務(wù)數(shù)據(jù)或個人隱私信息的人。
數(shù)據(jù)加密在我們的業(yè)務(wù)中一直都是一個優(yōu)先級比較高的工作。我們會持續(xù)不斷地對數(shù)據(jù)加密改進(jìn),讓數(shù)據(jù)加密能夠更方便地使用,這樣用戶能更好地保護(hù)自己和自己的客戶。
9.網(wǎng)絡(luò)的重要性
AWS業(yè)務(wù)已經(jīng)支撐了很多不同種類的負(fù)載,從大容量事務(wù)處理到大規(guī)模視頻轉(zhuǎn)碼,從高性能并行計(jì)算到巨大的網(wǎng)站流量等等,所有這些負(fù)載對網(wǎng)絡(luò)都有非常獨(dú)特的需求。
在數(shù)據(jù)中心布局和運(yùn)維的創(chuàng)新方面,AWS已經(jīng)開發(fā)出了一種獨(dú)特的新技術(shù),這讓我們能夠提供更加靈活的網(wǎng)絡(luò)基礎(chǔ)設(shè)施去滿足不同用戶的不同負(fù)載的需求。我們在這個過程總學(xué)習(xí)到,為了能夠讓用戶實(shí)現(xiàn)自身的目標(biāo),我們必須開發(fā)自己的網(wǎng)絡(luò)硬件解決方案。這也讓我們能夠滿足我們一些定制化的需求,例如,為了確保最高等級的安全性,我們可以在網(wǎng)絡(luò)上將不同的用戶彼此隔離開來。
另一個AWS通過自己設(shè)計(jì)的網(wǎng)絡(luò)硬件和軟件解決方案去進(jìn)一步幫助用戶改善性能的例子就是解決虛擬機(jī)之間的網(wǎng)絡(luò)訪問。因?yàn)榫W(wǎng)絡(luò)訪問是一個共享的資源,用戶之前經(jīng)常會遇到網(wǎng)路擁堵的問題。AWS后來開發(fā)了能夠支持單根IO虛擬化技術(shù)的NIC,它能夠讓我們給每個虛擬機(jī)虛擬出自己的NIC,這個做法有效降低了網(wǎng)絡(luò)延遲兩倍以上。
10.不設(shè)守門人
為了給用戶提供一個更加廣闊和深度的服務(wù)平臺,AWS團(tuán)隊(duì)陸續(xù)開發(fā)和提供了越來越多的服務(wù)和功能。不過AWS遠(yuǎn)不限于我們目前已經(jīng)提供過的這些功能和服務(wù),我們的很多合作伙伴基于AWS提供的服務(wù)進(jìn)一步擴(kuò)大和豐富了整個AWS生態(tài)系統(tǒng)。
比如,我們的合作伙伴Stripe利用我們的服務(wù)提供的支付服務(wù),以及Twilio利用AWS服務(wù)提供的網(wǎng)絡(luò)電話業(yè)務(wù)等。我們的很多用戶基于AWS服務(wù)開發(fā)出自己的平臺,以解決各自垂直領(lǐng)域的一些問題。例如飛利浦開發(fā)了用于健康數(shù)據(jù)管理的數(shù)字平臺Healthsuite Digital Platform,Ohpen在AWS基礎(chǔ)上開發(fā)了一個零售銀行平臺,Eagle Genomics開發(fā)了基因處理平臺,這樣的例子還有很多。
在AWS平臺上,我們是不設(shè)守門人(gatekeeper)的,因此我們不會告訴我們的合作伙伴他們在AWS平臺上什么可以做、什么不可以做。“沒有守門人”這一點(diǎn)能夠激發(fā)更多、更好地創(chuàng)新。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務(wù)領(lǐng)域、行業(yè)應(yīng)用,蘊(yùn)涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務(wù)管理理念,功能涉及供應(yīng)鏈、成本、制造、CRM、HR等眾多業(yè)務(wù)領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設(shè)首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.ezxoed.cn/
本文標(biāo)題:我在打造AWS的10年里學(xué)到的10條經(jīng)驗(yàn)