设置如下=>
有一个Amazon ELB(Elastic Load Balancer)将请求转发给IIS。 ELB的超时设置为15秒。
如果Web服务器需要15秒以上的时间来处理请求,我会发现两种行为。
1)有时,在15秒标记处,向客户端(浏览器)发出504(网关超时)。这种行为我理解并且是预期的。
2)但是,有时,在15秒标记处,Web服务器(IIS)从头开始再次重新处理相同的请求。没有向客户端发出504(网关超时)。这个行为,我不明白。我使用ASP.NET MVC堆栈。
我知道来自客户端的相同请求,因为客户端生成的id对于请求保持相同。但是请求有一个新的服务器生成的id。在某些情况下,某些中介(ELB)似乎在超时(15秒)标记处重新发送请求。
有没有人对可能导致的原因有什么见解(2)?
答案 0 :(得分:1)
听起来你正在处理这个问题:
http://absenceofblue.blogspot.com/2013/08/retry-hassles-with-elb.html
据说它已修复,但显然如果你的后端超时与ELB超时相同,则可能存在竞争条件,因此你应该将超时设置为比ELB超时至少1秒,以便ELB转储连接,而不是你的代码。
有趣的是,重试DOES实际上来自客户端,但这是因为客户端的TCP堆栈被认为数据包被丢弃,因此它会在TCP级别重试数据包。