天天看點

Asp.net平台下網站性能調優的實戰方案.

前言

最近幫朋友營運的平台進行了性能調優,效果還不錯,是以寫出來一起交流一下。如果本文中有您覺的錯誤的,或者不明白的,請加QQ群:4656272,歡迎指正和一起探讨。(ps:鄙人文筆很差,看官請多擔待)

背景

朋友的平台網站屬于垂直型的資訊社群網站,原先是用ASP.NET 1.0開發的,後來更新到ASP.NET 2.0,資料庫為SQL SERVER 2000,作業系統為windows 2003 server,兩台伺服器,一台WEB伺服器,一台資料庫伺服器。目前大概有80幾萬的使用者帳戶,有30多萬條文章和200多W條文章。随着資料量的增長,負載也越來越大,經常出現無法通路,通路出錯或通路緩慢的情況。

解決

因為已經處于生産環境下,是以進行性能調優的前提是不影響現有的業務運作,可以進行無縫部署,如果出現問題可以迅速回退恢複。是以我準備分幾次來做調優,這樣比較穩妥的進行性能提升而不影響正常的業務運作。

第一步 運作環境調優

這一步很重要,在一個健康穩定的環境下,才能發揮平台最大性能表現,是以先給平台提供一個健康穩定的環境。

1 ASP.NET 環境調優

2 IIS環境調優

3 SQL SERVER調優

經過第一步的調優,性能有所提升,展現在無法通路或者通路出錯的情況減少了。是以開始進行第二步。

第二步 收集資料 找到平台性能弱點

(一) 前端優化

a) 将最終頁用DIV+CSS進行重構,合理的設定有效期,加快用戶端下載下傳和浏覽器DOM引擎渲染和呈現的速度。

b) 因為平台用了JQUERY庫,直接引用GOOGLE上的JS檔案,減少傳輸位元組和連接配接數,提高通路速度。

d) 關閉不必要的ASP.NET中的VIEWSTATE,減少傳輸位元組。

(二) 平台系統優化

通過最多的10條SQL語句和執行時間比較長的SQL語句中發現,很多都是因為文章頁最終頁和文章最終頁更新通路次數這種類似的更新引起的,起先是想加一台伺服器來做SQL SERVER的鏡像分發,插入、更新、删除全在一台上操作,另外一台機器隻能做查詢操作。

但是這樣增加的伺服器隻能做資料庫伺服器,并且系統上更改比較大,不是最好的方案。經過考慮,既然是更新的資料操作不需要實時,那麼加一台伺服器用CENTOS 5.x,裝上memcached,做增量更新,而且那台伺服器剩下的資源可以做其他事情,實作思路是先更新到memcached中,如果發現更新數達到一個阙值了,一次性更新到資料庫。平台的會員線上狀态,從資料庫也更改到了memcached中。

為了提高DAO層的性能,我建議他們的開發使用NHIBERNATE這個成熟的資料庫應用架構,使用了資料庫連接配接池,提高資料庫連接配接的重用性。

經過第二步改造,性能提升到一個新的階段。無法通路,通路出錯或通路緩慢的情況已經很少出現了。

但是優化時無止境的,而且目前的情況隻适合目前這個通路情況,等通路量再增加到現在的幾倍後,還會出現問題,是以我準備下一步優化。

第三步 架構優化

其他

在分析日志的過程中,發現很多通路時由于搜尋引擎的蜘蛛産生的,而由于此平台的文章最終頁沒有靜态化,是以引起了很多不必要的資料庫連接配接。我采取了以下方法:

1 合理的設定robots.txt,對于未知的或者不受歡迎的蜘蛛,在nginx中根據其agent直接rewrite到一個靜态頁面。

2 根據請求,生成靜态頁生成HTML。

至此此平台的性能有了明顯提升,無法通路,通路出錯或通路緩慢的情況再也沒出現過。

本文轉自chenkaiunion 51CTO部落格,原文連結:http://blog.51cto.com/chenkai/765312