在负载平衡的HTTP服务中使用分布式缓存/存储

时间:2013-10-08 04:24:20

标签: .net rest caching asp.net-web-api appfabric

我正在使用.NET System.Runtime内存缓存在基于WebAPI的REST服务中存储瞬态资源。 资源代表“查询”。当客户端通过HTTP发出POST时,我们会生成一个ID并将查询粘贴到Cache中。 有关情景的更多细节可以在here找到。

当客户端发出GET时,将从内存缓存中检索资源并执行“查询”。 这通常可以正常工作但在负载平衡的情况下失败,因为客户端可以命中实例1以POST“查询”并命中实例 2得到结果。

我正在寻找选项,以使其能够在负载平衡的情况下工作。 从性能的角度来看,写入数据库的“查询”对象是不可行的,也是由于瞬态性质 的查询。

一种可能的解决方案是使用分布式缓存服务,例如“AppFabric”,但我想在性能和实施复杂性方面对其他选项进行加权。

非常感谢思想/指导。

TIA

2 个答案:

答案 0 :(得分:3)

为了涵盖所有基础,有两种方法可以缓存数据:

<强>是InProc

在Proc缓存中存储当前应用程序域中的数据(在应用程序进程中)。当您的应用程序在单个服务器上运行时,这可以正常工作,但在负载平衡的情况下,如果涉及多个Web服务器,则此设置将失败,如您所述。客户端的初始POST可以由一个Web服务器处理,但是下一个可以由另一个没有客户端第一个请求记录的服务器处理。

Out Proc

OutProc缓存允许您在单独的计算机上将会话和应用程序数据存储在应用程序进程之外。 ASP。 NET允许3个OutProc缓存选项:

  • StateServer

StakeServer允许您从Web场缓存数据,以解决您的初始问题,但由于序列化和反序列化,其性能很慢。还存在可靠性和可伸缩性问题,因为您只能拥有一个可以成为单点故障的StateServer。

  • SQL Server

SQL Server提供会话模式,允许您存储会话数据。由于这会将数据存储在数据库中,因此性能受到了影响,但它确实为您提供了可靠且安全的会话管理

  • 自定义提供商

这些是提供分布式缓存的自定义缓存解决方案。这些解决方案提供的功能比StateServer和SQL Server提供的功能更多。

正如您所提到的AppFabric是我的Microsoft提供的一个.NET分布式缓存解决方案。它为您提供了基本的分布式缓存功能,但它缺少一些关键功能,例如数据库同步,它允许您将缓存的数据与数据库同步,以及“热应用”,您可以在其中添加或删除缓存集群中的节点而无需停止缓存。 AppFabric使用主/从体系结构来组织其缓存集群,这对大多数应用程序来说都很好,但如果“引导节点”出现故障,它可能会出现可用性问题。

NCache是​​另一种.NET分布式缓存解决方案,它提供了AppFabric中缺少的许多功能。它使用点对点集群架构,提供高弹性缓存和高可用性。 NCache还为NHibernate for Object Relation Mapping提供支持。  您可以在他们的网站http://www.alachisoft.com/ncache/上查看NCache。他们提供免费使用的NCache Express

答案 1 :(得分:2)

你知道CacheCow吗?您当前的webapi项目很容易setup and integrate作为消息处理程序 使用Redis实现(内置选项)也应该集中且非常快。