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