我对global.asax文件如何在服务器场中运行感到困惑。每个服务器是否都有自己的实例正在运行,或者它是一个共享实例。
例如,在Application_Start事件中的global.asax中,我初始化一个单例对象,该对象收集统计信息并更新包含统计信息的数据库表。发生以下哪种情况?
情景一
这是第一个示例,每个服务器将使用它自己的集合
更新数据库情景二
以上示例服务器可以访问同一个集合。这可能吗?
答案 0 :(得分:1)
服务器彼此不了解,因此global.asax文件为每个进程和服务器单独运行。即使您将IIS设置为允许同一站点和同一台计算机上的多个工作进程,也是如此。每个工作进程都有自己的global.asax Application_Start()
。
因此,为了直接回答您的问题,Scenario One会更密切地模拟Web场中实际发生的情况。
如果你想要"单身"要在所有服务器之间共享,您必须实现所有服务器都可以共享的服务。
答案 1 :(得分:0)
另一个选择是使用ScaleOut State Server (SOSS),我已经看到它在高可用性环境中使用。
[This]在要存储的Web或应用程序服务器场中的每个服务器上运行 任务关键型工作负载数据。 ScaleOut StateServer的内存中数据 具有集成的内存分布式缓存的网格提供了极大的功能 快速访问您关键但快速变化的数据及其数据 将服务器添加到服务器场时,性能和容量会增长。该 软件会自动在服务器之间复制存储的数据 如果服务器出现故障,关键数据不会丢失,并且会维护 独立数据库服务器的可扩展,高可用性访问 (甚至是故障转移数据库集群)也不能复制。你也可以 使用Windows版本的ScaleOut StateServer透明保存 并检索ASP.NET会话状态。