話說昨天的港股發生了一件大事,騰訊成爲亞洲市值最高的公司,在這歷史性的一刻,做爲在鵝廠工做的C# 程序員,也應該讓世人瞭解下C# 並非那麼沒有市場。在鵝廠,代碼構成中60%以上是C++, C#也有10%左右的份額,後續的文章中我會和你繼續分享,固然若是你有興趣加入鵝廠會更快獲取相似信息,須要能夠找我內推。小二計劃寫幾篇文章來讓你們正確的認識下C#。web
當咱們還沒來得及把本身的夢想捂熱的時候,偉大的王老師一語驚醒了全部吃瓜的圍觀羣衆——人嘛,光着眼於夢想是不行滴,仍是要先定一個能達到的小目標。一個一天處理5000萬級別的應用,換算成每秒578個請求,固然應用不會這麼平淡,有高峯有低谷,不過這也不是很難達到的目標,咱們就來看看這樣的一個小目標如何實現,這裏分享的是個人一個真實案例:騰訊OA基礎服務,簡稱TOF。數據庫
首先給出一個直觀的數據,讓你們有個初步的印象。json
2015-11-5 這天的組織架構API的請求數達到36535867,超過了三千萬的請求,這天的總請求數48922122,接近五千萬的請求。 後端
你很難想象到TOF使用的是.NET技術構建的,可以在天天幾千萬請求,能夠媲美一樣是.NET技術構建的StackOverflow社區,不過確實我也使用了大量StackOverflow開源的.NET技術,架構上也很是像StackOverflow。下面列下硬件列表:緩存
·6臺數據庫服務器(6臺SQL Server),其中3臺SQL Server 2012 Always集羣式核心數據庫使用的是物理服務器性能優化
·12臺Web服務器(IIS7.5),服務器是IT雲VD-6機器(8核32G內存)服務器
·2臺分佈式緩存服務器(Redis),服務器是IT雲VD-5機器(4核16G內存)微信
·8臺應用服務器(處理TOF的核心業務,使用WCF服務構建),服務器是IT雲VD-6機器(8核32G內存)
·IT雲提供的負載均衡服務器(LVS集羣)
這些服務器都是虛擬化的服務器,騰訊IT有個內部的私有云平臺的機器,比StackOverflow的服務器比起來要弱不少。可是我在程序的架構和性能優化方面作了不少,程序架構上採用微服務架構的思想,一圖勝千言,下面給出TOF的架構圖:
上面是整體的架構圖,那麼每一個具體的服務又遵循了單體應用的架構,使用的是N層服務,一圖勝千言,下面給出TOF的服務架構圖。
負載均衡(LVS)
負載均衡使用的LVS和tlinux,負載均衡器使用的是IT雲的LVS集羣,經過IT雲進行管理
Web層架構(IIS 7.5,ASP.Net MVC 5.2.1,和.Net 4.5.2)
TOF通過負載均衡層導入流量到12臺Web服務器, 分區域部署在2個地區,Web層經過WCF服務同後端的業務服務交互。
服務層(WCF 4.5, Net 4.5.2)
在總體邏輯架構圖上能夠清晰的看到,緊挨着Web層的是服務層(部署在Window服務器Windows 2008 R2上)。服務層基於WCF實現的微服務架構。爲了提高這服務作了很是多的冗餘,每一個服務都有至少3個實例。
緩存(Redis)
TOF在緩存層用Redis,Redis服務器16G內存,採用master/slave結構部署,儘管天天2500萬的ops,每一個實例的CPU使用率也在2%之下。
Redis所在服務器有L1/L2高速緩存,Web服務的HTTP緩存設置在一級緩存L1中,Redis緩存在二級緩存L2。當用戶訪問在一級緩存L1中未命中後會去二級緩存中的Redis取值,若是web服務在L1和L2兩級緩存都未命中,則會直接去原始數據源獲取(好比,數據庫查詢,API回調等),而後並把獲取到的結果緩存到本地和Redis中,這時其它服務未命中L1高速緩存便會去二級緩存L2/Redis中獲取,節省了調用數據庫查詢或者API回調的訪問時間。
OA登錄和組織架構都有本身的L1/L2高速緩存,經過L1緩存Key前綴、L2/Redis緩存數據庫ID。
貼張Redis緩存服務已經運行445天,處理了110億的請求的監控圖:
數據庫(SQL Server)
SQL Server是TOF惟一的源數據庫,全部Redis的數據都來自SQL Server。使用微軟的SQL Server監控組件AlwaysOn Availability Groups部署了一個SQL Server集羣。服務器集羣的配置也比較低4核32G 的A5機器。
全部數據庫過去24小時CPU監控圖如圖所示,大部分狀況CPU使用率較低,偶爾作下緩存任務時會高些。
細心的朋友可能看出上圖就是使用StackOverflow開源的Opserver所採集的數據。
.NET應用程序性能優化
TOF系統屬於高併發的系統,使用系統默認的配置是不行的,須要對操做系統和.NET框架作優化:
Windows優化:調整tcp鏈接數,保證系統層面保證服務的不受限於操做系統,調整操做系統的TCP/IP參數,好比把Time_Wait 時間窗口2分鐘à45秒,可用的端口數調整到65535,默認才5024個,對一個大併發的系統來講遠遠不夠。
Web服務器優化:根據服務器的CPU核數調整進程數和HTTP層相關配置。
WCF框架的參數優化:
採起NETTCP綁定,保證框架通訊的高效率
序列化:xml -> rest\json ->protobuf,適配器模式,使用protobuf替代wcf默認的二進制序列化,這裏就能夠6倍的性能提高。
根據服務流量調整WCF流量限制配置的值
整體來講,TOF總體架構並無採用那些很是高端的技術,使用的都是很是普通的.NET技術,混合使用Windows/Linux和開源技術照樣能夠打造高性能高併發的應用系統。
相關文章: