在负载平衡服务器上使用应用程序范围的变量

时间:2013-12-04 11:00:14

标签: c# asp.net static load-balancing stateserver

我有一个托管在两个负载平衡服务器中的站点。我有一组变量,它们作为Lookup存储在一个静态变量中,以执行频繁和快速的查询。 静态变量中的值是树结构数据,所以我不想每次都查询它并绑定列表变量之间的关系。静态变量结构如下所示。

public static ILookup<long, ITree> MyStaticVar;

public interface ITree
{
    long ID { get; set; }
    // Some other properties
    ITree Parent { get; set; }
    IEnumerable<ITree> Children { get; set; }
}

有时静态变量的内容可能会更新(当Admin修改某些值时),因此我使用更新的值更新静态变量,以便用户可以立即获得更改。

它在单个服务器上运行良好,但是当我将它发布到两个或更多服务器时,变量将不会更新其他服务器而不是登录的管理员(因为该应用程序服务器中的静态变量只是更新)。

在多台服务器中保持静态变量同步的最佳方法是什么?或者有没有其他方法来管理我的情况(事件驱动或其他一些方式来触发/通知其他服务器并刷新其中的变量)?

我有一个会话状态服务器,它管理这些负载平衡服务器上的会话值。有没有办法在会话状态服务器中存储ILookup变量的单个实例并在所有用户之间共享?

1 个答案:

答案 0 :(得分:1)

现在我做了一个解决方法。但它不是一个优雅的解决方案。 我创建了一个Web服务来更新静态变量。

我将负载平衡站点的根路径放在Web配置中,并在更新任何服务器中的静态变量时调用每个应用程序的Web服务。

但这只有在我知道负载均衡服务器站点路径时才有效,是否有其他方法可以通过动态查找路径来更新站点?