在多个服务器上上传文件的方法?
Ways to Upload File on multiple servers?
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)
谢谢
开发人员是对的。您的应用程序不应该关心它运行的服务器数量和数量。只需与您的系统管理员联系并设置 rsync 或类似的东西来同步目录,同时提高响应速度,因为您的应用程序只需保存一次。
如果您必须,但是,它很简单:
foreach (string path in destinationPaths)
{
httpPostedFile.SaveAs(path);
}
SaveAs()
不保证是线程安全的,所以你不能并行化它。您可以复制流并并行写入它,但同样,您不希望您的代码对此负责。
您不应尝试通过您的代码执行此操作。如果其中一台服务器宕机了怎么办?您需要检测到这一点,然后在文件恢复后同步文件。
对此有三个明智的选择:
- 复制 - 假设您正在使用 Windows,您可以设置 Distributed File System 并让此句柄在您的服务器之间获取文件。
- 同步 - 定期在您的生产服务器之间同步文件。这样就会有一个问题,如果你在A上上传了文件,在B上不会立即可用。
- 共享存储 - 文件保存到两个服务器都可以访问的网络共享中。在负载平衡环境中,如果提供文件的服务器不可用,这可能会导致单点故障。
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)
谢谢
开发人员是对的。您的应用程序不应该关心它运行的服务器数量和数量。只需与您的系统管理员联系并设置 rsync 或类似的东西来同步目录,同时提高响应速度,因为您的应用程序只需保存一次。
如果您必须,但是,它很简单:
foreach (string path in destinationPaths)
{
httpPostedFile.SaveAs(path);
}
SaveAs()
不保证是线程安全的,所以你不能并行化它。您可以复制流并并行写入它,但同样,您不希望您的代码对此负责。
您不应尝试通过您的代码执行此操作。如果其中一台服务器宕机了怎么办?您需要检测到这一点,然后在文件恢复后同步文件。
对此有三个明智的选择:
- 复制 - 假设您正在使用 Windows,您可以设置 Distributed File System 并让此句柄在您的服务器之间获取文件。
- 同步 - 定期在您的生产服务器之间同步文件。这样就会有一个问题,如果你在A上上传了文件,在B上不会立即可用。
- 共享存储 - 文件保存到两个服务器都可以访问的网络共享中。在负载平衡环境中,如果提供文件的服务器不可用,这可能会导致单点故障。