Stack Overflow架構揭秘(軟硬件、人員、數字)
原創【51CTO精選譯文】編者按:開發人員和社區類產品/運營工作者應該對Stack Overflow十分熟悉:這是IT界最受歡迎的問答網站之一。隨著Stack Overflow越來越火,該網站在最近幾年也對自身的架構進行了大量的擴展優化。本文作者對Stack Overflow這幾年的架構變遷進行了揭秘。
自從本人在2009年寫了關于Stack Overflow 架構的第一篇文章后,該架構已發生了很大的變化。那篇文章主要介紹了Stack Overflow采取的向上擴展(scale-up)策略,而Stack Overflow在最近幾年得到了全面發展。
Stack Overflow取得了長足發展:規模擴大了一倍多,每月不重復的訪問用戶超過1600萬;每月網頁瀏覽量(PV)增長了近6倍,達到9500萬。
Stack Overflow發展壯大成了 Stack Exchange Network,而這個網絡包括Stack Overflow、Server Fault和Super User等,旗下總共擁有43個網站,而且發展勢頭良好。
但不變的是Stack Overflow在其所作所為方面堅持的開放理念,而這才有了今天這篇文章。最近的一連串帖子主要介紹了Stack Overflow在如何應對增長:《Stack Exchange的架構要點介紹》、《Stack Overflow的紐約數據中心》、《為確保管理和容錯的高擴展性而設計》、《Stack Overflow搜索——現在時間縮短了81%》、《Stack Overflow網絡配置》、《Stack Overflow使用緩存嗎?如果使用,怎么使用?》和《哪些工具和技術構建了Stack Exchange Network?》等。(51CTO編輯注:以上文章均為英文。)
這幾年來比較明顯的一些變化如下:
◆數量更多:更多的用戶、更多的PV、更多的數據中心、更多的站點、更多的開發人員、更多的操作系統、更多的數據庫、更多的機器。
◆Linux:Stack Overflow因使用Windows系列產品而著稱,現在他們使用越來越多的Linux機器,用于HAProxy、Redis、Bacula、Nagios、日志和路由器等系統。所有支持功能似乎都由Linux來處理,這就需要開發并行版本發行流程。
◆容錯:現在為Stack Overflow提供服務的是使用兩條不同互聯網連接的兩只不同交換機,Stack Overflow添加了冗余機器,一些功能已搬遷到第二個數據中心。
◆NoSQL:Redis現用作整個網絡的緩存層。以前沒有獨立的緩存層,所以這是一大變化,使用基于Linux的NoSQL數據庫也是一大變化。
遺憾的是,我沒有找到哪些帖子在介紹我上次提出的一些開放問題,比如Stack Overflow如何處理有著眾多不同屬性的多租戶架構,不過我們還是可以從許多方面來了解。下面是收集的一些信息:
統計數字
◆每月網頁瀏覽量9500萬次
◆每秒800個HTTP請求
◆每秒180個DNS請求
◆每秒55兆位
◆1600萬個用戶——Stack Overflow的流量在2010年增長了131%,全球每月不重復訪客增至1660萬人。
數據中心
◆1個機架放在俄勒岡州的Peak Internet(用于放置chat和Data Explorer)
◆2個機架放在紐約州的Peer 1(用于放置Stack Exchange Network的其余部分)
硬件
◆10臺戴爾R610 IIS Web服務器(3臺專門用于Stack Overflow)
◆1個英特爾至強處理器E5640,2.66 GHz四核,8線程
◆16 GB內存
◆Windows Server 2008 R2
◆2臺戴爾R710數據庫服務器:
◆2個英特爾至強處理器X5680,3.33 GHz
◆64 GB內存
◆8個硬盤
◆SQL Server 2008 R2
◆2臺戴爾R610 HAProxy服務器:
◆1個英特爾至強處理器E5640,2.66 GHz
◆4 GB內存
◆Ubuntu Server
◆2臺戴爾R610 Redis服務器:
◆2個英特爾至強處理器E5640,2.66 GHz
◆16 GB內存
◆CentOS
◆1臺戴爾R610 Linux備份服務器,運行Bacula:
◆1個英特爾至強處理器E5640,2.66 GHz
◆32 GB內存
◆1臺戴爾R610 Linux管理服務器,用于Nagios和日志:
◆1個英特爾至強處理器E5640,2.66 GHz
◆32 GB內存
◆2個戴爾R610 VMWare ESXi域控制器:
◆1個英特爾至強處理器E5640,2.66 GHz
◆16 GB內存
◆2只Linux路由器
◆5只戴爾Power Connect交換機
開發工具
◆編程語言:C#
◆集成開發環境(IDE):Visual Studio 2010團隊套件
◆框架:微軟ASP.NET(版本4.0)
◆Web框架:ASP.NET MVC 3
◆視圖引擎:Razor
◆瀏覽器框架:jQuery 1.4.2
◆數據訪問層:LINQ to SQL,一些原始SQL
◆源碼控制:Mercurial和Kiln
◆比較工具:Beyond Compare 3
使用的軟件和技術
◆Stack Overflow通過BizSpark,使用WISC堆棧
◆操作系統:Windows Server 2008 R2 x64
◆數據庫:運行微軟Windows Server 2008企業版x64的SQL Server 2008 R2
◆Web 服務器:IIS 7.0
◆HAProxy:用于負載均衡
◆Redis:用作分布式緩存層
◆CruiseControl.NET:用于代碼構建和自動化部署
◆Lucene.NET:用于搜索
◆Bacula:用于備份
◆Nagios:(n2rrd和drraw插件)用于監控
◆Splunk:用于日志
◆SQL Monitor:Red Gate公司提供,用于SQL Server監控
◆Bind:用于DNS
◆Rovio:一個小巧的機器人(真正的機器人),讓遠程開發人員可以通過“虛擬方式”訪問辦公室。
◆Pingdom:外部監控和警報服務網站
推薦閱讀:國外十大流行的服務器監控工具(外篇)
#p#
外部組件
不是作為開發工具一部分而包括的代碼:
◆reCAPTCHA
◆DotNetOpenId
◆WMD——現在作為開源而開發。詳見github網絡圖
◆Prettify
◆Google Analytics
◆Cruise Control .NET
◆HAProxy
◆Cacti
◆MarkdownSharp
◆Flot
◆Nginx
◆Kiln
◆內容分發網絡(CDN):無,所有靜態內容從sstatic.net來提供,這個快速的、無cookie的域用于將靜態內容分發到Stack Exchange系列網站。
開發人員和系統管理員
◆14名開發人員
◆2名系統管理員
內容
◆許可證:Creative Commons Attribution-Share Alike 2.5 Generic
◆標準:OpenSearch,Atom
◆主機:PEAK Internet
架構的更多信息和汲取的經驗
◆使用了Proxy,而不是使用Windows網絡負載均衡(NLB),因為HAProxy成本低廉、易于使用,還是免費的;而且通過Hyper-V,很適合作為網絡上的一個512M虛擬機“設備”。它還在服務器的前端工作,所以對服務器來說完全透明;而且作為不同的網絡層,更容易排除故障,而不是與你的所有窗口配置混雜在一起。
◆沒有使用CDN,因為與捆綁在現有主機方案中的帶寬相比,連亞馬遜CDN這樣“便宜的”CDN其費用都非常昂貴。按照亞馬遜的CDN費率和Stack Overflow的帶寬使用量,每月至少要付1000美元。
◆備份到磁盤上,便于快速恢復;備份到磁帶上,便于歷史歸檔。
◆SQL Server的全文搜索機制集成度非常差,問題多多,功能很弱,所以Stack Overflow改用了Lucene。
◆最受關注的是峰值HTTP請求數字,因為這正是他們需要確保能處理的方面。
◆所有屬性如今都在同一個Stack Exchange平臺上運行。那意味著Stack Overflow、Super User、Server Fault、Meta、WebApps和Meta Web Apps都在同一個軟件上運行。
◆有一些獨立的StackExchange站點,因為人們擁有不同的專業技能,這些技能并不適用于不同的主題站點。你也許是世界上最出色的大廚,但并不是說你就有能力修復服務器。
◆Stack Overflow盡量把一切都放到緩存中。
◆匿名用戶訪問的所有頁面通過輸出緩存(Output Caching)放到緩存中,隨后提供給匿名用戶。
◆每個站點有三種不同的緩存:本地緩存、站點緩存和全局緩存。
◆本地緩存:只能通過1對服務器/站點來訪問。
◆為了限制網絡延遲時間,Stack Overflow使用了本地“一級”緩存(基本上是HttpRuntime.Cache),緩存服務器上最近設定/讀取的值。這樣就可以把網絡上的緩存查找開銷減小至0字節。
◆緩存里面含有用戶會話和等待的視圖數更新等內容。
◆緩存完全駐留在內存中,沒有網絡或數據庫訪問。
◆站點緩存:可以由一個站點(任何服務器上)的任何實例來訪問。
◆大部分緩存的值進入到這里,熱點問題ID列表和用戶驗收率就是兩個典例。
◆緩存駐留在Redis(位于不同的數據庫,純粹為了易于調試)。
◆Redis的速度很快,緩存查找中速度最慢的部分就是讀取字節并寫到網絡上。
◆值被發送到Redis之前先進行壓縮。Stack Overflow有許多處理器,大部分數據是字符串,所以得到的壓縮比很高。
◆Redis機器上的處理器使用率為0%。
◆全局緩存:全局緩存被所有站點和服務器共享。
◆緩存內容包括收件箱、API使用限額和另外幾項真正全局的內容。
◆緩存駐留在Redis中(位于數據庫0,同樣為了易于調試)。
◆緩存中的大部分項目在超時(通常是幾分鐘)后過期,從來不被明確刪除。需要宣布某個特定的緩存項目無效時,他們使用Redis消息傳遞機制,向“一級”緩存發布刪除通知。
◆知名軟件工程師、Fog Creek Software公司首席執行官Joel Spolsky不是微軟的忠誠分子,他并不為Stack Overflow做出技術決策,認為微軟的許可證是個舍入誤差。
◆Stack Overflow為自己的輸入/輸出系統選擇了英特爾X25固態硬盤組成的RAID 10陣列。這個RAID陣列消除了可靠性方面的任何問題;與FusionIO相比,固態硬盤的性能確實很好,而價格又便宜得多。
◆微軟許可證的總標價約為24.2萬美元。由于Stack Overflow使用Bizspark,所以沒在支付總標價,但他們能付的最多也就這么多。
◆英特爾網卡取代了博通網卡和主生產服務器。這解決了他們之前面臨的問題:連接中斷、數據包丟失和地址解析協議(ARP)表損壞。
【51CTO.com譯文,轉載請注明原文作譯者和出處。】
原文:Stack Overflow Architecture Update - Now At 95 Million Page Views A Month
【編輯推薦】