原文來自於:http://www.infoq.com/cn/news/2015/07/scaling-stack-overflowgit
在New York QCon 2015大會上,David Fullerton 深刻解析瞭如何使用C#/ MS SQL支撐Stack Overflow網站的單塊應用架構,這個網站每個月處理40多億的用戶請求。Fullerton 認爲,關注性能就能夠幾乎免費地使網站具有應付高併發的擴展能力;同時,經過減小對外部服務的調用,SOA開銷(SOA tax) 得以免。github
Fullerton, Stack Exchange的工程部副總裁,在演講開篇就指出儘管Stack Exchange旗下網站使用的技術架構很平庸,但網站使用如此陳舊技術仍能運行良好的方法卻頗有趣。Stack Exchange 掌控並運營着幾個社區類「問答」風格網站,包括廣受歡迎的Stack Overflow 開發者問答門戶網。數據庫
Stack Exchange團隊徹底以遠程方式協同工做,即使團隊成員在同一地點辦公,公司也鼓勵員工相互之間僅僅使用遠程協同的方式,例如使用即時通信工具和缺陷跟蹤程序。Fullerton 說,正是因爲公司保持一種「僱傭聰明員工並不妨礙他們」的心態,從而使系統管理員和全棧工程師組成一個高效團隊,共同構建並維持網站平穩運行。緩存
Stack Exchange旗下的網站在設計時都使用了一種升級版單塊應用(monolith plus)的架構,幾乎全部的應用邏輯都由C#的Web層以及MS SQL數據庫實現。這個規則也有一些例外,例如標記相關邏輯已經從單塊應用中提取成標記引擎服務,緩存服務則由幾臺Redis服務器提供,同時ElasticSearch服務器提供全文搜索功能。服務器
開發團隊將網站的應用程序部署到兩個數據中心,從而增長系統的總體容錯能力,紐約機房做爲主數據中心,俄勒岡機房做爲備援數據中心。開發團隊以滾動部署應用的方式更新整個Web層的服務器,這種部署操做天天都會發生,從白天到晚上。新功能的測試由一組真實用戶執行,這些測試用戶則是由一系列特性標記自動選擇出來的。架構
咱們首先會在部分網站上嘗試(新功能),並觀察運行的狀況。這種方法對咱們頗有效。咱們網頁的特性是在單個頁面(問答頁]上有很高的讀負載,而並不像其餘網站的頁面有那麼多客戶化的內容,並且咱們有一個比較寬容的用戶社區。併發
Stack Exchange的研發理念是「先用咱們熟悉的技能,度量問題,修復慢的地方」。最初的開發人員只瞭解C#和MS SQL,所以咱們今天仍在使用這樣的開發堆棧。早期的Web應用程序利用到幾個現成的工具:ASP.Net MVC,Linq到SQL的轉換,MS SQL全文搜索和內置緩存。Fullerton 表示,在Stack Exchange,因爲關注客戶體驗,並考慮到搜索引擎對於性能好的網站會有正向權重,因此性能是一個重要的功能特性。 Stack Exchange一般都會在實際的負載下測試(不容許任何猜想和假設),開發團隊會將性能問題看成務必儘快解決的缺陷。app
整個網站架構有很好的併發處理能力。咱們每個月處理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