我正在和Imgur的创build者一起阅读一个问答,他详细地解释了Imgur运行的服务器基础设施。 以下是他不得不说的一句话:
大多数群集使用c1.xlarge实例。 上传集群处理所有上传和image processing请求,如缩略图和resize,每个实例是一个巨大的集群实例cc1.4xlarge。
我了解图像不占用太多的空间,但为什么即使走这条路? 特别是考虑到显着的成本差异。
如果你想阅读整个问答,你可以在这里查看 。 我发现它很有趣。
S3主要提供非常高的耐用性和非常低的pipe理开销。 服务本身并不是那么便宜(特别是在服务请求方面),但是在大多数情况下,pipe理替代scheme的人力成本使得任何节约成本都被浪费掉了。 但是,在非常大的规模下,储蓄开始超过pipe理费用。
例如:
每个10,000请求在S3上的GET请求花费$ 0.004。
T2.micro可以做大约180兆比特/秒,成本为0.013美元/小时。 假设一个500kB的图像大小(4000千比特),那大概是46个图像/秒。 假设你可以饱和那个实例(大规模的图像共享服务大概可以),那就是每小时约165k个请求。
所以对于T2.micro来说,在S3上花费你0.013美元/小时而不是0.066美元。 在实践中,你可能会碰到T2.micro上的其他瓶颈,所以S3在这个尺度上可能会略微超前。
但是,如果您使用c4.8xlarge(使用10Gbitnetworking),则需要$ 1.763 / h。 有了这个,你可以提供约2620图像/秒,或约9.4米/小时。 那要花费S3 $ 3.76 /小时。 添加保留实例折扣等,差异会更大。
最重要的是,您不能卸载诸如调整图像大小的stream程到S3,您也可能需要运行WAF或DDoS保护层来降低由于攻击带来的带宽成本。
话虽如此,一个常见的架构是将原件存储在S3(很less被访问,但耐用性很重要),并在前端服务器上caching已resize的版本。 我相信Netflix的确使用过这种技术(除了他们将caching的文件存储在自己的COLO硬件上)。 如果Imgur也这样做,我也不会感到惊讶。