程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> MySpace基於.NET平台的六次重構經歷感受分布式

MySpace基於.NET平台的六次重構經歷感受分布式

編輯:關於C#
 

Myspace和Facebook都是很優秀的社交類網站,它們擁有的用戶和fans之多,大家都很清楚。

Myspace是一個基於.NET平台的,而Facebook更多是基於LAMP的。
我們來看看MySpace配合.NET+Windows Server 2003+Sql Server 2000/2005+IIS怎麼創造傳奇的

文章正文如下:

在每個裡程碑,站點負擔都會超過底層系統部分組件的最大載荷,特別是數據庫和存儲系統。接著,功能出現問題,用戶失聲尖叫。最後,技術團隊必須為此修訂系統策略。
雖然自2005年早期,站點賬戶數超過7百萬後,系統架構到目前為止保持了相對穩定,但MySpace仍然在為SQL Server支持的同時連接數等方面繼續攻堅,Benedetto說,"我們已經盡可能把事情做到最好"。

裡程碑一:50萬賬戶
按Benedetto 的說法,MySpace最初的系統很小,只有兩台Web服務器和一個數據庫服務器。那時使用的是Dell雙CPU、4G內存的系統。

單個數據庫就意味著所有數據都存儲在一個地方,再由兩台Web服務器分擔處理用戶請求的工作量。但就像MySpace後來的幾次底層系統修訂時的情況一樣,三服務器架構很快不堪重負。此後一個時期內,MySpace基本是通過添置更多Web服務器來對付用戶暴增問題的。

但到在2004年早期,MySpace用戶數增長到50萬後,數據庫服務器也已開始汗流浃背。

但和Web服務器不同,增加數據庫可沒那麼簡單。如果一個站點由多個數據庫支持,設計者必須考慮的是,如何在保證數據一致性的前提下,讓多個數據庫分擔壓力。

在第二代架構中,MySpace運行在3個SQL Server數據庫服務器上——一個為主,所有的新數據都向它提交,然後由它復制到其他兩個;另兩個全力向用戶供給數據,用以在博客和個人資料欄顯示。這種方式在一段時間內效果很好——只要增加數據庫服務器,加大硬盤,就可以應對用戶數和訪問量的增加。

裡程碑二:1-2百萬賬戶

MySpace注冊數到達1百萬至2百萬區間後,數據庫服務器開始受制於I/O容量——即它們存取數據的速度。而當時才是2004年中,距離上次數據庫系統調整不過數月。用戶的提交請求被阻塞,就像千人樂迷要擠進只能容納幾百人的夜總會,站點開始遭遇"主要矛盾",Benedetto說,這意味著MySpace永遠都會輕度落後於用戶需求。

"有人花5分鐘都無法完成留言,因此用戶總是抱怨說網站已經完蛋了。"他補充道。

這一次的數據庫架構按照垂直分割模式設計,不同的數據庫服務於站點的不同功能,如登錄、用戶資料和博客。於是,站點的擴展性問題看似又可以告一段落了,可以歇一陣子。

垂直分割策略利於多個數據庫分擔訪問壓力,當用戶要求增加新功能時,MySpace將投入新的數據庫予以支持它。賬戶到達2百萬後,MySpace還從存儲設備與數據庫服務器直接交互的方式切換到SAN(Storage Area Network,存儲區域網絡)——用高帶寬、專門設計的網絡將大量磁盤存儲設備連接在一起,而數據庫連接到SAN。這項措施極大提升了系統性能、正常運行時間和可靠性,Benedetto說。

裡程碑三:3百萬賬戶

當用戶繼續增加到3百萬後,垂直分割策略也開始難以為繼。盡管站點的各個應用被設計得高度獨立,但有些信息必須共享。在這個架構裡,每個數據庫必須有各自的用戶表副本——MySpace授權用戶的電子花名冊。這就意味著一個用戶注冊時,該條賬戶記錄必須在9個不同數據庫上分別創建。但在個別情況下,如果其中某台數據庫服務器臨時不可到達,對應事務就會失敗,從而造成賬戶非完全創建,最終導致此用戶的該項服務無效。

另外一個問題是,個別應用如博客增長太快,那麼專門為它服務的數據庫就有巨大壓力。

2004年中,MySpace面臨Web開發者稱之為"向上擴展"對"向外擴展"(譯者注:Scale Up和Scale Out,也稱硬件擴展和軟件擴展)的抉擇——要麼擴展到更大更強、也更昂貴的服務器上,要麼部署大量相對便宜的服務器來分擔數據庫壓力。一般來說,大型站點傾向於向外擴展,因為這將讓它們得以保留通過增加服務器以提升系統能力的後路。

但成功地向外擴展架構必須解決復雜的分布式計算問題,大型站點如Google、Yahoo和Amazon.com,都必須自行研發大量相關技術。以Google為例,它構建了自己的分布式文件系統。

另外,向外擴展策略還需要大量重寫原來軟件,以保證系統能在分布式服務器上運行。"搞不好,開發人員的所有工作都將白費",Benedetto說。

因此,MySpace首先將重點放在了向上擴展上,花費了大約1個半月時間研究升級到32CPU服務器以管理更大數據庫的問題。Benedetto說,"那時候,這個方案看似可能解決一切問題。"如穩定性,更棒的是對現有軟件幾乎沒有改動要求。

糟糕的是,高端服務器極其昂貴,是購置同樣處理能力和內存速度的多台服務器總和的很多倍。而且,站點架構師預測,從長期來看,即便是巨型數據庫,最後也會不堪重負,Benedetto說,"換句話講,只要增長趨勢存在,我們最後無論如何都要走上向外擴展的道路。"

因此,MySpace最終將目光移到分布式計算架構——它在物理上分布的眾多服務器,整體必須邏輯上等同於單台機器。拿數據庫來說,就不能再像過去那樣將應用拆分,再以不同數據庫分別支持,而必須將整個站點看作一個應用。現在,數據庫模型裡只有一個用戶表,支持博客、個人資料和其他核心功能的數據都存儲在相同數據庫。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved