2

我对 global.asax 文件如何在服务器场中运行感到困惑。每个服务器是否有自己的实例在运行,或者它是一个共享实例。

例如,在 Application_Start 事件中的 global.asax 中,我初始化了一个单例对象,该对象收集统计信息并更新包含统计信息的数据库表。以下哪种情况会发生?

情景一

  • 服务器 1 -> (Stat = 10) -> 用 10 更新数据库
  • 服务器 2 -> (Stat = 8) -> 用 8 更新数据库
  • 服务器 3 -> (Stat = 25) -> 用 25 更新数据库
  • 服务器 4 -> (Stat = 5) -> 用 5 更新数据库

这是第一个示例,每个服务器都将使用自己的集合更新数据库

方案二

  • 服务器 1 -> (Stat = 10) -> 用 10 更新数据库
  • 服务器 2 -> (Stat = 10) -> 用 10 更新数据库
  • 服务器 3 -> (Stat = 10) -> 用 10 更新数据库
  • 服务器 4 -> (Stat = 10) -> 用 10 更新数据库

在上面的示例中,服务器可以访问相同的集合。这可能吗?

4

2 回答 2

1

服务器彼此不知道,因此 global.asax 文件为每个进程和服务器单独运行。即使您将 IIS 设置为允许同一站点和同一台计算机上的多个工作进程也是如此。每个工作进程都有自己的 global.asax Application_Start()

因此,为了直接回答您的问题,方案一将更密切地模拟网络场中实际发生的情况。

如果您希望在所有服务器之间共享“单例”,则必须实现所有服务器都可以共享的服务。

于 2012-07-05T17:51:05.300 回答
0

另一种选择是使用ScaleOut State Server (SOSS),我已经看到它在高可用性环境中使用。

[This] 在 Web 或应用服务器场内的每台服务器上运行,以存储关键任务、工作负载数据。ScaleOut StateServer 的内存数据网格具有集成的内存分布式缓存,可提供对关键但快速变化的数据的极快访问,并且它的性能和容量会随着您向场中添加服务器而增长。该软件自动在服务器之间复制存储的数据,以便在服务器出现故障时不会丢失关键数据,并且它保持独立数据库服务器(甚至故障转移数据库集群)无法复制的可扩展、高可用性访问。您还可以使用 Windows 版本的 ScaleOut StateServer 透明地保存和检索 ASP.NET 会话状态。

于 2015-09-08T16:47:41.080 回答