【问题标题】:Use application-wide variable on load balanced servers在负载平衡服务器上使用应用程序范围的变量
【发布时间】:2013-12-04 11:00:14
【问题描述】:

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

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; }
}

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 您找到更好的解决方案了吗?
    • @ChristianGollhardt 嗯,当时我正在使用 MySQL。如果您使用的是 MS SQL,请尝试使用SQL Cache Dependencies。这里有一些相关的CP文章可以阅读,123456
    猜你喜欢
    • 2011-11-18
    • 2011-12-27
    • 2014-03-26
    • 2010-10-23
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2010-10-25
    • 2012-11-06
    相关资源
    最近更新 更多