【问题标题】:How to implement a distributed file upload solution?如何实现分布式文件上传解决方案?
【发布时间】:2011-12-13 23:12:38
【问题描述】:

我有一个文件上传站点,该站点当前位于单个服务器上,即使用同一台服务器供用户将文件上传到同一台服务器,并使用同一台服务器进行内容交付。

我想要实现的是 CDN (content delivery network)。我想购买一个服务器场,如果我有一种机制可以让文件分布在不同的服务器上,那将更好地平衡我的负载。

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

假设我的服务器场由 10 台用于内容交付的服务器组成,

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

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

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

【问题讨论】:

  • 我看到你接受了我的回答。这是否意味着您的 CDN 正常工作?我很想知道你最终做了什么。

标签: php file-upload cloud distributed cdn


【解决方案1】:

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

  1. 如果你使用这个,你可以在每台服务器上都有一个完整的副本。

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

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

如果一切顺利,下载开始;你的负载是平衡的;并且用户不必担心这些幕后的东西。

注意:我做过 Apache 管理和 Web 开发。我从来没有管理过大型CDN,所以这是基于我在其他站点和其他知识中看到的。任何人有什么要在此处添加或进行更正的人,请做。

更新

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

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2011-09-27
    • 2013-10-25
    相关资源
    最近更新 更多