.NET大型Web站点StackOverflow架构分析
生活随笔
收集整理的這篇文章主要介紹了
.NET大型Web站点StackOverflow架构分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
自從2009年8月發(fā)布了第一篇關(guān)于“Stack Overflow 架構(gòu)”方面的文章,Stack Overflow已經(jīng)發(fā)生了很大的變化。那篇文章更多關(guān)注的是Stack Overflow如何解決網(wǎng)站的擴(kuò)展性(scale-up)問題,而經(jīng)過幾年的發(fā)展,Stack Overflow已經(jīng)長(zhǎng)大成人,成長(zhǎng)為了大型網(wǎng)站。現(xiàn)在與2009年相比,Stack Overflow每月獨(dú)立訪問用戶翻了一倍,超過1600萬;每月PV翻了近6倍,達(dá)到9500萬。Stack Overflow新增了很多站點(diǎn),比如Server Fault, Super User等,共有43個(gè)不同站點(diǎn)組成了Stack Exchange Network,可謂碩果累累,迅猛增長(zhǎng)。Stack Overflow的變化翻天覆地,而不變的是他們開放的心態(tài),所以才有了這篇架構(gòu)分享的文章。最近,他們寫了一系列文章分享他們?nèi)绾螒?yīng)對(duì)這樣的快速增長(zhǎng)。穿越時(shí)空,我們來看看有哪些明顯的變化?更多:更多的用戶,更多的PV,更多的數(shù)據(jù)中心,更多的站點(diǎn),更多的開發(fā)者,更多的操作系統(tǒng),更多的數(shù)據(jù)庫,更多的服務(wù)器...Linux:Stack Overflow因使用Windows系統(tǒng)而著稱,現(xiàn)在他們使用越來越多的Linux服務(wù)器,比如HAProxy(負(fù)載均衡), Redis(NoSQL數(shù)據(jù)庫), Bacula(數(shù)據(jù)備份系統(tǒng)), Nagios(遠(yuǎn)程監(jiān)控軟件), 日志, 路由器都運(yùn)行于Linux系統(tǒng),幾乎所有需要并行處理的功能都是由Linux處理(這句話的翻譯可能不準(zhǔn)確)。容錯(cuò):Stack Overflow使用了兩條不同的互聯(lián)網(wǎng)線路,增加了更多的冗余服務(wù)器,將一些網(wǎng)站服務(wù)運(yùn)行于第二個(gè)數(shù)據(jù)中心。NoSQL:Redis作為整個(gè)網(wǎng)站的緩存層。這是一個(gè)巨大的改變,以前并沒有將緩存作為一個(gè)獨(dú)立的層分離出來。Redis運(yùn)行于Linux。遺憾的是,一些我關(guān)注的問題并沒有從中找到答案,比如面對(duì)這么多不同的系統(tǒng),如何解決多租戶的問題(Multi-tenancy 是一種軟件體系結(jié)構(gòu),在這種體系結(jié)構(gòu)中軟件運(yùn)行在 software as a service 服務(wù)商的服務(wù)器上,服務(wù)于多個(gè)客戶組織即 tenant)。但是,從中我們依然可以學(xué)到很多。下面是收集的一些數(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(高性能的負(fù)載TCP/HTTP均衡器)8.Redis: used as the distributed caching layer.(作為分布式緩存層的NoSQL數(shù)據(jù)庫)9.CruiseControl.NET: for builds and automated deployment(.NET平臺(tái)的持續(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)運(yùn)行狀態(tài)和網(wǎng)絡(luò)信息的遠(yuǎn)程監(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ù)及網(wǎng)站速度測(cè)試工具)External BitsCode that is not included as part of the development tools:1.reCAPTCHA(用于驗(yàn)證碼驗(yàn)證,已被Google收購)2.DotNetOpenId(.NET 平臺(tái)上的 OpenID 實(shí)現(xiàn)方案)3.WMD - Now developed as open source. See github network graph (輕量級(jí)所見即所得編輯器)4.Prettify(代碼高亮顯示)5.Google Analytics6.Cruise Control .NET7.HAProxy(負(fù)載均衡)8.Cacti(網(wǎng)絡(luò)流量監(jiān)測(cè)圖形分析工具)9.MarkdownSharp(Markdown文本處理器的C#實(shí)現(xiàn))10.Flot(基于JQuery的純JavaScript實(shí)現(xiàn)的繪圖庫)11.Nginx(反向代理服務(wù)器)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,用一個(gè)專門的域名sstatic.net傳遞所有的靜態(tài)內(nè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可以很好地運(yùn)行于512M內(nèi)存的虛擬機(jī)。它工作于服務(wù)器群的最前端,對(duì)所有的服務(wù)器都透明。相比于原來混雜在一起的Windows配置,它運(yùn)行于一個(gè)獨(dú)立的網(wǎng)絡(luò)層,更易于維護(hù)與故障處理。2.沒有使用CDN,即使使用像Amazon那樣與主機(jī)空間捆綁在一起的看起來“便宜”的CDN,實(shí)際的費(fèi)用也是很高的,至少需要1000美元/月。3.備份方案有兩種,一種用于快速恢復(fù)的磁盤備份,一種用于歷史數(shù)據(jù)存檔的磁帶備份。4.SQL Server的全文索引是非常差勁的,所以他們用Lucene.NET。5.讓人很感興趣的是他們?nèi)绾翁幚碓L問高峰時(shí)的HTTP請(qǐng)求。6.所有這些都運(yùn)行于Stack Exchange平臺(tái),那意味著Stack Overflow, Super User, Server Fault, Meta, WebApps, 和Meta Web Apps都運(yùn)行于同一個(gè)軟件。7.也有一些獨(dú)立運(yùn)行的StackExchange站點(diǎn),服務(wù)于那些具有多個(gè)專業(yè)技能,又不想為了不同的話題在多個(gè)站點(diǎn)之間奔波的人。如果你能成為最偉大的主廚,不能因?yàn)榻o你安排了服務(wù)員的工作,你就安于現(xiàn)狀。8.他們瘋狂地使用緩存。9.未登錄用戶訪問的所有頁面都通過Output Caching進(jìn)行緩存。10.每個(gè)站點(diǎn)使用三種類型的緩存:本地、站點(diǎn)、全局。本地緩存:只能被當(dāng)前站點(diǎn)的當(dāng)前服務(wù)器訪問。為了減少網(wǎng)絡(luò)延時(shí),通常使用HttpRuntime.Cache作為一級(jí)緩存,這樣可以避免通過網(wǎng)絡(luò)在緩存服務(wù)器上查找的開銷。緩存內(nèi)容包含用戶會(huì)話,視圖數(shù)的更新。直接緩存在內(nèi)存中。站點(diǎn)級(jí)緩存:能被同一個(gè)站點(diǎn)的所有服務(wù)器訪問。大部分的緩存都在這一級(jí),比如熱點(diǎn)問題ID列表,用戶支持率。緩存數(shù)據(jù)存儲(chǔ)在Redis數(shù)據(jù)庫中。Redis速度很快,緩存查找的開銷主要在網(wǎng)絡(luò)傳輸上。緩存數(shù)據(jù)發(fā)送至Redis之前會(huì)被壓縮。為什么要壓縮呢?因?yàn)镃PU資源綽綽有余,而且大部分緩存數(shù)據(jù)是字符串,壓縮率會(huì)很高,何樂而不為呢。Redis服務(wù)器上的CPU使用率是0%。全局緩存:被所有站點(diǎn)和服務(wù)器共享。緩存內(nèi)容包含收件箱,API使用限額,一些全局設(shè)置等。緩存于Redis數(shù)據(jù)庫中。大部分緩存項(xiàng)目在超過緩存時(shí)間之后會(huì)自動(dòng)過期(通常幾分鐘),不需要進(jìn)行刪除操作。當(dāng)需要讓一個(gè)特定的緩存失效,會(huì)通過Redis消息系統(tǒng)給一級(jí)緩存發(fā)送刪除通知。Joel Spolsky(Stack Overflow的創(chuàng)始人)并不是微軟的忠誠分子,他不負(fù)責(zé)技術(shù)決策,使用微軟軟件考慮的也只是性價(jià)比(這句可能翻譯不準(zhǔn)確)。Hacker News上一些評(píng)論者的說法需要糾正。對(duì)于IO系統(tǒng),他們選擇的是Intel X25 solid state drives(SSD硬盤)的RAID 10磁盤陣列,這樣的磁盤陣列,保證了可靠性。這個(gè)SSD硬盤用起來感覺不錯(cuò),而且價(jià)格比FusionIO的便宜。使用的這些微軟軟件,如果全部購買的話,總費(fèi)用大概在24.2萬美元。由于Stack Overflow參加了微軟的Bizspark計(jì)劃,所以不需要付這么多錢,但是要付的話,最多也就是這么多。
轉(zhuǎn)載于:https://blog.51cto.com/yerik/1159519
總結(jié)
以上是生活随笔為你收集整理的.NET大型Web站点StackOverflow架构分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 学习日志
- 下一篇: onInterceptTouchEven