2013-04-11 64 views
1

Im在單個Web服務器(IIS 8/Windows Server 2012)上跨多個Web應用程序訪問單個緩存的場景掙扎着。正確緩存多個站點的體系結構

目前我們有一個16GB內存的服務器,只運行一個站點。 爲了討論起見,可以說這個網站自己消耗10GB內存(我知道很多)

它將所有內容存儲在System.Web.HttpRuntime.Cache中,其中檢索速度非常快。一個典型的場景是從這個緩存中檢索10,000個對象,它可以在幾個毫秒內完成。

當我想將另一個web應用程序添加到與服務器上運行的其他站點99.9%相同的服務器並理想地希望訪問此網站中的所有內容以使HttpRuntime.Cache快速點亮時,會變得棘手。

我看到的問題是,這個HttpRuntime.Cache無法在應用程序之間共享,只要我知道。

我試過AppFabric,Redis和NCache,所有分佈式緩存代理,並且它們可以檢索相同的10,000個對象的絕對最快速度大約是2秒,這對於按需網站是沒有好處的。 (順便說一下,林肯定相當肯定這兩秒鐘的1.999是充滿解密這也是非常密集的CPU)

我是否缺少明顯的東西...一個服務器上的兩個Web應用程序訪問緩存不需要昂貴的序列化/反序列化?或者是時候分出一個新的網絡服務器了。

回答

0

我不能肯定這個,所以我會盡量做一個猜測:)

當使用Redis的獲得多個按鍵,確保你做一個單一的事務中(MULTI/EXEC)或至少你不會做每個鍵1次調用,因爲這是非常慢和低效率(網絡服務器會花很多時間去做IO)。

0

我瞭解您的情況。事實上,很多人都面臨同樣的問題。我會鼓勵你

使用的nCache的客戶端緩存功能,讓你緩存整個

分佈式緩存的子集在.NET應用程序的進程內存。

使用Client Cache,您可以實現您的性能目標。而且,由於幕後的分佈式緩存,您仍然可以構建非常大的緩存。這是你無法用獨立的Http Cache做的事情。

讓我知道你是否想與NCache團隊中的某個人進行一對一的談話。