Stack Overflow通過關注性能,實現單塊應用架構的擴展能力

jopen 9年前發布 | 13K 次閱讀 Stack Overflow

 

在New York QCon 2015 大會上,David Fullerton 深入解析了如何使用C#/ MS SQL支撐Stack Overflow網站的單塊應用架構,這個網站每月處理40多億的用戶請求。Fullerton 認為,關注性能就可以幾乎免費地使網站具備應付高并發的擴展能力;同時,通過減少對外部服務的調用,SOA開銷(SOA tax) 得以避免。

FullertonStack Exchange 的工程部副總裁,在演講開篇就指出盡管Stack Exchange旗下網站使用的技術架構很平庸,但網站使用如此陳舊技術仍能運行良好的方法卻很有趣。Stack Exchange 掌控并運營著幾個社區類“問答”風格網站,包括廣受歡迎的 Stack Overflow 開發者問答門戶網。

Stack Exchange團隊完全以遠程方式協同工作,即便團隊成員在同一地點辦公,公司也鼓勵員工相互之間僅僅使用遠程協同的方式,例如使用即時通訊工具和缺陷 跟蹤程序。Fullerton 說,正是由于公司保持一種“雇傭聰明員工并不妨礙他們”的心態,從而使系統管理員和全棧工程師組成一個高效團隊,共同構建并維持網站平穩運行。

Stack Exchange旗下的網站在設計時都使用了一種升級版單塊應用(monolith plus)的架構,幾乎所有的應用邏輯都由C#的Web層以及MS SQL數據庫實現。這個規則也有一些例外,例如標記相關邏輯已經從單塊應用中提取成標記引擎服務,緩存服務則由幾臺Redis服務器提供,同時 ElasticSearch服務器提供全文搜索功能。

Stack Overflow通過關注性能,實現單塊應用架構的擴展能力

開發團隊將網站的應用程序部署到兩個數據中心,從而增加系統的整體容錯能力,紐約機房作為主數據中心,俄勒岡機房作為備援數據中心。開發團隊以滾 動部署應用的方式更新整個Web層的服務器,這種部署操作每天都會發生,從白天到晚上。新功能的測試由一組真實用戶執行,這些測試用戶則是由一系列特性標 記自動選擇出來的。

我們首先會在部分網站上嘗試(新功能),并觀察運行的情況。這種方法對我們很有效。我們網頁的特性是在單個頁面(問答頁]上有很高的讀負載,而并不像其他網站的頁面有那么多客戶化的內容,而且我們有一個比較寬容的用戶社區。

Stack Exchange的研發理念是“先用我們熟悉的技能,度量問題,修復慢的地方”。最初的開發人員只了解C#和MS SQL,因此我們今天仍在使用這樣的開發堆棧。早期的Web應用程序利用到幾個現成的工具:ASP.Net MVC,Linq到SQL的轉換,MS SQL全文搜索和內置緩存。Fullerton 表示,在Stack Exchange,由于關注客戶體驗,并考慮到搜索引擎對于性能好的網站會有正向權重,所以性能是一個重要的功能特性。 Stack Exchange通常都會在實際的負載下測試(不允許任何猜測和假設),開發團隊會將性能問題當作務必盡快解決的缺陷。

整個網站架構有很好的并發處理能力。我們每月處理40億次請求,峰值為每秒3000次,每天有8億次SQL查詢,峰值為每秒8500次。

Fullerton說,隨著時間的推移,初始技術棧中的主要部分已被取代:引入Redis以提供緩存,添加ElasticSearch以改善全文 搜索能力,通過使用定制的中間語言生成框架來替代原有的實體層對象映射方式,從而提高SQL訪問的效率,同時兼顧擴展性和新功能需求,從原有的單塊應用中 抽取出標簽相關邏輯,形成獨立的標簽引擎服務。

工具對于識別和監控性能問題很有幫助,例如 miniprofiler 可以分析用戶請求并檢測性能瓶頸, Opserver 用于監控, Dapper 可以分解追蹤請求。Fullerton表示,對性能的關注會帶來很多好處。

你可以通過優化性能而提升擴展能力(幾乎免費)。單塊應用的擴展能力超出你的想象。

Fullerton的結論是,這種升級版單塊應用的架構在Stack Exchange非常成功。盡管這種架構可能顯得陳舊無聊,但團隊堅持這種方式的過程非常有趣。微服務架構的風格可能在當今很流行,但Fullerton 警告說,過度使用這種模式,就必須承擔這種模式固有的各種SOA開銷(SOA tax)。

SOA不是唯一的成功之路。我們要知道自己的問題領域,在解決實際問題的過程中,提取服務去解決實際困難,而不是虛幻地想象各種服務。

你可以在QCon New York會議網站上找到更多關于David Fullerton演講“ Scaling Stack Overflow: Keeping it Vertical by Obsessing Over Performance ” 的信息。

查看英文原文: Scaling the Stack Overflow Monolithic App by Obsessing Over Performance

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!