.net高並發的解決方案(轉)


.net高並發的解決方案

測試方法:
本地模擬測試網站高訪問高並發采用的測試工具是大名鼎鼎的Loadrunner,這個工具做測試的一般都知道。在代震軍的博客中,有以下幾篇介紹了通過Loadrunner進行壓力並發測試。

當DiscuzNT遇上了Loadrunner(上)
http://www.cnblogs.com/daizhj/archive/2009/09/25/1573926.html

當DiscuzNT遇上了Loadrunner(中) 
http://www.cnblogs.com/daizhj/archive/2009/09/27/1574897.html

當DiscuzNT遇上了Loadrunner(下) 
http://www.cnblogs.com/daizhj/archive/2009/09/27/1575091.html


Discuz!NT是一個論壇程序,是典型的互聯網應用,在設計時本身就考慮了互聯網應用場景下高並發高訪問量的需求,在普通開源版本中,主要采用的緩存機制來提高系統的性能。

一、緩解數據庫讀取壓力

 

相關文章如下:
Discuz!NT 緩存設計簡析 [原創] 
http://www.cnblogs.com/daizhj/archive/2007/08/15/855163.html

這個緩存機制使用的是.Net本身提供的緩存功能,System.Web.Caching.Cache
這個方案可以解決一般訪問量不是很大的站點的需求,更高一級的,可以通過增加Web園工作進程來達到提升性能的需求,而且這個方案里面,已經解決多進程下緩存同步的問題。


在Discuz!NT企業版中,提供了更高層次的解決方案,使用了分布式緩存機制,引入了Memcached、Redis、LLServer,相關文章如下:

Discuz!NT中集成Memcached分布式緩存
http://www.cnblogs.com/daizhj/archive/2009/03/23/1386652.html

 

在Discuz!NT中進行緩存分層(本地緩存+memcached)  
http://www.cnblogs.com/daizhj/archive/2009/11/17/1604436.html

 

Discuz!NT中的Redis架構設計

http://www.cnblogs.com/daizhj/archive/2011/02/21/1959511.html

 

Discuz!NT跨站緩存同步

http://www.cnblogs.com/daizhj/archive/2010/06/18/discuznt_memcache_syncdata.html

 

Discuz!NT中的LLServer架構設計

http://www.cnblogs.com/daizhj/archive/2011/08/26/discuznt_llserver_arch.html

 


Memcached是danga.com(運營LiveJournal的技術團隊)開發的一套分布式內存對象緩存系統,用於在動態系統中減少數據庫負載,提升性能。具體的介紹可以參考:

Memcached深度分析
http://www.cnblogs.com/luluping/archive/2009/01/14/1375456.html

通過以上的方案,能解決大部分高訪問高並發的需求,因為論壇產品的特殊性,讀寫比大概是4:1,所以首先應該在讀數據方面進行減壓優化。

 

二、緩解Web服務器壓力

 

Discuz!NT在緩解Web服務器壓力上采用了如下的方案。

 

  1. 將用戶上傳的附件通過FTP方式傳送到另外一台服務器上,相關的文章如下:

  Discuz!NT中遠程附件的功能實現[FTP協議]

  http://www.cnblogs.com/daizhj/archive/2008/07/28/1254648.html


3. 通過SQUID將靜態文件緩存分布
使用SQUID做靜態前端,將論壇中的大部分靜態文件布署或外鏈到一個新的HTTP鏈接上,從而給Web服務器減壓,提升性能。

Discuz!NT靜態文件緩存(SQUID)解決方案
http://www.cnblogs.com/daizhj/archive/2010/06/10/1692758.html


三、負載均衡

 

通過以上的方案,Web服務器壓力小了,性能也提升了,但是如果遇到更高的並發訪問量,單台Web服務器還是不能滿足需求,Discuz!NT采取了負載均衡的方案。使用了LVS+KEEPALIVED、NGINX等。相關文章如下:

 

    Discuz!NT負載均衡解決方案(HA)之---LVS(Linux Virtual Server)
    http://www.cnblogs.com/daizhj/archive/2010/06/13/1693673.html

 

    Discuz!NT負載均衡解決方案(HA)之---LVS(Linux Virtual Server)

    http://www.cnblogs.com/daizhj/archive/2010/06/13/1693673.html

 

    Discuz!NT負載均衡方案

    http://www.cnblogs.com/daizhj/archive/2010/06/24/1667422.html

 

    使用的是nginx,使用nginx作為前端負載均衡,這個確實很有吸引力,有時間能試用下就好。

 

 
四、緩解數據庫壓力


在Discuz!NT中,數據庫作為數據持久化工具,必定在並發訪問頻繁且負載壓力較大的情況下成為系統性能的‘瓶頸’。即使使用上面的本地緩存等方式來解決頻繁訪問數據庫的問題,但仍舊會有大量的並發請求要訪問動態數據, 其中的‘讀寫分離’方案就是一種被廣泛采用的方案。相關文章:

 

    Discuz!NT數據庫讀寫分離方案

    http://www.cnblogs.com/daizhj/archive/2010/06/21/dbsnap_master_slave_database.html

    全文搜索方案:

    Discuz!NT企業版之Sphinx全文搜索(上)

    http://www.cnblogs.com/daizhj/archive/2010/06/28/discuznt_entlib_sphinx_one.html

 

     Discuz!NT企業版之Sphinx全文搜索(下)

    http://www.cnblogs.com/daizhj/archive/2010/06/30/discuznt_entlib_sphinx_two.html

 

    處理大數據量:

    Discuz!NT千萬級數據量上的兩駕馬車--TokyoCabinet,MongoDB

    http://www.cnblogs.com/daizhj/archive/2010/07/22/1781140.html

 

好了,上面就是Discuz!NT企業版為了提升性能采取的一系列方案,確實對asp.net互聯網應用很有參考價值,其中用到的很多開源產品都是基於Linux的,如Memcached、Redis、LLServer、SQUID、NGINX、LVS、Sphinx,雖然有些產品有Windows版本,但是其性能表現能力遠遠比不上Linux上面,看來在Web應用上,性能方面的表現以及開源產品的研究,Linux遠遠的走在了Windows前面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM