在每個(gè)里程碑,站點(diǎn)負(fù)擔(dān)都會超過底層系統(tǒng)部分組件的更大載荷,特別是數(shù)據(jù)庫和存儲系統(tǒng)。接著,功能出現(xiàn)問題,用戶失聲尖叫。更后,技術(shù)團(tuán)隊(duì)必須為此修訂系統(tǒng)策略。
雖然自2005年早期,站點(diǎn)賬戶數(shù)超過7百萬后,系統(tǒng)架構(gòu)到目前為止保持了相對穩(wěn)定,但MySpace仍然在為SQL Server支持的同時(shí)連接數(shù)等方面繼續(xù)攻堅(jiān),Benedetto說,"我們已經(jīng)盡可能把事情做到更好"。
里程碑一:50萬賬戶
按Benedetto 的說法,MySpace更初的系統(tǒng)很小,只有兩臺Web服務(wù)器和一個(gè)數(shù)據(jù)庫服務(wù)器。那時(shí)使用的是Dell雙CPU、4G內(nèi)存的系統(tǒng)。
單個(gè)數(shù)據(jù)庫就意味著所有數(shù)據(jù)都存儲在一個(gè)地方,再由兩臺Web服務(wù)器分擔(dān)處理用戶請求的工作量。但就像MySpace后來的幾次底層系統(tǒng)修訂時(shí)的情況一樣,三服務(wù)器架構(gòu)很快不堪重負(fù)。此后一個(gè)時(shí)期內(nèi),MySpace基本是通過添置更多Web服務(wù)器來對付用戶暴增問題的。
但到在2004年早期,MySpace用戶數(shù)增長到50萬后,數(shù)據(jù)庫服務(wù)器也已開始汗流浹背。
但和Web服務(wù)器不同,增加數(shù)據(jù)庫可沒那么簡單。如果一個(gè)站點(diǎn)由多個(gè)數(shù)據(jù)庫支持,設(shè)計(jì)者必須考慮的是,如何在保證數(shù)據(jù)一致性的前提下,讓多個(gè)數(shù)據(jù)庫分擔(dān)壓力。
在**代架構(gòu)中,MySpace運(yùn)行在3個(gè)SQL Server數(shù)據(jù)庫服務(wù)器上——一個(gè)為主,所有的新數(shù)據(jù)都向它提交,然后由它復(fù)制到其他兩個(gè);另兩個(gè)全力向用戶供給數(shù)據(jù),用以在博客和個(gè)人資料欄顯示。這種方式在一段時(shí)間內(nèi)效果很好——只要增加數(shù)據(jù)庫服務(wù)器,加大硬盤,就可以應(yīng)對用戶數(shù)和訪問量的增加。
里程碑二:1-2百萬賬戶
MySpace注冊數(shù)到達(dá)1百萬至2百萬區(qū)間后,數(shù)據(jù)庫服務(wù)器開始受制于I/O容量——即它們存取數(shù)據(jù)的速度。而當(dāng)時(shí)才是2004年中,距離上次數(shù)據(jù)庫系統(tǒng)調(diào)整不過數(shù)月。用戶的提交請求被阻塞,就像千人樂迷要擠進(jìn)只能容納幾百人的夜總會,站點(diǎn)開始遭遇"主要矛盾",Benedetto說,這意味著MySpace永遠(yuǎn)都會輕度落后于用戶需求。
"有人花5分鐘都無法完成留言,因此用戶總是抱怨說網(wǎng)站已經(jīng)完蛋了。"他補(bǔ)充道。
這一次的數(shù)據(jù)庫架構(gòu)按照垂直分割模式設(shè)計(jì),不同的數(shù)據(jù)庫服務(wù)于站點(diǎn)的不同功能,如登錄、用戶資料和博客。于是,站點(diǎn)的擴(kuò)展性問題看似又可以告一段落了,可以歇一陣子。
垂直分割策略利于多個(gè)數(shù)據(jù)庫分擔(dān)訪問壓力,當(dāng)用戶要求增加新功能時(shí),MySpace將投入新的數(shù)據(jù)庫予以支持它。賬戶到達(dá)2百萬后,MySpace還從存儲設(shè)備與數(shù)據(jù)庫服務(wù)器直接交互的方式切換到SAN(Storage Area Network,存儲區(qū)域網(wǎng)絡(luò))——用高帶寬、專門設(shè)計(jì)的網(wǎng)絡(luò)將大量磁盤存儲設(shè)備連接在一起,而數(shù)據(jù)庫連接到SAN。這項(xiàng)措施更大提升了系統(tǒng)性能、正常運(yùn)行時(shí)間和可靠性,Benedetto說。
里程碑三:3百萬賬戶
當(dāng)用戶繼續(xù)增加到3百萬后,垂直分割策略也開始難以為繼。盡管站點(diǎn)的各個(gè)應(yīng)用被設(shè)計(jì)得高度前幾立,但有些信息必須共享。在這個(gè)架構(gòu)里,每個(gè)數(shù)據(jù)庫必須有各自的用戶表副本——MySpace授權(quán)用戶的電子花名冊。這就意味著一個(gè)用戶注冊時(shí),該條賬戶記錄必須在9個(gè)不同數(shù)據(jù)庫上分別創(chuàng)建。但在個(gè)別情況下,如果其中某臺數(shù)據(jù)庫服務(wù)器臨時(shí)不可到達(dá),對應(yīng)事務(wù)就會失敗,從而造成賬戶非完全創(chuàng)建,更終導(dǎo)致此用戶的該項(xiàng)服務(wù)無效。
另外一個(gè)問題是,個(gè)別應(yīng)用如博客增長太快,那么專門為它服務(wù)的數(shù)據(jù)庫就有巨大壓力。
2004年中,MySpace面臨Web**稱之為"向上擴(kuò)展"對"向外擴(kuò)展"(譯者注:Scale Up和Scale Out,也稱硬件擴(kuò)展和軟件擴(kuò)展)的抉擇——要么擴(kuò)展到更大更強(qiáng)、也更昂貴的服務(wù)器上,要么部署大量相對便宜的服務(wù)器來分擔(dān)數(shù)據(jù)庫壓力。一般來說,大型站點(diǎn)傾向于向外擴(kuò)展,因?yàn)檫@將讓它們得以保留通過增加服務(wù)器以提升系統(tǒng)能力的后路。
但成功地向外擴(kuò)展架構(gòu)必須解決復(fù)雜的分布式計(jì)算問題,大型站點(diǎn)如Google、Yahoo和Amazon.com,都必須自行研發(fā)大量相關(guān)技術(shù)。以Google為例,它構(gòu)建了自己的分布式文件系統(tǒng)。
另外,向外擴(kuò)展策略還需要大量重寫原來軟件,以保證系統(tǒng)能在分布式服務(wù)器上運(yùn)行。"搞不好,開發(fā)人員的所有工作都將白費(fèi)",Benedetto說。
因此,MySpace首先將重點(diǎn)放在了向上擴(kuò)展上,花費(fèi)了大約1個(gè)半月時(shí)間研究升級到32CPU服務(wù)器以管理更大數(shù)據(jù)庫的問題。Benedetto說,"那時(shí)候,這個(gè)方案看似可能解決一切問題。"如穩(wěn)定性,更棒的是對現(xiàn)有軟件幾乎沒有改動要求。
糟糕的是,高端服務(wù)器更其昂貴,是購置同樣處理能力和內(nèi)存速度的多臺服務(wù)器總和的很多倍。而且,站點(diǎn)架構(gòu)師預(yù)測,從長期來看,即便是巨型數(shù)據(jù)庫,更后也會不堪重負(fù),Benedetto說,"換句話講,只要增長趨勢存在,我們更后無論如何都要走上向外擴(kuò)展的道路。
從MySpace的六次重構(gòu)經(jīng)歷,來認(rèn)識分布式系統(tǒng)到底該如何創(chuàng)建,歡迎合作。
查看更多寧波網(wǎng)站制作該如何分布式重構(gòu)