如何实现分布式文件上传解决方案?

时间:2011-12-12 19:51:24

标签: php file-upload cloud distributed cdn

我有一个文件上传网站,该网站目前停留在一台服务器上,即使用相同的服务器将用户上传文件和同一服务器进行内容传送。

我想要实现的是CDN(content delivery network)。我想买一个服务器场,不知何故,如果我有一个机制让文件分散在不同的服务器上,这将平衡我的负载更好。

但是,我对此有几个问题:

假设我的服务器场包含10台用于内容交付的服务器,

  1. 由于在用户端,上传文件的脚本只是一个位置,即<form action=upload.php>,它必须驻留在一台服务器上,对吗?如何跨多个服务器复制脚本并将用户的文件上载数据导向负载最小的服务器?

  2. 如何确定将哪些文件发送到哪台服务器?在上传过程中,我应该将所有文件随机化到随机服务器吗?如果用户发送10个文件,我应该将它们发送到随机服务器吗?是否有机制将它们发送到负载最小的服务器?是否还有其他算法可以帮助确定需要将文件发送到哪个服务器?

  3. 如何将文件从上传服务器发送到CDN?使用FTP?这不会引入额外的开销,需要错误检查功能来检查FTP连接中断,并检查文件是否已成功传输等。

1 个答案:

答案 0 :(得分:3)

假设您使用的是Apache服务器,则会有一个名为mod_proxy_balancer的模块。它处理幕后的所有负载平衡工作。用户永远不会知道差异 - 除非他们的下载和上传速度快10倍。

  1. 如果您使用此功能,则可以在每台服务器上拥有完整的副本。

  2. mod_proxy_balancer 会为您处理此问题。

  3. 每个服务器都可以拥有自己的子域。您将在“主”服务器上拥有一个数据库,该数据库将所有下载页面与它们所在的物理服务器相匹配。然后基于一些散列加密算法传递动态URL,这会阻止使用下载的硬链接并增加页面命中率。它可以是个人信息和杂项信息的混合,例如用户IP和一天中的时间。然后,下载服务器检查哈希值,并接受或拒绝请求。

  4. 如果一切都结账,下载开始;你的负荷是平衡的;并且用户不必担心幕后的任何内容。

    注意:我已完成Apache管理和Web开发。我从未管理过大型CDN,所以这是基于我在其他网站和其他知识中看到的内容。任何有兴趣在这里添加或者更正的人都可以。

    更新

    也有公司为您管理它。一个简单的Google search会为您提供一个列表。