最近幾天一直在讀代震軍的博客,他是Discuz!NT的設計者,讀了他的一系列關於 Discuz!NT的架構設計文章,大呼過癮,特別是Discuz!NT在解決高訪問高併發時所設計的一系列方案,本人尤爲感興趣。寫這篇文章的目的,算 是對初次閱讀以後的總結備忘吧,以便之後有時間親自測試,若是能在生產環境中獲得應用,那就更有參考價值了。html
測試方法:
本地模擬測試網站高訪問高併發採用的測試工具是大名鼎鼎的Loadrunner,這個工具作測試的通常都知道。在代震軍的博客中,有如下幾篇介紹了經過Loadrunner進行壓力併發測試。前端
當DiscuzNT趕上了Loadrunner(上)
http://www.cnblogs.com/daizhj/archive/2009/09/25/1573926.htmlnginx
當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是一個論壇程序,是典型的互聯網應用,在設計時自己就考慮了互聯網應用場景下高併發高訪問量的需求,在普通開源版本中,主要採用的緩存機制來提升系統的性能。服務器
1、緩解數據庫讀取壓力架構
相關文章以下:
Discuz!NT 緩存設計簡析 [原創]
http://www.cnblogs.com/daizhj/archive/2007/08/15/855163.html併發
這個緩存機制使用的是.Net自己提供的緩存功能,System.Web.Caching.Cache
這個方案能夠解決通常訪問量不是很大的站點的需求,更高一級的,能夠經過增長Web園工做進程來達到提高性能的需求,並且這個方案裏面,已經解決多進程下緩存同步的問題。負載均衡
在Discuz!NT企業版中,提供了更高層次的解決方案,使用了分佈式緩存機制,引入了Memcached、Redis、LLServer,相關文章以下:asp.net
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
http://www.cnblogs.com/daizhj/archive/2010/06/18/discuznt_memcache_syncdata.html
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,因此首先應該在讀數據方面進行減壓優化。
2、緩解Web服務器壓力
Discuz!NT在緩解Web服務器壓力上採用了以下的方案。
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
3、負載均衡
經過以上的方案,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
http://www.cnblogs.com/daizhj/archive/2010/06/24/1667422.html
使用的是nginx,使用nginx做爲前端負載均衡,這個確實頗有吸引力,有時間能試用下就好。
4、緩解數據庫壓力
在Discuz!NT中,數據庫做爲數據持久化工具,一定在併發訪問頻繁且負載壓力較大的狀況下成爲系統性能的‘瓶頸’。即便使用上面的本 地緩存等方式來解決頻繁訪問數據庫的問題,但仍舊會有大量的併發請求要訪問動態數據, 其中的‘讀寫分離’方案就是一種被普遍採用的方案。相關文章:
http://www.cnblogs.com/daizhj/archive/2010/06/21/dbsnap_master_slave_database.html
全文搜索方案:
http://www.cnblogs.com/daizhj/archive/2010/06/28/discuznt_entlib_sphinx_one.html
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前 面。