2014-10-10 24 views
3

我們正在將一個asp.net站點移動到Azure Web角色和Azure Sql數據庫。該站點使用輸出緩存和正常的Cache [xxx](即HttpRuntime.Cache)。這些現在以經典方式存儲在Web角色實例內存中。Azure Redis緩存和用於輸出緩存的In-role緩存之間的性能差異

低懸的成果是首先開始使用分佈式緩存進行輸出緩存。我可以使用角色內緩存,既可以作爲共同位置,也可以使用專用緩存角色或Redis緩存。兩者都有輸出緩存提供程序。

這兩種(共存/專用)緩存方法之間是否存在任何性能差異?

需要考慮的一件事是,從每個服務器上的每個頁面載入,從每個服務器的頁面載入中獲取頁面的速度會比從頭創建一個頁面更快或更慢,每隔120秒每個服務器一次,但只能從本地內存獲取該頁面?

當我們想開始在分佈式緩存而不是HttpRuntime.Cache中緩存我們自己的數據(即pocos)時,哪個規模會更好?

-Mathias

回答

9

接聽單獨您的每一個問題:

是否有任何兩者之間的性能差異(你有 協同定位/專用)高速緩存的方法呢?

肯定共同定位的高速緩存解決方案比專用高速緩存服務器更快,如在共同定位/ INPROC溶液請求將所述的過程,其中作爲專用緩存解決方案將涉及通過網絡獲取數據內本地處理。但是,由於數據將在緩存服務器上存儲在內存中,所以獲取數據仍然會比從數據庫獲取更快。

有一點要考慮的是將獲得從Redis的頁面爲 每個服務器上的每個頁面加載更快或更慢不是從頭開始每隔一個服務器組成 頁每120秒,但其間的 剛剛從本地記憶?

這取決於頁面上的對象數量,即從頭開始編寫頁面所用的時間。儘管從緩存中獲取將涉及網絡旅行時間,但其大部分時間只有幾分之一毫秒。

當我們要開始一個分佈式緩存,而不是HttpRuntime.Cache緩存我們自己的數據 (即波蘇斯),這將更好的規模?

由於HttpRuntime.Cache是​​進程內緩存,因此它僅限於單進程內存,因此它不可伸縮。另一方面,分佈式緩存是一個可擴展的解決方案,您可以隨時添加更多服務器以增加緩存空間和吞吐量。分佈式緩存解決方案的超級本質使得可以訪問應用程序緩存的數據以供任何其他進程使用。

您還可以查看NCache for Azure作爲分佈式緩存解決方案。 NCache是一個原生的.Net分佈式緩存解決方案。

繼伊克巴爾汗博客文章將幫助您更好地瞭解ASP.Net應用程序需要分佈式緩存的:

我希望這有助於:-)

-Sameer

+0

Tha答案是肯定的。我繼續開始使用Azure Redis緩存和StackExchange.Redis的outputcache提供程序。相對於標準的進程內輸出緩存,速度當然是缺乏的。在Marc Gravell添加2層緩存(本地內存緩存與共享Redis中央緩存,包括基於pub/sub的緩存到期通知等)之前,在宣佈Redis包的博客文章中「承諾」存在折衷。如果我假設我的應用程序將只使用一些Web角色,我將從內部輸出緩存中受益,但是當我開始使用更多的實例時,我將從分佈式緩存中進行修改。 – MathiasR 2014-10-21 07:42:34