2010-07-02 75 views

回答

3

但是,在关闭浏览器之前,TCP连接是否持续存在?为什么下一个请求可能会切换不同的服务器?

一旦网页加载,并且所有图像,css文件和其他资产都被检索到,TCP连接将很快关闭(例如,Apache 2.2中的after 5 seconds by default)。当用户点击其他内部链接时,会打开一个新的TCP连接。这可能会导致多服务器负载均衡场景中的另一台服务器上。

+0

糟糕...我以为TCP连接的生命周期与浏览器窗口是一样的.. – powerboy 2010-07-02 01:27:47

+0

单个TCP会话的生命周期甚至可能不是单个“页面” - 这是可能的,甚至很可能,许多会话将并行运行,以便下载核心页面,每个图像或JavaScript src或其他任何可以为了效率而远离另一会话的内容。 – paxdiablo 2010-07-02 01:34:41

1

将会话存储在数据库中,以便在负载平衡应用程序时,负载平衡器可以将请求转发到服务器场中的任何服务器,并仍然可以正确访问会话数据。

对网页的单个请求将转到单个服务器。下次用户发出请求时,会创建一个新的TCP连接,并可以将其发送到服务器场中的其他服务器。

0

浏览器中的页面加载通常是无状态的(即,页面完全加载后它们不会存储状态)。

这意味着您的下一页加载可能与从购物目录页面到购物车页面一样简单,它是一个单独的HTTP“事务”。

事实上,一个页面及其12个图像(和400个色情广告)的文本可能每个都会转到一个完全独立的服务器(即使它们使用相同的基本URL),因为它们可能使用不同的TCP会话。

您不希望序列化所有流量,以便重新使用单个TCP会话,但在单独的会话上并行执行它们通常会更快。

因此,它可能最终在一个完全不同的服务器,是的。在这种情况下,你会希望存储在某种共享资源(如数据库)中的状态。

还有其他方法可以解决问题(总是存在),例如基于IP的关联,其中来自同一IP地址的流量将优先选择同一台服务器,但面对所有可爱的负载平衡体系结构时,这种苍蝇:-)