.NET大型Web站点StackOverflow架构分析
生活随笔
收集整理的這篇文章主要介紹了
.NET大型Web站点StackOverflow架构分析
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
自從2009年8月發(fā)布了第一篇關于“Stack Overflow 架構”方面的文章,Stack Overflow已經(jīng)發(fā)生了很大的變化。那篇文章更多關注的是Stack Overflow如何解決網(wǎng)站的擴展性(scale-up)問題,而經(jīng)過幾年的發(fā)展,Stack Overflow已經(jīng)長大成人,成長為了大型網(wǎng)站。現(xiàn)在與2009年相比,Stack Overflow每月獨立訪問用戶翻了一倍,超過1600萬;每月PV翻了近6倍,達到9500萬。Stack Overflow新增了很多站點,比如Server Fault, Super User等,共有43個不同站點組成了Stack Exchange Network,可謂碩果累累,迅猛增長。Stack Overflow的變化翻天覆地,而不變的是他們開放的心態(tài),所以才有了這篇架構分享的文章。最近,他們寫了一系列文章分享他們如何應對這樣的快速增長。穿越時空,我們來看看有哪些明顯的變化?更多:更多的用戶,更多的PV,更多的數(shù)據(jù)中心,更多的站點,更多的開發(fā)者,更多的操作系統(tǒng),更多的數(shù)據(jù)庫,更多的服務器...Linux:Stack Overflow因使用Windows系統(tǒng)而著稱,現(xiàn)在他們使用越來越多的Linux服務器,比如HAProxy(負載均衡), Redis(NoSQL數(shù)據(jù)庫), Bacula(數(shù)據(jù)備份系統(tǒng)), Nagios(遠程監(jiān)控軟件), 日志, 路由器都運行于Linux系統(tǒng),幾乎所有需要并行處理的功能都是由Linux處理(這句話的翻譯可能不準確)。容錯:Stack Overflow使用了兩條不同的互聯(lián)網(wǎng)線路,增加了更多的冗余服務器,將一些網(wǎng)站服務運行于第二個數(shù)據(jù)中心。NoSQL:Redis作為整個網(wǎng)站的緩存層。這是一個巨大的改變,以前并沒有將緩存作為一個獨立的層分離出來。Redis運行于Linux。遺憾的是,一些我關注的問題并沒有從中找到答案,比如面對這么多不同的系統(tǒng),如何解決多租戶的問題(Multi-tenancy 是一種軟件體系結構,在這種體系結構中軟件運行在 software as a service 服務商的服務器上,服務于多個客戶組織即 tenant)。但是,從中我們依然可以學到很多。下面是收集的一些數(shù)據(jù)列表:The Stats1.95 Million Page Views a Month2.800 HTTP requests a second3.180 DNS requests a second4.55 Megabits per second5.16 Million Users - Traffic to Stack Overflow grew 131% in 2010, to 16.6 million global monthly uniques.Data Centers1 Rack with Peak Internet in OR (Hosts our chat and Data Explorer)2 Racks with Peer 1 in NY (Hosts the rest of the Stack Exchange Network)Hardware10 Dell R610 IIS web servers (3 dedicated to Stack Overflow):1x Intel Xeon Processor E5640 @ 2.66 GHz Quad Core with 8 threads16 GB RAMWindows Server 2008 R22 Dell R710 database servers:2x Intel Xeon Processor X5680 @ 3.33 GHz64 GB RAM8 spindlesSQL Server 2008 R22 Dell R610 HAProxy servers:1x Intel Xeon Processor E5640 @ 2.66 GHz4 GB RAMUbuntu Server2 Dell R610 Redis servers:2x Intel Xeon Processor E5640 @ 2.66 GHz16 GB RAMCentOS1 Dell R610 Linux backup server running Bacula:1x Intel Xeon Processor E5640 @ 2.66 GHz32 GB RAM1 Dell R610 Linux management server for Nagios and logs:1x Intel Xeon Processor E5640 @ 2.66 GHz32 GB RAM2 Dell R610 VMWare ESXi domain controllers:1x Intel Xeon Processor E5640 @ 2.66 GHz16 GB RAM2 Linux routers5 Dell Power Connect switchesDev Tools1.C#: Language2.Visual Studio 2010 Team Suite: IDE3.Microsoft ASP.NET (version 4.0): Framework4.ASP.NET MVC 3: Web Framework5.Razor: View Engine6.jQuery 1.4.2: Browser Framework:7.LINQ to SQL, some raw SQL: Data Access Layer8.Mercurial and Kiln: Source Control(分布式版本控制系統(tǒng))9.Beyond Compare 3: Compare Tool(文件比較工具)Software and Technologies Used1.Stack Overflow uses a WISC stack via BizSpark2.Windows Server 2008 R2 x64: Operating System3.SQL Server 2008 R2 running Microsoft Windows Server 2008 Enterprise Edition x64: Database4.Ubuntu Server5.CentOS6.IIS 7.0: Web Server7.HAProxy: for load balancing(高性能的負載TCP/HTTP均衡器)8.Redis: used as the distributed caching layer.(作為分布式緩存層的NoSQL數(shù)據(jù)庫)9.CruiseControl.NET: for builds and automated deployment(.NET平臺的持續(xù)集成工具)10.Lucene.NET: for search11.Bacula: for backups(開源的數(shù)據(jù)備份系統(tǒng))12.Nagios: (with n2rrd and drraw plugins) for monitoring(監(jiān)視系統(tǒng)運行狀態(tài)和網(wǎng)絡信息的遠程監(jiān)控軟件)13.Splunk: for logs(日志分析工具)14.SQL Monitor: from Red Gate - for SQL Server monitoring15.Bind: for DNS16.Rovio: a little robot (a real robot) allowing remote developers to visit the office “virtually.”17.Pingdom: an external monitor and alert service.(網(wǎng)站監(jiān)控服務及網(wǎng)站速度測試工具)External BitsCode that is not included as part of the development tools:1.reCAPTCHA(用于驗證碼驗證,已被Google收購)2.DotNetOpenId(.NET 平臺上的 OpenID 實現(xiàn)方案)3.WMD - Now developed as open source. See github network graph (輕量級所見即所得編輯器)4.Prettify(代碼高亮顯示)5.Google Analytics6.Cruise Control .NET7.HAProxy(負載均衡)8.Cacti(網(wǎng)絡流量監(jiān)測圖形分析工具)9.MarkdownSharp(Markdown文本處理器的C#實現(xiàn))10.Flot(基于JQuery的純JavaScript實現(xiàn)的繪圖庫)11.Nginx(反向代理服務器)12.Kiln(分布式版本控制系統(tǒng))13.CDN: none, all static content is served off the sstatic.net, which is a fast, cookieless domain intended for static content delivered to the Stack Exchange family of websites.(沒有使用CDN,用一個專門的域名sstatic.net傳遞所有的靜態(tài)內容)Developers and System Administrators14 Developers2 System AdministratorsContentLicense: Creative Commons Attribution-Share Alike 2.5 GenericStandards: OpenSearch, AtomHost: PEAK InternetMore Architecture and Lessons Learned1.用HAProxy取代了Windows NLB,HAProxy成本更低,更易于使用,通過Hyper-V可以很好地運行于512M內存的虛擬機。它工作于服務器群的最前端,對所有的服務器都透明。相比于原來混雜在一起的Windows配置,它運行于一個獨立的網(wǎng)絡層,更易于維護與故障處理。2.沒有使用CDN,即使使用像Amazon那樣與主機空間捆綁在一起的看起來“便宜”的CDN,實際的費用也是很高的,至少需要1000美元/月。3.備份方案有兩種,一種用于快速恢復的磁盤備份,一種用于歷史數(shù)據(jù)存檔的磁帶備份。4.SQL Server的全文索引是非常差勁的,所以他們用Lucene.NET。5.讓人很感興趣的是他們如何處理訪問高峰時的HTTP請求。6.所有這些都運行于Stack Exchange平臺,那意味著Stack Overflow, Super User, Server Fault, Meta, WebApps, 和Meta Web Apps都運行于同一個軟件。7.也有一些獨立運行的StackExchange站點,服務于那些具有多個專業(yè)技能,又不想為了不同的話題在多個站點之間奔波的人。如果你能成為最偉大的主廚,不能因為給你安排了服務員的工作,你就安于現(xiàn)狀。8.他們瘋狂地使用緩存。9.未登錄用戶訪問的所有頁面都通過Output Caching進行緩存。10.每個站點使用三種類型的緩存:本地、站點、全局。本地緩存:只能被當前站點的當前服務器訪問。為了減少網(wǎng)絡延時,通常使用HttpRuntime.Cache作為一級緩存,這樣可以避免通過網(wǎng)絡在緩存服務器上查找的開銷。緩存內容包含用戶會話,視圖數(shù)的更新。直接緩存在內存中。站點級緩存:能被同一個站點的所有服務器訪問。大部分的緩存都在這一級,比如熱點問題ID列表,用戶支持率。緩存數(shù)據(jù)存儲在Redis數(shù)據(jù)庫中。Redis速度很快,緩存查找的開銷主要在網(wǎng)絡傳輸上。緩存數(shù)據(jù)發(fā)送至Redis之前會被壓縮。為什么要壓縮呢?因為CPU資源綽綽有余,而且大部分緩存數(shù)據(jù)是字符串,壓縮率會很高,何樂而不為呢。Redis服務器上的CPU使用率是0%。全局緩存:被所有站點和服務器共享。緩存內容包含收件箱,API使用限額,一些全局設置等。緩存于Redis數(shù)據(jù)庫中。大部分緩存項目在超過緩存時間之后會自動過期(通常幾分鐘),不需要進行刪除操作。當需要讓一個特定的緩存失效,會通過Redis消息系統(tǒng)給一級緩存發(fā)送刪除通知。Joel Spolsky(Stack Overflow的創(chuàng)始人)并不是微軟的忠誠分子,他不負責技術決策,使用微軟軟件考慮的也只是性價比(這句可能翻譯不準確)。Hacker News上一些評論者的說法需要糾正。對于IO系統(tǒng),他們選擇的是Intel X25 solid state drives(SSD硬盤)的RAID 10磁盤陣列,這樣的磁盤陣列,保證了可靠性。這個SSD硬盤用起來感覺不錯,而且價格比FusionIO的便宜。使用的這些微軟軟件,如果全部購買的話,總費用大概在24.2萬美元。由于Stack Overflow參加了微軟的Bizspark計劃,所以不需要付這么多錢,但是要付的話,最多也就是這么多。
轉載于:https://blog.51cto.com/yerik/1159519
總結
以上是生活随笔為你收集整理的.NET大型Web站点StackOverflow架构分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 学习日志
- 下一篇: onInterceptTouchEven