我想爲運行在Windows Azure上的MVC Web應用程序使用全局數據(例如類似於具有新消息的用戶列表的東西)。如何在Azure實例之間共享狀態?
對於一個普通的web應用程序,我可以使用一些像AppDomain.SetData一樣的appdomain存儲或者只是使用靜態變量。我應該爲Azure使用什麼(緩存?blob存儲?隊列?)以及什麼解決方案是最快的?
我想爲運行在Windows Azure上的MVC Web應用程序使用全局數據(例如類似於具有新消息的用戶列表的東西)。如何在Azure實例之間共享狀態?
對於一個普通的web應用程序,我可以使用一些像AppDomain.SetData一樣的appdomain存儲或者只是使用靜態變量。我應該爲Azure使用什麼(緩存?blob存儲?隊列?)以及什麼解決方案是最快的?
AppFabric的緩存是非常適合在角色(或同一角色的實例)之間共享數據。關於AppFabric Cache的一個有趣的事情是,它不僅僅適用於ASP.NET會話狀態 - 它恰好是位於緩存之上的開箱即用的ASP.NET會話狀態提供程序。
使用緩存幾乎是微不足道的。下面是從一個命令行控制檯應用程序演示片段:
var dataCacheFactory = new DataCacheFactory();
DataCache dataCache = dataCacheFactory.GetDefaultCache();
Console.Write("Enter a string to cache: ");
string value = Console.ReadLine();
dataCache.Put("key", value);
string response = (string)dataCache.Get("key");
Console.WriteLine("Cached string: " + response);
使用它作爲會話狀態提供者需要零代碼的變化 - 這一切都通過在app.config/web.config中驅動。
vtortola對於CTP中的AppFabric Cache做了一個很好的說明,但我們應該看到在近期的生產中。
根據查詢的複雜性,表存儲也可以正常工作。聽起來好像您的查詢會相對簡單。
由於AppFabric Cache的定價尚未公佈,因此這可能會影響您的決定,比如表格存儲(運行價格爲0.15美元/ GB)以及相關交易(儘管交易不會對您造成任何顯着影響)成本,每10,000筆交易爲0.01美元)。
EDIT 2012年6月7日定價信息自原來的答案變了:
我認爲表存儲可以做,但也許AppFabric緩存服務會更適合您的需要,但請記住,最後一個仍然在CTP中。
對於你所說的,我會與表存儲。像在userId分區的表格中檢索最後一條消息並通過DateTime鍵入是非常快的。
乾杯
對於 「每用戶數據」,那麼你可以使用ASP.Net Session對象。
要使會話跨多個角色工作,您需要在web.config中指定跨進程會話提供程序。微軟已經提供了幾個例子提供商已經
爲 「全局狀態記憶」,那麼我絕對推薦應用結構緩存或者有一些社區貢獻 - 例如memcached的http://www.davidaiken.com/2011/01/11/windows-azure-memcached-plugin/
如果你的數據的一致性並不重要,那麼你總是可以只使用每個實例緩存在內存中 - 這將是最快的路線,將是最終一致......
上次檢查時,表存儲提供程序不會在未修改最新SDK的情況下構建。我不會推薦它。 – 2011-03-22 12:08:30
遠離表存儲提供程序,它只是一個示例,並存在嚴重的併發問題。在應用結構緩存超出CTP之前,請使用SQL會話提供程序。 http://stackoverflow.com/questions/4937544/asp-net-session-state-provider-in-azure – knightpfhor 2011-03-22 18:37:46
Offtopic:AppFabric Cache如何管理併發? – vtortola 2011-03-22 16:01:32