如何在Azure实例之间共享状态?

时间:2011-03-22 09:22:43

标签: asp.net azure state

我想使用在Windows Azure上运行的MVC Web应用程序的全局数据(例如,具有新消息的用户列表)。

对于普通的webapp,我可以使用一些每appdomain存储,如AppDomain.SetData或只是静态变量。我应该为Azure使用什么(缓存?blob存储?队列?)以及哪种解决方案最快?

4 个答案:

答案 0 :(得分:8)

对于“每用户数据”,您可以使用ASP.Net会话对象。

要使Session跨多个角色工作,您需要在web.config中指定跨进程的Session提供程序。 Microsoft已经提供了几个示例提供程序

对于“全局状态记忆”,我绝对推荐App Fabric Caching或者有一些社区贡献 - 例如memcached http://www.davidaiken.com/2011/01/11/windows-azure-memcached-plugin/

如果数据的一致性不重要,那么你总是可以在内存中使用每个实例的缓存 - 这将是最快的路径并且最终会保持一致......

答案 1 :(得分:5)

AppFabric Cache非常适合在角色(或同一角色的实例)之间共享数据。关于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美元。

编辑2012年6月7日自最初答案后,定价信息发生了变化:

  • 缓存服务正在投入使用,起价为45美元(128MB)(完整定价详情here)。
  • 现在每100,000交易的交易金额为0.01美元,存储起价为每GB 0.125美元,并根据数量下降(详见here)。
  • 现在有一个新的缓存功能可以在您的Web或辅助角色实例中启用,使用一定百分比的可用RAM,并且成本为零。您还可以创建独立的缓存角色。全新的SDK v1.7都支持这两种功能。 Scott Guthrie blogged关于新功能(包括缓存)。

答案 2 :(得分:3)

我认为Table Storage会这样做,但AppFabric缓存服务可能会更合适,具体取决于您的需求,但请记住,最后一个仍然在CTP中。

对于你所说的,我会选择桌面存储。执行诸如检索由userId分区并由DateTime键入的表中的最后消息的操作非常快。

干杯

答案 3 :(得分:3)

AppFabric Cache是​​一项过时的服务......对于新开发使用Azure Redis缓存。