Asp.net 当我';我使用3台网络服务器?

Asp.net 当我';我使用3台网络服务器?,asp.net,asp.net-mvc,caching,Asp.net,Asp.net Mvc,Caching,我们正在开发一个分布在3个负载平衡web服务器上的web应用程序。我们通过NHibernate检索的大量数据存储在System.Web.Caching.Cache中 System.Web.Caching.Cache对提高应用程序的响应能力起到了很大的作用,但是有一些问题我们还不知道如何解决,例如 当用户请求服务器1上的数据时,数据会缓存在服务器1上,但对于他们的下一个请求,负载平衡器可能会将他们定向到服务器2。他们在server1上请求的数据不再可用,server2将不得不再次从数据库中请求该数

我们正在开发一个分布在3个负载平衡web服务器上的web应用程序。我们通过NHibernate检索的大量数据存储在
System.Web.Caching.Cache

System.Web.Caching.Cache
对提高应用程序的响应能力起到了很大的作用,但是有一些问题我们还不知道如何解决,例如

  • 当用户请求服务器1上的数据时,数据会缓存在服务器1上,但对于他们的下一个请求,负载平衡器可能会将他们定向到服务器2。他们在server1上请求的数据不再可用,server2将不得不再次从数据库中请求该数据

  • 如果用户在server1上执行了使缓存数据无效的操作,则会在server1上刷新缓存。但是,原始缓存在server2和server3上仍然可用,因此当用户提交后续请求并将其定向到其他任何一台服务器时,将向其显示无效数据

  • 我们有定期更新数据(如性能数据)的应用程序。当性能数据更新时,我们希望从缓存中刷新这些数据,这样当用户再次请求数据时,就会向他们显示最新的数据。我们如何让这些应用程序刷新3台web服务器上的缓存

  • 解决这些问题的最佳方法是什么

    我们是否应该将缓存存储在单独的服务器上,比如我们可以为会话状态服务器的
    HttpContext.Session

    我们有没有办法在其他两台服务器的缓存上设置缓存依赖项


    我们是否可以对实际的数据库表或行实现缓存依赖关系?当这些更改发生时,将刷新缓存?--或者我们可以设置一个数据库触发器以某种方式刷新缓存吗?

    是的,多服务器环境暴露了ASP.NET缓存的弱点,因为它只是一台服务器。您可能希望研究使用分布式缓存,例如,它将为您提供一个逻辑缓存,作为所有三个web服务器的基础


    AppFabric可与NHibernate一起用作二级缓存-请参阅(但请注意,这表明当前的实现可能不是AppFabric v1版本的最新版本)。

    您有几个选项:

    1) 使用分布式缓存(例如distcache、velocity或ncache)

    2) 使用所有web服务器都使用的共享缓存实例(例如memcached)

    NHibernate为所有这些都提供了二级缓存提供程序,可以找到