先定個小目標, 使用C# 開發的千萬級應用

 

dotNET跨平臺

opendotnetlinux

在這裏你能夠談微軟.NET,Mono的跨平臺開發技術,也能夠談談其餘的跨平臺技術。
在這裏可讓你的.NET項目有新的思路,不侷限於微軟的技術棧,橫跨Windows,Linux 主流平臺
程序員

話說昨天的港股發生了一件大事,騰訊成爲亞洲市值最高的公司,在這歷史性的一刻,做爲在鵝廠工做的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.5ASP.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框架的參數優化:

  1. 採起NETTCP綁定,保證框架通訊的高效率

  2.  序列化:xml -> rest\json ->protobuf,適配器模式,使用protobuf替代wcf默認的二進制序列化,這裏就能夠6倍的性能提高。

  3.  根據服務流量調整WCF流量限制配置的值  

 

  整體來講,TOF總體架構並無採用那些很是高端的技術,使用的都是很是普通的.NET技術,混合使用Windows/Linux和開源技術照樣能夠打造高性能高併發的應用系統。 

 

相關文章:

相關文章
相關標籤/搜索