2011-05-18 28 views
1

有人可以給我一些一般性的建議/最佳實踐,鏈接,良好的文檔,對如何改變你的應用/服務器/數據庫結構或技術提示,當整體性能是使用由於數據庫中的大量記錄以及由於網站獲得的點擊量增加而放緩。增加ASP.NET網站使用和不斷增長的SQL數據庫表

我已經花了一些時間優化查詢,使用額外的索引或更少,儘可能緩存等。我的網站當前運行在一個服務器上,另一個用於SQL,目前沒有問題,但我喜歡就這個問題進行更多的調查,而是做好準備。我沒有平衡多個服務器或如何解決這個問題的經驗,或者可能使用某些非常適合處理大數據的編碼設計模式。但我也不確定最好的資源是如何進行調查的。 (我運行ASP.NET網站與SQL2005數據庫,網站和數據庫單獨的服務器上,並有25萬左右的用戶帳戶,每天10K獨特的訪問,我也對CPU供電,當它不能處理請求之前再升級,但升級後,一切都很好,我也記錄和監測性能)

我也想知道的是,當這些性能問題將開始上升..是否有任何良好的資源顯示平均值,已經解決了這些問題,並解釋在什麼時間點出現問題,以及爲什麼以及解決方案是什麼樣的設計模式實際上造成了差異等。

我知道這個問題可能太籠統了,可以走多少方向,我不知道在哪裏從此開始。任何有關該主題的幫助/有用鏈接都非常受歡迎。

回答

1

首先:每天10K獨特的訪問是花生,如果你有一個優化的網站/數據庫。我們每天提供10.000.000次綜合瀏覽量,可以通過單個網頁和單個數據庫服務器處理(如果我們想:-))。

一些建築的東西,你可以看看試圖向外擴展時進入。

優化讀取
高速讀取確保你的網站感覺快,非規範化的數據,以便您可以處理一個查詢中請求數據的99%。這裏的一個策略是將所有數據存儲在類似「真相」的數據庫中,併爲您的前端分配數據庫,這些數據庫包含高度非規範化和優化的數據。你可以使用像nServiceBus這樣的工具來處理這個問題。

這裏的很酷的事情是,你可以擴展你的Web和數據庫服務器,因爲他們不再依賴寫入。他們只讀取。

不要做現場寫
寫入是沉重的,尤其是在大型數據集,因爲所有的指標將被更新。因此,將所有寫入操作存儲到類似MSMQ的隊列中,批量寫入所有寫入操作並將其存儲在「真值」數據庫中。 ESB然後將處理對前端數據庫的寫入。因爲用戶希望直接在屏幕上看到寫入內容,請將其放入緩存中,這樣他們就不會注意到寫入操作尚未處理。

緩存一切
緩存,緩存,緩存。像memcached一樣使用分佈式緩存,所以當您擴展時,可以將緩存負載分散到所有服務器上。

無效宣告:F.E.當你有像應用程序一樣的Facebook'Wall'時。打開所有用戶的朋友的'牆'緩存,並將該帖子添加到條目中。Memcached速度非常快,所以其中的200個是花生,並且用戶在檢查牆時不必訪問數據庫。

+0

@揚jongboom:非常感謝您的投入,這是一些非常有用的信息:)我會考慮你上面提到的事情。現在對於排隊和高速緩存的寫入,如果我將高速緩存寫入並將它們排隊以供稍後處理,如果我的IIS將回收,則會丟失我的高速緩存,並且因爲我的寫入未處理,所以我將顯示錯誤信息。我想像memcached這樣的解決方案可以處理這個問題,並且有必要從IIS發生的任何事情中獲得關鍵數據緩存? PS。我將離開這個開放爲一些額外的輸入一天,然後標記爲答案:) – Steven 2011-05-18 12:04:45

+0

不要將數據放到ASP.NET緩存,使用ASP.NET緩存,如果你需要,可以很容易地從恢復快如閃電的數據數據庫。在多個節點上使用分佈式緩存進行緩存寫入。 AppFabric緩存(來自Microsoft)也提供這種緩存。 – 2011-05-19 08:14:03

+0

@ jan-jongboom:很感謝,有很多東西要看:) – Steven 2011-05-19 15:22:02