【问题标题】:Ways to Upload File on multiple servers?在多台服务器上上传文件的方法?
【发布时间】:2015-05-13 04:00:27
【问题描述】:
  Web.Config
  <add key="Location" value="C:/Upload" />

   //controller
   private readonly string _Location = ConfigurationManager.AppSettings["Location"];

   var fileName = Path.GetFileName(httpPostedFile.FileName);
   var path = Path.Combine(_Location, fileName);
   httpPostedFile.SaveAs(path);

此代码在本地运行良好。我意识到我们在生产环境中有一个负载均衡器。我在负载均衡器后面有 2 台服务器 A、B。有没有办法在服务器 A、B 上上传文件?我尝试进行一些研究,大多数开发人员建议将文件上传到其中一台服务器上,然后每 30 分钟或 1 小时克隆一次上传文件夹。但应该有一种通过代码执行此操作的标准方法......(我有服务器名称和 IP)

感谢

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-4 file-upload


    【解决方案1】:

    您不应尝试通过您的代码执行此操作。如果其中一台服务器停机会发生什么?您需要检测到这一点,然后在文件恢复后同步文件。

    对此有三种明智的选择:

    • 复制 - 假设您使用的是 Windows,您可以设置 Distributed File System 并让此句柄在您的服务器之间获取文件。
    • 同步 - 定期在生产服务器之间同步文件。这会有一个问题,如果你在 A 上上传文件,它不会立即在 B 上可用。
    • 共享存储 - 文件保存到两个服务器均可访问的网络共享。在负载平衡的环境中,如果提供文件的服务器不可用,这可能会导致单点故障。

    【讨论】:

      【解决方案2】:

      开发人员是对的。你的应用程序不应该关心它运行在多少台服务器上。只需与您的系统管理员交谈并设置 rsync 或类似功能来同步目录,也可以提高响应速度,因为您的应用程序只需保存一次。

      如果你必须,但是,它很简单:

      foreach (string path in destinationPaths)
      {
         httpPostedFile.SaveAs(path);
      }
      

      SaveAs() 不能保证是线程安全的,所以你不能并行化它。您可以复制流并并行编写它,但同样,您不希望您的代码对此负责。

      【讨论】:

      • wat 应该是路径的格式吗? ipaddress/_Location + 文件名?
      • “你不想要这个”的哪一部分你不明白,特别是如果你不知道 UNC 是什么?
      • 我现在没有选择以干净的方式来做这件事......事情需要在星期六早上之前投入生产(包括质量检查流程)......我必须通过代码来处理它......
      猜你喜欢
      • 2014-06-10
      • 2013-01-28
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 2011-11-05
      相关资源
      最近更新 更多