我们正在开发一个服务于请求 24 * 7 的应用程序,并且不应错过任何请求。此应用程序托管在负载平衡环境中的 IIS 上。主服务器组 P1 和 C1,而主服务器的备份服务器是 P2 和 C2。因此,请求以负载平衡的方式发送到 P1 和 C1。如果 P1 和 C1 都下降,则 P2 和 C2 上升。我们正在努力制定一项策略,因此我们的任何请求都不会被遗漏。计划是关闭主服务器 P1 和 C1,以便将请求转发到备份。然后启动主服务器并在备用服务器上工作。我的问题是如何确保工作进程在我们为主服务器关闭应用程序之前服务它收到的最后一个请求。如前所述,目的是确保没有遗漏任何请求
问问题
706 次
1 回答
0
如果您想确保没有遗漏任何请求,您可能会等待很长时间 - 回收发生时正在进行的任何请求都由原始 AppPool 提供服务。根据您的站点,其中一些请求可能是连接速度非常慢的大文件,这可能需要数小时才能完成。在某些时候,您可能只想破坏连接并继续前进,因为您知道调用者将刷新他们的页面、重新连接或以任何方式回到原来的位置。
在任何情况下,您都不需要多个服务器。IIS 自动(至少默认情况下),在启动新应用程序实例并向其发送新请求时(在应用程序更新期间)从旧应用程序实例中排出请求。(但是请注意,对新池的任何请求都可能会停顿几秒钟,因为应用程序是第一次加载和初始化所有内容——这是正常的,而且很难避免)。
如果您确实有多台服务器并且想要将请求处理从一台服务器切换到另一台服务器,则必须有某种负载平衡系统,或者是软件负载平衡器,例如 Microsoft Network Load Balancing,或者是硬件负载平衡器,例如作为 F5 大 IP。在这两种情况下,您都必须以某种方式告诉负载均衡器耗尽旧应用程序(或服务器)上的连接并将它们路由到新服务器。这可以通过他们的 GUI 手动完成,或者对于自动部署系统,需要与这些系统集成。
于 2014-11-11T06:54:41.283 回答