• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            從myspace數據庫看分布式系統數據結構變遷

            MySpace已經成為全球眾口皆碑的社區網站之王。盡管一流和營銷和管理經驗自然是每個IT企業取得成功的首要因素,但是我們卻拋棄這一點,而主要著眼于探討在數次面臨系統擴張的緊急關頭MySpace是如何從技術方面采取應對策略的。

            MySpace信息系統發展歷程

            第一代架構添置更多的Web服務器

            MySpace最初的系統很小,只有兩臺Web服務器(分擔處理用戶請求的工作量)和一個數據庫服務器(所有數據都存儲在這一個地方)。那時使用的是DellCPU4G內存的系統。在早期階段,MySpace基本是通過添置更多Web服務器來對付用戶暴增問題的。但到在2004年早期,在 MySpace用戶數增長到五十萬后,其數據庫服務器已經開始疲于奔命了。

            第二代架構增加數據庫服務器

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

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

            這一次的數據庫架構按照垂直分割模式設計,不同的數據庫服務于站點的不同功能,如登錄、用戶資料和博客。垂直分割策略利于多個數據庫分擔訪問壓力,當用戶要求增加新功能時,MySpace只需要投入新的數據庫加以支持。在賬戶到達二百萬后,MySpace還從存儲設備與數據庫服務器直接交互的方 式切換到SAN(存儲區域網絡)用高帶寬、專門設計的網絡將大量磁盤存儲設備連接在一起,而數據庫連接到SAN。這項措施極大提升了系統性能、正常運行時間和可靠性。然而,當用戶繼續增加到三百萬后,垂直分割策略也變得難以維持下去。

            第三代架構轉到分布式計算架構

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

            既然所有的核心數據邏輯上都組織到一個數據庫,那么MySpace必須找到新的辦法以分擔負荷——顯然,運行在普通硬件上的單個數據庫服務器是 無能為力的。這次,不再按站點功能和應用分割數據庫,MySpace開始將它的用戶按每百萬一組分割,然后將各組的全部數據分別存入獨立的SQL Server實例。目前,MySpace每臺數據庫服務器實際運行兩個SQL Server實例,也就是說每臺服務器服務大約二百萬用戶。據MySpace技術人員說,以后還可以按照這種模式以更小粒度劃分架構,從而優化負荷分擔。

            第四代架構求助于微軟方案

            2005年早期,賬戶達到九百萬,MySpace開始用微軟的C#編寫ASP.NET程序。在收到一定成效后,MySpace開始大規模遷移到 ASP.NET。用戶達到一千萬時,MySpace再次遭遇存儲瓶頸問題。SAN的引入解決了早期一些性能問題,但站點目前的要求已經開始周期性超越 SANI/O容量——即它從磁盤存儲系統讀寫數據的極限速度。

            第五代架構增加數據緩存層并轉到支持64位處理器的SQL Server 2005

            2005年春天,MySpace賬戶達到一千七百萬,MySpace又啟用了新的策略以減輕存儲系統壓力,即增加數據緩存層——位于Web服務 器和數據庫服務器之間,其唯一職能是在內存中建立被頻繁請求數據對象的副本,如此一來,不訪問數據庫也可以向Web應用供給數據。

            2005年中期,服務賬戶數達到兩千六百萬時,MySpace因為我們對內存的渴求而切換到了還處于beta測試的支持64位處理器的SQL Server 2005升級SQL Server 200564Windows Server 2003后,MySpace每臺服務器配備了32G內存,后于2006年再次將配置標準提升到64G

            事實上,MySpaceWeb服務器和數據庫仍然經常發生超負荷,其用戶頻繁遭遇意外錯誤站點離線維護等告示,他們不得不在論壇抱怨不停……

            MySpace正是在這樣不斷重構站點軟件、數據庫和存儲系統中,才一步步走到今天。事實上,MySpace已經成功解決了很多系統擴展性問 題,其中存在相當的經驗值得我們借鑒。MySpace系統架構到目前為止保持了相對穩定,但其技術人員仍然在為SQL Server支持的同時連接數等方面繼續攻堅,盡可能把事情做到最好。

            雖然自2005年早期,站點賬戶數超過7百萬后,系統架構到目前為止保持了相對穩定,但MySpace仍然在為SQL Server支持的同時連接數等方面繼續攻堅。

            里程碑一:50萬賬戶

            MySpace最初的系統很小,只有兩臺Web服務器和一個數據庫服務器。那時使用的是Dell雙路CPU4G內存的系統。

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

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

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

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

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

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

            有人花5分鐘都無法完成留言,因此用戶總是抱怨說網站已經完蛋了。這一次的數據庫架構按照垂直分割模式設計,不同的數據庫服務于站點的不同功能,如登錄、用戶資料和博客。于是,站點的擴展性問題看似又可以告一段落了,可以歇一陣子。

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

            里程碑三:3百萬賬戶

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

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

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

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

            另外,向外擴展策略還需要大量重寫原來軟件,以保證系統能在分布式服務器上運行。搞不好,開發人員的所有工作都將白費Benedetto 說。因此,MySpace首先將重點放在了向上擴展上,花費了大約1個半月時間研究升級32CPU服務器以管理更大數據庫的問題。Benedetto 說,那時候,這個方案看似可能解決一切問題。如穩定性,更棒的是對現有軟件幾乎沒有改動要求。

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

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

            既然所有的核心數據邏輯上都組織到一個數據庫,那么MySpace必須找到新的辦法以分擔負荷——顯然,運行在普通硬件上的單個數據庫服務器是 無能為力的。這次,不再按站點功能和應用分割數據庫,MySpace開始將它的用戶按每百萬一組分割,然后將各組的全部數據分別存入獨立的SQL Server實例。目前,MySpace每臺數據庫服務器實際運行兩個SQL Server實例,也就是說每臺服務器服務大約2百萬用戶。Benedetto指出,以后還可以按照這種模式以更小粒度劃分架構,從而優化負荷分擔。

            當然,還是有一個特殊數據庫保存了所有賬戶的名稱和密碼。用戶登錄后,保存了他們其他數據的數據庫再接管服務。特殊數據庫的用戶表雖然龐大,但它只負責用戶登錄,功能單一,所以負荷還是比較容易控制的。

            里程碑四:9百萬到17百萬賬戶

            2005年早期,賬戶達到9百萬后,MySpace開始用MicrosoftC#編寫ASP.NET程序。C#C語言的最新派生語言,吸收 了C++Java的優點,依托于Microsoft .NET框架(Microsoft為軟件組件化和分布式計算而設計的模型架構)。ASP.NET則由編寫Web站點腳本的ASP技術演化而來,是 Microsoft目前主推的Web站點編程環境。

            可以說是立竿見影, MySpace馬上就發現ASP.NET程序運行更有效率,與ColdFusion相比,完成同樣任務需消耗的處理器能力更小。據技術總監 Whitcomb說,新代碼需要150臺服務器完成的工作,如果用ColdFusion則需要246臺。Benedetto還指出,性能上升的另一個原因可能是在變換軟件平臺,并用新語言重寫代碼的過程中,程序員復審并優化了一些功能流程。

            最終,MySpace開始大規模遷移到ASP.NET。即便剩余的少部分ColdFusion代碼,也從Cold-Fusion服務器搬到了 ASP.NET,因為他們得到了BlueDragon.NET(喬治亞州阿爾法利塔New Atlanta Communications公司的產品,它能將ColdFusion代碼自動重新編譯到Microsoft平臺)的幫助。

            賬戶達到1千萬時,MySpace再次遭遇存儲瓶頸問題。SAN的引入解決了早期一些性能問題,但站點目前的要求已經開始周期性超越SANI/O容量——即它從磁盤存儲系統讀寫數據的極限速度。

            原因之一是每數據庫1百萬賬戶的分割策略,通常情況下的確可以將壓力均分到各臺服務器,但現實并非一成不變。比如第七臺賬戶數據庫上線后,僅僅7天就被塞滿了,主要原因是佛羅里達一個樂隊的歌迷瘋狂注冊。

            某個數據庫可能因為任何原因,在任何時候遭遇主要負荷,這時,SAN中綁定到該數據庫的磁盤存儲設備簇就可能過載。”SAN讓磁盤I/O能力大幅提升了,但將它們綁定到特定數據庫的做法是錯誤的。”Benedetto說。

            最初,MySpace通過定期重新分配SAN中數據,以讓其更為均衡的方法基本解決了這個問題,但這是一個人工過程,大概需要兩個人全職工作。”Benedetto說。

            長期解決方案是遷移到虛擬存儲體系上,這樣,整個SAN被當作一個巨型存儲池,不再要求每個磁盤為特定應用服務。MySpace目前采用了一種新型SAN設備——來自加利福尼亞州弗里蒙特的3PARdata

            3PAR的系統里,仍能在邏輯上按容量劃分數據存儲,但它不再被綁定到特定磁盤或磁盤簇,而是散布于大量磁盤。這就使均分數據訪問負荷成為可能。當數據庫需要寫入一組數據時,任何空閑磁盤都可以馬上完成這項工作,而不再像以前那樣阻塞在可能已經過載的磁盤陣列處。而且,因為多個磁盤都有數據副 本,讀取數據時,也不會使SAN的任何組件過載。

            2005年春天賬戶數達到17百萬時,MySpace又啟用了新的策略以減輕存儲系統壓力,即增加數據緩存層——位于Web服務器和數據庫 服務器之間,其唯一職能是在內存中建立被頻繁請求數據對象的副本,如此一來,不訪問數據庫也可以向Web應用供給數據。換句話說,100個用戶請求同一份 資料,以前需要查詢數據庫100次,而現在只需1次,其余都可從緩存數據中獲得。當然如果頁面變化,緩存的數據必須從內存擦除,然后重新從數據庫獲取—— 但在此之前,數據庫的壓力已經大大減輕,整個站點的性能得到提升。

            緩存區還為那些不需要記入數據庫的數據提供了驛站,比如為跟蹤用戶會話而創建的臨時文件——Benedetto坦言他需要在這方面補課,我是數據庫存儲狂熱分子,因此我總是想著將萬事萬物都存到數據庫。但將像會話跟蹤這類的數據也存到數據庫,站點將陷入泥沼。

            里程碑五:26百萬賬戶

            2005年中期,服務賬戶數達到26百萬時,MySpace切換到了還處于beta測試的SQL Server 2005。轉換何太急?主流看法是2005版支持64位處理器。但Benedetto說,這不是主要原因,盡管這也很重要;主要還是因為我們對內存的渴 求。支持64位的數據庫可以管理更多內存。

            更多內存就意味著更高的性能和更大的容量。原來運行32位版本的SQL Server服務器,能同時使用的內存最多只有4G。切換到64位,就好像加粗了輸水管的直徑。升級SQL Server 200564Windows Server 2003后,MySpace每臺服務器配備了32G內存,后于2006年再次將配置標準提升到64G

            意外錯誤促進系統健康成長

            如果沒有對系統架構的歷次修改與升級MySpace根本不可能走到今天。但是,為什么系統還經常吃撐著了?很多用戶抱怨的意外錯誤是怎么引起的呢?

            原因之一是MySpaceMicrosoftWeb技術的應用已經進入連Microsoft自己也才剛剛開始探索的領域。比如11月,超出 SQL Server最大同時連接數,MySpace系統崩潰。Benedetto說,這類可能引發系統崩潰的情況大概三天才會出現一次,但仍然過于頻繁了,以致 惹人惱怒。一旦數據庫罷工,無論這種情況什么時候發生,未緩存的數據都不能從SQL Server獲得,那么你就必然看到一個意外錯誤提示。他解釋說。

            去年夏天,MySpaceWindows 2003多次自動停止服務。后來發現是操作系統一個內置功能惹的禍——預防分布式拒絕服務攻擊(黑客使用很多客戶機向服務器發起大量連接請求,以致服務器癱瘓)。MySpace和其他很多頂級大站點一樣,肯定會經常遭受攻擊,但它應該從網絡級而不是依靠Windows本身的功能來解決問題——否則,大量 MySpace合法用戶連接時也會引起服務器反擊。

            我們花了大約一個月時間尋找Windows 2003服務器自動停止的原因。”Benedetto說。最后,通過Microsoft的幫助,他們才知道該怎么通知服務器:別開槍,是友軍。

            緊接著是在去年7月某個周日晚上,MySpace總部所在地洛杉磯停電,造成整個系統停運12小時。大型Web站點通常要在地理上分布配置多個 數據中心以預防單點故障。本來,MySpace還有其他兩個數據中心以應對突發事件,但Web服務器都依賴于部署在洛杉磯的SAN。沒有洛杉磯的 SANWeb服務器除了懇求你耐心等待,不能提供任何服務。

            Benedetto說,主數據中心的可靠性通過下列措施保證:可接入兩張不同電網,另有后備電源和一臺儲備有30天燃料的發電機。但在這次事故中,不僅兩張電網失效,而且在切換到備份電源的過程中,操作員燒掉了主動力線路。

            2007年中,MySpace在另兩個后備站點上也建設了SAN。這對分擔負荷大有幫助——正常情況下,每個SAN都能負擔三分之一的數據訪問量。而在緊急情況下,任何一個站點都可以獨立支撐整個服務,Benedetto說。

            MySpace仍然在為提高穩定性奮斗,雖然很多用戶表示了足夠信任且能原諒偶現的錯誤頁面。

            作為開發人員,我憎惡Bug,它太氣人了。”Dan Tanner這個31歲的德克薩斯軟件工程師說,他通過MySpace重新聯系到了高中和大學同學。不過,MySpace對我們的用處很大,因此我們可 以原諒偶發的故障和錯誤。” Tanner說,如果站點某天出現故障甚至崩潰,恢復以后他還是會繼續使用。

            這就是為什么Drew在論壇里咆哮時,大部分用戶都告訴他應該保持平靜,如果等幾分鐘,問題就會解決的原因。Drew無法平靜,他寫道,我已 經兩次給MySpace發郵件,而它說一小時前還是正常的,現在出了點問題……完全是一堆廢話。另一個用戶回復說,畢竟它是免費 的。”Benedetto坦承100%的可靠性不是他的目標。它不是銀行,而是一個免費的服務。他說。

            換句話說,MySpace偶發故障可能造成某人最后更新的個人資料丟失,但并不意味著網站弄丟了用戶的錢財。關鍵是要認識到,與保證站點性 能相比,丟失少許數據的故障是可接受的。”Benedetto說。所以,MySpace甘冒丟失2分鐘到2小時內任意點數據的危險,在SQL Server配置里延長了”checkpoint”操作——它將待更新數據永久記錄到磁盤——的間隔時間,因為這樣做可以加快數據庫的運行。

            Benedetto說,同樣,開發人員還經常在幾個小時內就完成構思、編碼、測試和發布全過程。這有引入Bug的風險,但這樣做可以更快實現新 功能。而且,因為進行大規模真實測試不具可行性,他們的測試通常是在僅以部分活躍用戶為對象,且用戶對軟件新功能和改進不知就里的情況下進行的。因為事實上不可能做真實的加載測試,他們做的測試通常都是針對站點。

             

            posted on 2009-06-09 13:49 肥仔 閱讀(204) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

            久久99精品久久久久久噜噜| 亚洲国产精品无码久久一线 | 久久成人小视频| 欧美亚洲国产精品久久蜜芽| 日本欧美久久久久免费播放网| 99久久综合国产精品二区| 久久久久久伊人高潮影院| 久久久这里只有精品加勒比| 欧美激情精品久久久久久久九九九| 久久这里只有精品久久| 午夜精品久久久久久毛片| 久久婷婷五月综合97色直播| 久久综合久久综合亚洲| 久久久久波多野结衣高潮| 少妇内射兰兰久久| 97久久久久人妻精品专区| 2021国产成人精品久久| 久久露脸国产精品| 久久亚洲精品国产精品婷婷 | 久久精品一区二区国产| 国产精品久久99| 91麻豆精品国产91久久久久久| 国产成人精品久久| 久久久中文字幕日本| 亚洲精品午夜国产va久久| 人妻无码中文久久久久专区| 精品精品国产自在久久高清| 亚洲精品NV久久久久久久久久| 久久久久女人精品毛片| 国产精品美女久久久网AV| 无码人妻少妇久久中文字幕 | 一本伊大人香蕉久久网手机| 久久久无码精品午夜| 久久婷婷激情综合色综合俺也去| 伊人久久大香线蕉精品| 久久99精品国产99久久6| 欧美精品久久久久久久自慰| yellow中文字幕久久网| 久久青青草原亚洲av无码app| 久久精品中文字幕第23页| 影音先锋女人AV鲁色资源网久久|