如果这个问题(必要的话)可能有点宽泛,我事先表示歉意。我会尽力把它保持在一个有效的问题的形式上。
我目前正在设置一个后端,用于服务大量的静态文件(具体而言,是图像)。最终产品的总体流量预计将是巨大的,因此可扩展性和规避各种瓶颈是必须的。
我的初步结论是,最好的方法是设置一个虚拟服务器集群来处理请求。我将使用标准的负载平衡策略,以确保客户机请求在集群中的节点间平均分配,因此这部分没有问题。
如何有效地将静态文件本身存储在集群中是一个问题。我们期望有大量(兆字节范围)的数据存在,而在每个节点上保留镜像文件副本根本就不是一种选择。
看来我基本上只有两种选择:
1)使用一个中心文件服务器,节点可以向该文件服务器发出请求。然而,我发现很难看出如何才能阻止这台服务器成为瓶颈。
2)结合节点上的某种缓存机制,避免了对文件服务器的冗余请求。
( 3)其他一些绝妙的解决方案,可以拯救我的灵魂,使我的灵魂变得过时。
获得这种文件分发的好策略是什么?有什么软件可以这样做?
提前谢谢!
发布于 2014-08-30 10:55:05
一致环散列是这类问题的经典解决方案,至少在算法上是这样。Swift、memcached、Dynamo、Riak等系统都使用了这种方法来解决这个问题。
OpenStack Swift是一个对象/blob存储库,它使用一致的环哈希来跟踪和分发对象、容器等。您可以使用Swift或类似的东西直接解决方案,或者使用一致的哈希环构建自己的解决方案。使用Swift这样的解决方案的好处是无需自己开发它,另外还包括通过复制、版本控制等方式进行数据保护。
如果您不需要自己运行,而是对托管服务感兴趣,那么像Rackspace云文件 (基于Swift的)或亚马逊S3这样的产品可以提供CDN(分别用于Rackspace和Amazon的Akamai和CloudFront )的对象存储和检索。CDN将大大提高地理分布客户端的检索效率。
https://serverfault.com/questions/625172
复制相似问题