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

.net 在负载平衡HTTP服务中使用分布式缓存/存储,.net,rest,caching,asp.net-web-api,appfabric,.net,Rest,Caching,Asp.net Web Api,Appfabric,我正在使用.NET System.Runtime内存缓存将临时资源存储在基于WebAPI的REST服务中。 资源表示一个“查询”。当客户端通过HTTP发出POST时,我们生成一个ID并将查询粘贴到缓存中。 有关场景的更多详细信息,请参见 当客户端发出GET时,将从内存缓存中检索资源并执行“查询”。 这通常可以正常工作,但在负载平衡的场景中失败,因为客户端可以点击实例1发布“查询”并点击实例 2.获得结果 我正在寻找一些选项,以便能够在负载平衡的情况下工作。 无论是从性能角度还是从瞬态性质来看,将

我正在使用.NET System.Runtime内存缓存将临时资源存储在基于WebAPI的REST服务中。 资源表示一个“查询”。当客户端通过HTTP发出POST时,我们生成一个ID并将查询粘贴到缓存中。 有关场景的更多详细信息,请参见

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

我正在寻找一些选项,以便能够在负载平衡的情况下工作。 无论是从性能角度还是从瞬态性质来看,将“查询”对象写入数据库都是不可行的 查询的最后一步

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

非常感谢您的想法/指导

TIA你知道吗?很容易将当前的webapi项目作为消息处理程序使用。
使用Redis实现(内置选项)也应该是集中的,而且速度应该非常快。

你知道吗?很容易将当前的webapi项目作为消息处理程序使用。

使用Redis实现(内置选项)也应该是集中且非常快速的。

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

InProc

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

输出过程

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

  • 状态服务器
StakeServer允许您将数据缓存到远离web场的位置,以解决初始问题,但由于序列化和反序列化,其性能较慢。还存在可靠性和可伸缩性问题,因为您只能有一个StateServer,它可能成为单点故障

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

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

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

NCache是另一个.NET分布式缓存解决方案,它提供了AppFabric中缺少的许多功能。它使用了一种对等集群体系结构,该体系结构提供了具有高可用性的高弹性缓存。NCache还支持NHibernate进行对象关系映射。
您可以在他们的网站上查看NCache。他们提供免费使用的服务。

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

InProc

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

输出过程

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

  • 状态服务器
StakeServer允许您将数据缓存到远离web场的位置,以解决初始问题,但由于序列化和反序列化,其性能较慢。还存在可靠性和可伸缩性问题,因为您只能有一个StateServer,它可能成为单点故障

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

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

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