我想为运行在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