有一个缓存服务器(Varnish):它根据请求从 Amazon S3 接收数据,保存一段时间并将其提供给客户端。我们遇到了 1GBit 通道容量不足的问题。4 小时内的峰值负载完全阻塞了通道。服务器性能目前足够。每天传输的数据约为 4.5TB。每月累计超过 100TB。
首先想到的就是简单地添加一个 1GBit 端口并安静地休眠,直到 2GBit 不够用(这可能很快就会发生)或者一台服务器无法处理它。
然后我们只需要添加新的缓存服务器。但现在我们需要一个负载均衡器,它将始终在同一个服务器上向同一个 URL 发送请求(以避免相同缓存对象的多个副本)。
问题如下:
- Balancer 的带宽是否需要等于所有 Caching Server 带宽之和?Balancer 没有端口怎么办?是增加 Balancer 还是使用 Round robin DNS 解决?
- 解决此类问题的标准方法是什么?
- 有人能建议哪家托管公司能解决这个问题吗?我们对美国和欧洲市场感兴趣。
答案1
Balancer 的带宽是否需要等于所有 Caching Server 带宽之和?如果 Balancer 没有端口怎么办?
是的。添加更大的管道或使用 CDN 地理负载平衡。
是否应该增加更多的Balancer或者采用Round robin DNS的方式来解决问题?
这实际上是相同的解决方案。您可以添加更多平衡器并将它们插入循环 DNS。或者如我之前所说,更明智的选择是使用地理负载平衡。
解决此类问题的标准方法是什么?
使用能够响应距离用户最近的服务器的 DNS,并将此类服务器放置在世界各地。这还有其他优势,例如为您的用户提供低延迟体验。
有人能建议哪家托管公司能解决这个问题吗?我们对美国和欧洲市场感兴趣。
对于地理 DNS 负载平衡,您应该谷歌一下。您需要更高端的 DNS 服务,但您应该能够找到它。在欧洲,您一定要看看 OVH,它拥有非常大的网络,可以为您提供数千兆位带宽。对于美国,我不知道。
答案2
是的,负载平衡器应该能够处理来自/发往所有服务器的所有累积流量。因此,我建议使用一个负载平衡器,其中一个上行链路为 10Gb,其他 1Gb 端口连接到多个缓存服务器。硬件负载平衡器可以更有效地处理如此巨大的流量。
假设负载平衡器能够毫无问题地处理所有流量,那么您的限制将最大为 10Gb。
负载均衡器还可以在将请求定向到提供更高可用性的任何服务器之前检查服务器的健康状况。
必须选择合适的负载平衡算法来避免缓存重复并向正确的用户呈现正确的数据。