jby*_*nes 6 file-upload http keep-alive amazon-web-services amazon-elb
我们最近将 Nexus 实例迁移到 AWS,但在关闭大文件上传时遇到了问题。我们怀疑这可能是由于以下 gem 造成的 ELB 超时:
“如果 HTTP 请求在空闲超时期限内未完成,负载均衡器将关闭连接,即使数据仍在传输中。”
来源: http ://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html
如果连接正在传输数据,怎么会空闲呢?为什么要这样做呢?
有些文件有很多 GB - 上传可能需要几分钟,如果繁忙的话需要 30 分钟。我们应该如何支持这一点,将超时设置为 1800 秒真的是建议的修复方法吗?(最多 3,600)
谢谢,乔尔
这确实看起来是一个有趣的宝石。解释可能在于底层实现实际上有两个计时器,一个用于客户端,一个用于服务器。我猜测,但如果不是沿着这些思路,某些拒绝服务攻击可能更容易针对 ELB 及其背后的机器实施。
答案就在 ELB 访问日志中。如果您发现可疑的时间接近 60 秒,则可能是罪魁祸首。
增加计时器可能是一种选择。
不过,通常情况下,网络应用程序似乎需要在几毫秒内进出、结束并完成,然后继续执行下一步。将进程或线程与上传等长时间运行的内容捆绑在一起意味着您可能能够处理数百或数千个其他请求,如果不是因为上传的资源消耗。通过将非常大的文件委托给单独的环境或服务(例如 S3,它可以接受POST,然后在上传完成后将浏览器重定向回“成功”页面),可能会更好地处理它们。其他策略可能包括智能客户端逻辑,以部分(可能是并行)发送上传,并能够重新启动/重试以及执行其他巧妙的操作(例如进度条)。
我在 ${dayjob} 上可能部署了 20-30 个 ELB,而且这种情况从未出现过,但是我没有任何系统可以在面向用户的一侧处理“大”文件。我认为这些系统的“大”上传可能是 16MB,所以绝对是不同的规模。