myspace

這篇6年前的老文章對資料庫這塊還是很有參考價值的,基于Windows2003+ASP.net+IIS+SQL Server。

說起MySpace,可能很多人對他印象很深,MySpace.com成立於2003年9月,是目前全球最大的社交網站。它為全球用戶提供了一個集交友、個人資訊分享、即時通訊等多種功能於一體的互動平臺,同時他也是.NET應用最出色的網站之一。下面我們一起來回顧一下MySpace架構的改革之路,或許我們能從中得到一點點架構方面的經驗和教訓。

1、50萬用戶
最早myspace網站由一台資料庫伺服器和兩台Web伺服器構成,此後一段時間又加了幾台web伺服器。但在2004年早期,用戶增加到50萬時一台資料庫伺服器就顯得力不從心了。
他們設計了第一代架構,在此架構中他們運行3個SQL Server2000伺服器,一個為主,所有的新資料都提交給他,然後再複製給其他兩個資料庫伺服器。另外兩台伺服器用來給用戶提供資訊流覽,也就是只做資料讀取。在一段時間內效果不錯,只需要增加資料庫伺服器,擴大硬碟,就可以應對用戶數和訪問量的增加了。
2、100萬-200萬用戶
當達到這個數位時,myspace資料庫伺服器遇到了I/O瓶頸,即他們存取資料的速度跟不上了。而這時據他們第一個架構只要5個月。有人花5分鐘都無法完成留言,很多用戶認為myspace完蛋了。
這個時候新的架構被快速提出來了,這一次他們把資料庫架構按照分割模式設計,以網站功能分出多種,如登陸、現實用戶資料、博客資訊、等分門別類存儲在不同的資料庫 伺服器裏。這種垂直分割策略利於多個資料庫分擔訪問壓力(天涯曾經就這麼做過)。後來myspace從存儲設備與資料庫伺服器直接交互的方式SAN(用高 帶寬和專門設計的網路將大量磁片存儲設備鏈結在一起,而資料庫鏈結到SAN)。
3、300萬用戶
到300萬用戶時,這種架構開始也不行了,因為每個資料庫都必須有每個用戶表副本,意識是一個用戶註冊後,他的資訊會分別存在每個資料庫中,但這種做法有 可能某台資料庫伺服器掛掉了,用戶使用一些服務可能會有問題。另一個問題是比如博客資訊增長太快,專門為他服務的資料庫的壓力過大,而其他一些功能很少被 使用又在閒置。這就好像有人忙的要死,有人閑的要死。
於是他們購買了更好更貴的伺服器來解決管理更大資料庫的問題。但專家預測他們即使昂貴專業的伺服器到最後也會不堪重負,他們必須調整架構而不是掏錢買更 好的伺服器。於是他們的第三代架構出現了。分散式計算架構,他們分佈眾多伺服器,但從邏輯上看成是一台伺服器。拿資料庫來說,不能再按功能拆分了,看成只 有一個資料庫伺服器。資料庫模型中維護一個用戶表、博客資訊表、等等同看作在一個資料庫伺服器中。
然後他們開始把用戶按每百萬一組分割,每一組的用戶訪問指定的資料庫伺服器。另外一個特殊伺服器保存所有用戶的帳號和密碼。他們的設計師說如果按照這種模式以更小粒度劃分架構是可以進一步優化負荷負擔的(50萬用戶為一組 或者更少)。
4、900萬-1700萬用戶
myspace在這個時候把網站代碼全部改為.net語言,事實證明網站跑的比以前快了很多、執行用戶的請求消耗非常少的資源,後來他們把所有的程式都改成.net了。但問題到1000萬時還是出來了。
用戶註冊量太快,按每100萬分割資料庫的策略不是那麼完美,比如他們的第7台資料庫伺服器上線僅僅7天就被塞滿了。主要原因是佛羅里達一個樂隊的 歌迷瘋狂註冊。而且某台資料庫伺服器可以在任何原因 任何時候遭遇特別大的負荷。他們的解決辦法是人工把崩潰的資料庫裏的用戶遷移走。但這不是一個好辦法。
這個時候myspace購買了3PAR Data設備,他的牛逼之處是真正把所有的資料庫看成一個整體。他會根據情況把負荷平均分配出去,比如當用戶提交一個信 息,他會看哪個資料區域空閒然後分配給他,然後會在其他多處地方留有副本,不會出現一台資料庫伺服器崩潰,而這台資料庫裏的資訊沒有辦法讀取的情況,這樣 做看起來好極了。
另外他們增加了緩存層,以前用戶查詢一個資訊,就請求一次資料庫,現在當一個用戶請求資料庫後,緩存層就會保留下來一個副本,當其他用戶再訪問時就不需要再請求資料庫了,直接請求緩存就夠了。
5、2600萬用戶
他們把伺服器更換到運行64位的伺服器,這樣伺服器上可最多掛上32G記憶體,這無疑有提升了網站性能,用戶感覺這個網站開始穩定快起來了。但一個新問題意外出現了。他們放資料庫服務中心的洛杉磯全市停電了。這導致整個系統停止運行長達12個小時。
這時他們實現了在地理上分佈多個資料中心以防止洛杉磯事件再次出現,在幾個重要城市的資料中心的部署可以防止某一處出現故障,整個系統照樣提供服務,如果幾個地方都出現故障,那麼這就意味著國家出現了重大災難,這種幾率是非常低的。
6、總結
這個架構變化升級相當有意思,架構隨著用戶量的提升作倉促的變化,但又恰到好處,看來MySpace又驗證了一句古話“有壓力才會有動力”。同時他給我們後人的啟示是要儘早發現系統的瓶頸,設計師在設計時要有前瞻思想,否則今後有可能也要這樣倉促的升級你的產品。