【发布时间】:2014-07-31 15:05:08
【问题描述】:
基本问题:
我们在当前的基础架构设置中遇到了非常奇怪的行为:
- 如果文件是从上传文件的同一 IP/机器下载的,则从 Amazon S3 下载文件的速度会降至
- 在我们的其他机器上,我们可以下载文件几千次,但看不到这种行为
其他细节:
- 机器使用 puppet 设置相同
- 它们都是在 KVM 上运行 ubuntu 12.04.4 并在 ubuntu 12.04.4 和 13.04 主机上运行 libvirtd 的虚拟机
- 每个虚拟机都有自己的公共 IP,流量来自该 IP
- 几分钟后,可以以 >5 mb/s 的速度再次下载文件几次(似乎是 10 次)
- 使用雾宝石从 Rails 应用程序上传文件
使用 wget 进行测试:
使用 wget,您会在受影响的机器上看到我们上传的文件的以下输出:
--2014-07-31 16:33:38-- http://s3-eu-west-1.amazonaws.com/not_the_real_file_url
Resolving s3-eu-west-1.amazonaws.com (s3-eu-west-1.amazonaws.com)... 178.236.6.160
Connecting to s3-eu-west-1.amazonaws.com (s3-eu-west-1.amazonaws.com)|178.236.6.160|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2801149 (2.7M) [text/plain]
Saving to: `/dev/null'
0% [ ] 10,111 1.05K/s eta 68m 26s
它在 68m 内保持这种状态! (不过在那之后它确实完成了下载)
这是由其他人托管在亚马逊 s3 上的随机文件的输出:
--2014-07-31 16:39:21-- https://s3.amazonaws.com/Minecraft.Download/versions/14w31a/minecraft_server.14w31a.jar
Resolving s3.amazonaws.com (s3.amazonaws.com)... 72.21.211.199
Connecting to s3.amazonaws.com (s3.amazonaws.com)|72.21.211.199|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 10342238 (9.9M) [application/octet-stream]
Saving to: `/dev/null'
32% [====================================> ] 3,370,945 747K/s eta 12s
我们当前的解决方法
我们当前的解决方案是使用我们的 HAProxy 作为一个透明的 HTTP 代理。
这意味着我们定义了一个前端“cloud.example.com”,一个后端首先将请求主机替换为“s3-eu-west-1.amazonaws.com”,然后使用 s3-eu-west-1 .amazonaws.com:80 作为服务器。对于亚马逊来说,看起来请求来自我们的代理,我们可以再次下载我们存储在 S3 上的文件数千次。 :)
[2014-07-31 16:56:57 +0200] RUN[28] AVG: '0.9612743812142854' s, LAST_RUN: '0.711118431' s
--2014-07-31 16:56:57-- https://cloud.example.com/not_the_real_file_url
Resolving cloud.example.com (cloud.example.com)... 1.2.3.4
Connecting to cloud.example.com (cloud.example.com)|1.2.3.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2801149 (2.7M) [text/plain]
Saving to: `/dev/null'
100%[====================>] 2,801,149 2.47M/s in 1.1s
【问题讨论】:
-
听起来有点像你的 ISP 的一些邪恶:/
-
我们在:Hetzner(德国的一家大供应商)我会问他们是否可以解释这种行为。到目前为止,我们的机器还没有出现过这种问题。
-
好的,我已经和我们的供应商核实过了。他们排除了,这是他们这边的问题。我想这一定与我们的服务器(ubuntu)设置有关。禁用 ufw 并没有解决任何问题。如果我终于找到这个奇怪问题的原因,我会发布。
标签: ubuntu amazon-web-services amazon-s3 kvm libvirt