解析亞馬遜架構(gòu)技術(shù)!
Amazon的體系結(jié)構(gòu)經(jīng)歷了巨大的變化,從最初的兩層體系結(jié)構(gòu)到提供許多不同應(yīng)用的分布式分散服務(wù)平臺(tái)。
起初,只有一個(gè)應(yīng)用程序與后端交互,這是用C++完成的。
體系結(jié)構(gòu)將隨著時(shí)間的推移而發(fā)展。
多年來,亞馬遜一直將其容量擴(kuò)展重點(diǎn)放在后端數(shù)據(jù)庫(kù)上,試圖使其容納更多商品數(shù)據(jù)、更多客戶數(shù)據(jù)和更多訂單數(shù)據(jù),并使其支持多個(gè)國(guó)際站點(diǎn)。
到2001年,前端應(yīng)用程序顯然無法再努力增加容量。
數(shù)據(jù)庫(kù)分為許多小部分。
圍繞每個(gè)部件創(chuàng)建一個(gè)服務(wù)接口,該接口是訪問數(shù)據(jù)的唯一方式。
數(shù)據(jù)庫(kù)已逐漸演變?yōu)楣蚕碣Y源,因此很難在所有業(yè)務(wù)的基礎(chǔ)上增加容量。
前端和后端處理的發(fā)展受到很大限制,因?yàn)樗鼈儽惶嗖煌膱F(tuán)隊(duì)和流程共享。
他們的體系結(jié)構(gòu)是松散耦合的,并圍繞服務(wù)構(gòu)建。
面向服務(wù)的體系結(jié)構(gòu)提供的隔離使他們能夠快速、獨(dú)立地完成許多軟件組件的開發(fā)。
逐漸地,Amazon擁有數(shù)百個(gè)服務(wù)和多個(gè)應(yīng)用程序服務(wù)器來聚合服務(wù)中的信息。
生成http://Amazon.com 站點(diǎn)頁(yè)面的應(yīng)用程序位于這樣的應(yīng)用程序服務(wù)器上。
對(duì)于提供web服務(wù)接口、客戶服務(wù)應(yīng)用程序和賣方接口的應(yīng)用程序也是如此。
許多第三方技術(shù)難以適應(yīng)亞馬遜等網(wǎng)站的規(guī)模,尤其是通信基礎(chǔ)設(shè)施技術(shù)。
它們?cè)谝欢ǚ秶鷥?nèi)工作良好,但如果范圍擴(kuò)大,它們將不適用。
因此,亞馬遜必須開發(fā)自己的基本技術(shù)。
不要“掛”在技術(shù)上。
Amazon在某些地方使用JBoss/Java,但它只使用服務(wù)器,沒有充分利用J2EE中涉及的技術(shù)。
用C++開發(fā)的程序用于處理請(qǐng)求。
per/Mason開發(fā)的程序用于生成頁(yè)面中的內(nèi)容。
Amazon不喜歡中間件技術(shù),因?yàn)樗雌饋砀褚粋€(gè)框架,而不是一個(gè)工具。
如果使用中間件,它將受到該中間件所采用的軟件模式的困擾。
你只能使用他們的軟件。
如果你想使用不同的軟件,這幾乎是不可能的。
你被困住了!消息中間件、數(shù)據(jù)持久層中間件、Ajax等經(jīng)常出現(xiàn)。
它們都太復(fù)雜了。
如果中間件可以以更小的組件的形式提供,并且更像是一個(gè)工具而不是一個(gè)框架,那么它可能對(duì)我們更有吸引力。
與Soap相關(guān)的web解決方案似乎希望再次解決分布式系統(tǒng)的所有問題。
Amazon同時(shí)提供soap和RESTWeb服務(wù)。
大約30%的用戶將soap用作web服務(wù)。
它們似乎是Java和Java。
Net用戶,并使用WSD生成遠(yuǎn)程對(duì)象接口。
大約70%的用戶使用rest。
它們似乎是PHP和每個(gè)用戶。
無論是使用soap還是rest,開發(fā)人員都可以獲得訪問Amazon的對(duì)象接口。
開發(fā)人員希望完成這項(xiàng)工作,而不必?fù)?dān)心網(wǎng)絡(luò)電纜上傳輸?shù)膬?nèi)容。
亞馬遜希望圍繞他們的服務(wù)建立一個(gè)開放的社區(qū)。
他們選擇web服務(wù)是因?yàn)樗暮?jiǎn)單性。
事實(shí)上,它是一個(gè)面向服務(wù)的體系結(jié)構(gòu)。
簡(jiǎn)而言之,只能通過接口訪問所需的數(shù)據(jù)。
這些接口由WSD描述,但它們采用自己的封裝和傳輸機(jī)制。
架構(gòu)(Architecture)開發(fā)團(tuán)隊(duì)是小型團(tuán)隊(duì),圍繞不同的服務(wù)組織。
在亞馬遜,服務(wù)是獨(dú)立的功能交付單元。
這就是亞馬遜組織內(nèi)部團(tuán)隊(duì)的方式。
如果你有一個(gè)新的商業(yè)計(jì)劃書或者想解決一個(gè)問題,你可以組織一個(gè)團(tuán)隊(duì)。
由于溝通成本,每個(gè)團(tuán)隊(duì)的人數(shù)限制為8~10人。
他們被稱為兩支比薩餅隊(duì)。
因?yàn)橛辛藘蓚€(gè)比薩餅,團(tuán)隊(duì)中的每個(gè)人都可以吃飽。
團(tuán)隊(duì)規(guī)模很小。
他們被授權(quán)以任何他們喜歡的方式解決問題或改進(jìn)服務(wù)。
例如,他們創(chuàng)建了一個(gè)團(tuán)隊(duì),其職能是在書中查找獨(dú)特的單詞和短語(yǔ)。
團(tuán)隊(duì)已經(jīng)為該功能創(chuàng)建了一個(gè)單獨(dú)的服務(wù)接口,并且有權(quán)執(zhí)行他們認(rèn)為需要執(zhí)行的任何操作。
部署他們創(chuàng)建了一個(gè)特殊的基礎(chǔ)設(shè)施來管理依賴關(guān)系和部署服務(wù)。
目標(biāo)是所有正確的服務(wù)都可以部署在一臺(tái)主機(jī)上。
所有應(yīng)用程序代碼、監(jiān)控機(jī)制、許可機(jī)制等應(yīng)位于一個(gè)“主機(jī)”中。
每個(gè)人都有自己的系統(tǒng)來解決這些問題。
部署過程的輸出是一個(gè)虛擬機(jī),可以使用EC2運(yùn)行它們。
為了驗(yàn)證新服務(wù)的效果,值得從客戶的角度來審視服務(wù)。
從客戶的角度來看服務(wù)為了驗(yàn)證新服務(wù)的效果,值得從客戶的角度來審視服務(wù)。
從客戶的角度看服務(wù),關(guān)注希望向用戶提供的價(jià)值。
迫使開發(fā)人員關(guān)注交付給客戶的價(jià)值,而不是首先考慮如何構(gòu)建技術(shù),然后再考慮如何使用技術(shù)。
從用戶將看到的簡(jiǎn)要功能開始,然后從客戶的角度檢查您構(gòu)建的服務(wù)是否有價(jià)值。
以最小化的設(shè)計(jì)結(jié)束設(shè)計(jì)過程。
如果您想構(gòu)建一個(gè)大型分布式系統(tǒng),簡(jiǎn)單性是關(guān)鍵。
對(duì)于大規(guī)??蓴U(kuò)展系統(tǒng),狀態(tài)管理是核心問題。
在內(nèi)部,它們可以提供無限的存儲(chǔ)空間。
并非所有操作都是有狀態(tài)的。
結(jié)束步驟是有狀態(tài)的。
通過分析最近單擊的頁(yè)面的會(huì)話ID,此服務(wù)可以向用戶提供推薦產(chǎn)品和建議。
它們跟蹤并存儲(chǔ)所有數(shù)據(jù),因此維護(hù)狀態(tài)不是問題。
有一些單獨(dú)的狀態(tài)需要為會(huì)話維護(hù)。
所提供的服務(wù)將始終保留信息,因此您只需要使用這些服務(wù)。
Eric brewers的cap理論——或系統(tǒng)的三個(gè)屬性系統(tǒng)的三個(gè)屬性:一致性、可用性、網(wǎng)絡(luò)分區(qū)容差。
對(duì)于任何共享數(shù)據(jù)的系統(tǒng),它至少具有這三個(gè)屬性中的兩個(gè)。
網(wǎng)絡(luò)分區(qū)容差:將節(jié)點(diǎn)劃分為小組。
它們可以看到其他組,但無法看到所有其他節(jié)點(diǎn)。
一致性:寫入一個(gè)值,然后讀取它。
得到的返回值應(yīng)該與您寫入的值相同。
分區(qū)系統(tǒng)中并非如此。
可用性:不總是可讀寫的。
系統(tǒng)可能會(huì)告訴您無法寫入數(shù)據(jù),因?yàn)槟枰3謹(jǐn)?shù)據(jù)一致性。
對(duì)于可伸縮性,必須對(duì)系統(tǒng)進(jìn)行分區(qū),因此對(duì)于特定的系統(tǒng),您必須在高一致性或高可用性之間進(jìn)行選擇。
在可用性和一致性之間找到正確的重疊。
根據(jù)服務(wù)的需要選擇特定的實(shí)現(xiàn)方法。
對(duì)于結(jié)賬過程,您總是希望在客戶的購(gòu)物車中放置更多的商品,因?yàn)檫@可以產(chǎn)生收入。
在這種情況下,您需要選擇高可用性。
錯(cuò)誤是對(duì)客戶隱藏的,稍后將進(jìn)行分析。
當(dāng)客戶提交訂單時(shí),我們應(yīng)該更加注重保持高一致性。
因?yàn)橛袔追N不同的服務(wù)——信用卡服務(wù)、分銷服務(wù)、報(bào)告功能等——可以同時(shí)訪問這些數(shù)據(jù)。
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。