Stack Overflow通过关注性能,实现单块应用架构的扩展能力
在New York QCon 2015大會上,David Fullerton 深入解析了如何使用C#/ MS SQL支撐Stack Overflow網(wǎng)站的單塊應(yīng)用架構(gòu),這個網(wǎng)站每月處理40多億的用戶請求。Fullerton 認(rèn)為,關(guān)注性能就可以幾乎免費(fèi)地使網(wǎng)站具備應(yīng)付高并發(fā)的擴(kuò)展能力;同時,通過減少對外部服務(wù)的調(diào)用,SOA開銷(SOA tax) 得以避免。
\\Fullerton,? Stack Exchange的工程部副總裁,在演講開篇就指出盡管Stack Exchange旗下網(wǎng)站使用的技術(shù)架構(gòu)很平庸,但網(wǎng)站使用如此陳舊技術(shù)仍能運(yùn)行良好的方法卻很有趣。Stack Exchange 掌控并運(yùn)營著幾個社區(qū)類“問答”風(fēng)格網(wǎng)站,包括廣受歡迎的Stack Overflow 開發(fā)者問答門戶網(wǎng)。
\\Stack Exchange團(tuán)隊完全以遠(yuǎn)程方式協(xié)同工作,即便團(tuán)隊成員在同一地點(diǎn)辦公,公司也鼓勵員工相互之間僅僅使用遠(yuǎn)程協(xié)同的方式,例如使用即時通訊工具和缺陷跟蹤程序。Fullerton 說,正是由于公司保持一種“雇傭聰明員工并不妨礙他們”的心態(tài),從而使系統(tǒng)管理員和全棧工程師組成一個高效團(tuán)隊,共同構(gòu)建并維持網(wǎng)站平穩(wěn)運(yùn)行。
\\Stack Exchange旗下的網(wǎng)站在設(shè)計時都使用了一種升級版單塊應(yīng)用(monolith plus)的架構(gòu),幾乎所有的應(yīng)用邏輯都由C#的Web層以及MS SQL數(shù)據(jù)庫實現(xiàn)。這個規(guī)則也有一些例外,例如標(biāo)記相關(guān)邏輯已經(jīng)從單塊應(yīng)用中提取成標(biāo)記引擎服務(wù),緩存服務(wù)則由幾臺Redis服務(wù)器提供,同時ElasticSearch服務(wù)器提供全文搜索功能。
\\\\開發(fā)團(tuán)隊將網(wǎng)站的應(yīng)用程序部署到兩個數(shù)據(jù)中心,從而增加系統(tǒng)的整體容錯能力,紐約機(jī)房作為主數(shù)據(jù)中心,俄勒岡機(jī)房作為備援?dāng)?shù)據(jù)中心。開發(fā)團(tuán)隊以滾動部署應(yīng)用的方式更新整個Web層的服務(wù)器,這種部署操作每天都會發(fā)生,從白天到晚上。新功能的測試由一組真實用戶執(zhí)行,這些測試用戶則是由一系列特性標(biāo)記自動選擇出來的。
\\\我們首先會在部分網(wǎng)站上嘗試(新功能),并觀察運(yùn)行的情況。這種方法對我們很有效。我們網(wǎng)頁的特性是在單個頁面(問答頁]上有很高的讀負(fù)載,而并不像其他網(wǎng)站的頁面有那么多客戶化的內(nèi)容,而且我們有一個比較寬容的用戶社區(qū)。
\\\Stack Exchange的研發(fā)理念是“先用我們熟悉的技能,度量問題,修復(fù)慢的地方”。最初的開發(fā)人員只了解C#和MS SQL,因此我們今天仍在使用這樣的開發(fā)堆棧。早期的Web應(yīng)用程序利用到幾個現(xiàn)成的工具:ASP.Net MVC,Linq到SQL的轉(zhuǎn)換,MS SQL全文搜索和內(nèi)置緩存。Fullerton 表示,在Stack Exchange,由于關(guān)注客戶體驗,并考慮到搜索引擎對于性能好的網(wǎng)站會有正向權(quán)重,所以性能是一個重要的功能特性。 Stack Exchange通常都會在實際的負(fù)載下測試(不允許任何猜測和假設(shè)),開發(fā)團(tuán)隊會將性能問題當(dāng)作務(wù)必盡快解決的缺陷。
\\\整個網(wǎng)站架構(gòu)有很好的并發(fā)處理能力。我們每月處理40億次請求,峰值為每秒3000次,每天有8億次SQL查詢,峰值為每秒8500次。
\\\Fullerton說,隨著時間的推移,初始技術(shù)棧中的主要部分已被取代:引入Redis以提供緩存,添加ElasticSearch以改善全文搜索能力,通過使用定制的中間語言生成框架來替代原有的實體層對象映射方式,從而提高SQL訪問的效率,同時兼顧擴(kuò)展性和新功能需求,從原有的單塊應(yīng)用中抽取出標(biāo)簽相關(guān)邏輯,形成獨(dú)立的標(biāo)簽引擎服務(wù)。
\\工具對于識別和監(jiān)控性能問題很有幫助,例如miniprofiler可以分析用戶請求并檢測性能瓶頸,Opserver用于監(jiān)控,Dapper可以分解追蹤請求。Fullerton表示,對性能的關(guān)注會帶來很多好處。
\\\你可以通過優(yōu)化性能而提升擴(kuò)展能力(幾乎免費(fèi))。單塊應(yīng)用的擴(kuò)展能力超出你的想象。
\\\Fullerton的結(jié)論是,這種升級版單塊應(yīng)用的架構(gòu)在Stack Exchange非常成功。盡管這種架構(gòu)可能顯得陳舊無聊,但團(tuán)隊堅持這種方式的過程非常有趣。微服務(wù)架構(gòu)的風(fēng)格可能在當(dāng)今很流行,但Fullerton警告說,過度使用這種模式,就必須承擔(dān)這種模式固有的各種SOA開銷(SOA tax)。
\\\SOA不是唯一的成功之路。我們要知道自己的問題領(lǐng)域,在解決實際問題的過程中,提取服務(wù)去解決實際困難,而不是虛幻地想象各種服務(wù)。
\\\你可以在QCon New York會議網(wǎng)站上找到更多關(guān)于David Fullerton演講“Scaling Stack Overflow: Keeping it Vertical by Obsessing Over Performance” 的信息。
\\查看英文原文:Scaling the Stack Overflow Monolithic App by Obsessing Over Performance
\\感謝丁曉昀對本文的審校。
\給InfoQ中文站投稿或者參與內(nèi)容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ,@丁曉昀),微信(微信號:InfoQChina)關(guān)注我們,并與我們的編輯和其他讀者朋友交流(歡迎加入InfoQ讀者交流群)。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Stack Overflow通过关注性能,实现单块应用架构的扩展能力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对正在运行的mysql进行监控
- 下一篇: SpringFramework4系列之S