揭秘eBay架構與存儲
eBayd Web領(lǐng)域樹(shù)立了一個(gè)典范。從一系列的數據當中都可以看到,這樣一個(gè)超大規模的網(wǎng)站,其數據和計算量對技術(shù)的要求非常之高。為了能保證全球兩億多用戶(hù)的正常訪(fǎng)問(wèn),除了要有優(yōu)良的技術(shù)架構作為支撐外,每天產(chǎn)生的海量數據也需要精心保存。作何一個(gè)開(kāi)發(fā)人員和信息管理人員面對這樣艱巨的任務(wù)都如履薄冰。為此本刊組織了兩篇eBay的技術(shù)文章,以饗讀者。
擴展:不僅僅關(guān)于架構
文/Frank Sommers 譯者/靳黎明
在2006 SD論壇中,兩位eBay的架構師發(fā)表演講,總體闡述了兩個(gè)主題:eBay的架構是如何處理每天十億次的頁(yè)面訪(fǎng)問(wèn)請求,以及該架構是如何從當初的Perl腳本演化到目前的運行在8個(gè)數據中心的1萬(wàn)5千個(gè)應用程序例。該演講所得出一個(gè)結論就是,擴展僅僅是架構中的問(wèn)題。
eBay系統架構的演化
在2006 SD論壇中,Randy Shoup和Dan Pritchett都結合eBay發(fā)表了關(guān)于eBay架構的演講。Pritchett隨后在他的Blog中發(fā)布了一個(gè)演講幻燈片——標題為eBay的架構。
意料之中,他在演講中提到了一些令人驚嘆的統計數字,具體如下:
l 2億1千2百萬(wàn)注冊用戶(hù)
l 每天10億次的訪(fǎng)問(wèn)量
l 每天260億次的SQL查詢(xún)和更新
l 超過(guò)2千萬(wàn)億的數據量
l 每秒價(jià)值1590美元的貨物交易
l 超過(guò)10億張的圖片存儲
l 7種不同的語(yǔ)言
l 99.94%的系統可用性
與開(kāi)發(fā)過(guò)程和特性相關(guān)的其他統計數據,如下:
l 每季度網(wǎng)站新增300多項新特性
l 每?jì)芍馨l(fā)布超過(guò)十萬(wàn)行的代碼
根據他的演講,盡管eBay的架構已經(jīng)達到了如此大的規模,但是,eBay期望能夠在短短幾年內實(shí)現它的目標——處理通信量高達十倍的額外增長(cháng)。另外一個(gè)架構目標是,能夠處理峰值載荷,并且在非常負載或者系統癱瘓的情況下能夠使組件安全地停止工作而不致受損。
根據演講的內容,目前,eBay的系統架構正朝著(zhù)第四個(gè)版本努力。當然,演講中最吸引人的技術(shù)部分也主要是關(guān)于這個(gè)版本的各種技術(shù)信息,例如,演講者所講述的是擴展應用程序層的第一步:摒棄大部分的J2EE特性。取而代之的是,他們注意到“eBay采用Servlets 和一個(gè)重寫(xiě)的連接池進(jìn)行擴展?!?/font>
根據演講的介紹,關(guān)于應用程序層擴展的另一吸引人的方面是,在應用程序層完全不保存會(huì )話(huà)狀態(tài)信息。取而代之的是,“在cookie或者scratch數據庫中保存過(guò)渡狀態(tài)?!睘榱藢?shí)現數據存取,eBay使用內部開(kāi)發(fā)的Java O/R映射解決方案。
在擴展該網(wǎng)站的搜索方面,演講者注意到一個(gè)與眾不同的需求,而這是Google這樣的通用Web搜索引擎所不會(huì )遇到的問(wèn)題,即:eBay的用戶(hù)期望能夠在搜索結果中立即查詢(xún)出他們對數據所做出的變動(dòng)。同樣地,拍賣(mài)者確切地知道他們所期望的搜索結果——舉個(gè)例子,他們剛剛列出的項目必須出現在所有相關(guān)的搜索結果中。顯而易見(jiàn),在最新版eBay搜索的重架構出現之前,僅僅是更新一次搜索的索引也需要9個(gè)小時(shí)。
演講者說(shuō)到了很多類(lèi)似的具有挑戰性的問(wèn)題,同時(shí)也深入探討了問(wèn)題的解決方案。然而對我而言,演講中令我最感興趣的話(huà)題是,關(guān)于eBay架構本身是如何演化的介紹。關(guān)于這個(gè)話(huà)題,我們需要對第一版本的架構進(jìn)行一些思考,例如:
l 1995年的一個(gè)周末Pierre Omidyar構建了第一版本的架構
l 每個(gè)項目是一個(gè)單獨的文件,由Perl腳本生成
l 沒(méi)有搜索,只能夠按照類(lèi)別進(jìn)行瀏覽
l 系統硬件是由能夠在Fry商店購買(mǎi)的商品零件所組裝的
從1995年到1997年9月,eBay一直使用這個(gè)架構。演講提到,那時(shí),eBay已經(jīng)是一個(gè)比較有名的網(wǎng)站了,而且它的架構也達到了5萬(wàn)項的最高值。
接下來(lái)的幾次迭代使得eBay的架構進(jìn)入了3層架構的階段,最初是在微軟的IIS服務(wù)器上,然后轉移到Java中。最終的幾個(gè)版本表明,需要摒棄J2EE的很多特性,以高度化定制的架構來(lái)滿(mǎn)足eBay的獨特需求。
關(guān)于eBay所經(jīng)歷的這四個(gè)主要的架構版本,一種觀(guān)點(diǎn)是,這四種版本是一場(chǎng)進(jìn)化。然而,另外一種觀(guān)點(diǎn)是,這四個(gè)版本形成了一個(gè)完整的圓圈:剛開(kāi)始時(shí),采用設計定制的解決方案,最終又轉回到定制解決方案上來(lái)。
根據對各個(gè)不同架構階段的介紹,我非常希望了解,eBay的架構師在解決表現層擴展這一迫切問(wèn)題上達到了哪種程度,他們希望在系統中實(shí)現可擴展性以此來(lái)處理將來(lái)的負載,那么這一目標的實(shí)現又達到了何種程度。即使是為將來(lái)考慮,那么,架構師需要預測未來(lái)某些假設的時(shí)間點(diǎn)處系統的可擴展性,他們的這一能力又達到了何種程度呢?
關(guān)于這些預測的一個(gè)問(wèn)題是,即使目前的操作系統中保存的大量數據都是可供使用的,系統的使用模式也會(huì )發(fā)生改變的——舉個(gè)例子,用戶(hù)可能開(kāi)始喜歡視頻而不是簡(jiǎn)單的圖片,或者語(yǔ)音電話(huà)作為系統交互的一部分。根據演講的內容,這些使用模式的變化完全可以很快地到來(lái),尤其是當平均架構生命周期變成了大約2-3年。例如,兩三年前,聽(tīng)說(shuō)過(guò)YouTube的人很少,但是,在該公司短短的兩三年生命周期中,數百萬(wàn)的用戶(hù)已經(jīng)習慣于網(wǎng)絡(luò )視頻了。
實(shí)現擴展:組織能力+架構
我認為最后爭論的這個(gè)問(wèn)題是這次eBay演講主要信息之所在。對我來(lái)說(shuō),關(guān)于eBay架構的變革,最驚人的方面不僅僅是每一個(gè)架構時(shí)期所采用的解決方案技術(shù)的卓越,還有這個(gè)事實(shí)——eBay能夠通過(guò)對系統進(jìn)行不斷的改進(jìn)來(lái)迎接所遇到的各種挑戰,所有階段的努力使得這個(gè)網(wǎng)站長(cháng)久不衰。
有趣的是,它建議你幾乎可以從任何一種架構開(kāi)始做起——甚至是使用Perl或者Rails或者JSP頁(yè)面——當你需要擴展你的應用程序時(shí),只要你知道如何轉移到下一步,并且有能力實(shí)現。反過(guò)來(lái),它也建議,可擴展性的關(guān)鍵并不完全是每個(gè)架構階段之間如何進(jìn)行擴展,而是一個(gè)公司或者一個(gè)組織如何把應用程序從一個(gè)架構階段推進(jìn)到下一階段。這表明,擴展像技術(shù)問(wèn)題一樣是個(gè)人或者組織的問(wèn)題。
當然,這并沒(méi)有什么令人驚訝的,因為,與架構設計一樣,擴展也總是可以實(shí)現的。(eBay演講的最后一部分就講解了擴展的可操作性這個(gè)主題——例如,它解釋了1萬(wàn)5千個(gè)應用程序實(shí)例是如何通過(guò)八個(gè)數據中心進(jìn)行管理的。)然而,如果從更寬廣的視角來(lái)看待擴展的話(huà),其中兩個(gè)普遍存在的擴展方式可能在實(shí)際中是沒(méi)有用處的。
一個(gè)方式是,從開(kāi)始就過(guò)于強調可擴展性的設計。大多數開(kāi)發(fā)人員都知道架構的擴展無(wú)法從一開(kāi)始就確定,但是,在某些情況下,架構師仍然寧愿花費過(guò)多的精力來(lái)試圖設計一個(gè)能夠長(cháng)期滿(mǎn)足應用程序需求的架構。Pierre Omidyar基本上不同意這個(gè)觀(guān)點(diǎn),這就是為什么他會(huì )選擇在他的初始版本中使用Perl腳本以及每個(gè)項目一個(gè)文件的機制,而不采用一勞永逸的方式。
第二個(gè)主張可擴展性無(wú)用的觀(guān)點(diǎn)認為,可擴展性和性能一樣純粹是事后考慮的,而且反對在應用程序開(kāi)發(fā)的初始階段就考慮可擴展性。XP倡導者有些時(shí)候利用這一觀(guān)點(diǎn)辯護,因為他們更熱衷于快速地寫(xiě)代碼,而不是考慮以后這些代碼將如何進(jìn)行擴展以處理將來(lái)的應用程序工作負載。
實(shí)際上,這兩種觀(guān)點(diǎn)都是沒(méi)有太大用處的。更加現實(shí)的觀(guān)點(diǎn)是,第三種觀(guān)點(diǎn),把擴展作為組織上甚至是業(yè)務(wù)層上的能力的一部分。預測將來(lái)的工作負載是非常困難的,我們需要認識到這一點(diǎn),那么,如果可以預測的話(huà),這個(gè)觀(guān)點(diǎn)將主要用于這種架構——處理近期進(jìn)行的擴展,同時(shí)允許對特性進(jìn)行快速部署,以使應用程序的實(shí)際用戶(hù)能夠為支持將來(lái)的架構更新生成業(yè)務(wù)合理性。然而,遠遠不同于把擴展作為組織甚至業(yè)務(wù)能力開(kāi)始,發(fā)展到能夠處理系統的架構變化。這看起來(lái)正是2006 SD論壇上eBay架構師所做演講的觀(guān)點(diǎn)之所在。
那么在你的項目中,你什么時(shí)候開(kāi)始考慮實(shí)現擴展性呢?
聯(lián)系客服