我正在为正在进行的项目寻找解决方案。
我们正在开发一个网络系统,人们可以上传他们的文件,其他人可以下载。(类似于 rapidshare.com 模型)
问题是,有些文件的需求量比其他文件大得多。场景如下:我上传了我的生日视频并与我所有的朋友分享,我已将其上传到 myproject.com,并将其存储在具有 100mbit 连接的集群之一中。
问题是,一旦我所有的朋友都想下载该文件,他们就无法下载,因为这里的瓶颈是 100mbit,即每秒 15MB,但我有 1000 个朋友,他们每秒只能下载 15KB。我没有考虑到硬盘正在提供相同的文件。
我的网络基础设施如下:1 gbit 服务器(客户端)并连接到具有 100mbit 连接的 4 个存储服务器节点。如果其中一个存储节点每秒可以向我的 1gbit(客户端)服务器传输超过 15MB 的数据,并且访问者将直接从客户端服务器而不是存储节点传输数据,则 1gbit 服务器可以处理 1000 个用户流量。我可以通过将文件复制到 2 个节点来实现这一点。但我不想复制上传到我的网络的所有文件,因为这样成本更高。
所以我需要一个基于云的系统,当对这些文件的需求很高时,它会自动将文件推送到复制节点,而当需求较低时,它们会从其他节点删除,并且只保留在 1 个节点上。
我查看了 gluster,并在他们的 irc 频道中询问,gluster 无法做到这一点。它只能复制所有文件或不复制任何文件。但我需要集群软件自动执行此操作。
有什么解决办法吗?(而不是推荐我 amazon s3)
年代
答案1
我会先修复设计,而不是试图给现有设计添加不必要的复杂性。
具体来说,为什么一台服务器有 1Gbps 链接,而其他服务器只有 100Mbps?将它们全部放在 FW/LB/代理前面的同一个非阻塞交换机上 - 这将一次性解决您的复制问题。
哦,我很想知道如何在 100Mbps 链路上实现 15MBps 的速度,你是在 7 位世界中工作吗?:)
答案2
听起来你描述的是反向代理设置。看一下维基百科文章也许nginx服务器 - 你也可以得到类似的结果乌贼或者Apache-httpd。