将文件上载到多个服务器

时间:2010-03-06 22:50:18

标签: c# asp.net jquery

我看到很多关于上传多个文件的问题,但没有关于将单个文件上传到多个服务器的问题,所以这里有...

我有一个将在两个负载均衡的服务器上运行的ASP.NET应用程序,我想允许用户上传文件并让它们最终在两台服务器上运行。最干净的方法是什么?我正在使用IIS 6顺便说一句。

我想到的一些想法是:

1)使用指向两个服务器都可以访问的某个共享位置的虚拟目录。如果应用程序在网络服务上运行,是否会出现访问问题?我假设应用程序需要作为共享位置计算机上存在的用户帐户运行。应该如何为此设置权限?

2)如果我可以通过jQuery将请求发布到我的两个服务器,通过它们的端口号引用它,那将是很好的。即使服务器位于同一个域,这违反了相同的原始策略,对吧?

我还有其他解决方案吗?其他网站如何做到这一点?

4 个答案:

答案 0 :(得分:1)

我认为你想更仔细地考虑这个问题 - 拥有一对(或更多)服务器意味着其中一些服务器有时会脱机(至少偶尔会重新启动)。

当并非所有服务器都在线时上传将无法立即发送到所有服务器,因此您需要一个中间服务器(除非它本身具有高可用性,否则将成为故障点)或排队系统,以“记住”哪些文件在哪里,并在相关服务器恢复时传输它们。

此外,您还需要一个备份系统,以及一些将新配置的服务器添加到群集的方法。您还需要一种监视这些文件的方法,以防它们不同步。您的架构需要经过深思熟虑。我没有答案:)

答案 1 :(得分:1)

最干净的方法是真正转发服务器端的文件。如果你通过JavaScript强制进行两次上传,你不仅要担心解决XSS安全措施,还要强迫用户为每个文件使用两次非常有限的上行带宽。

无论如何,你不应该向客户公开这种细节。浏览器不需要知道文件的最终位置,只需知道将其发送给谁。如果你保持逻辑服务器端,不仅隐藏细节(​​因此不容易出错和漏洞利用),而且你还可以更好地控制进程。您可以在以后创建处理大量后端存储的网关服务,并且可以更好地处理故障服务器。您可以排队失败的上传并重试。如果你在服务器端进行这些操作,所有这些都会以非常低的成本实现,但是在客户端可靠地工作是很痛苦的。

将后端逻辑保留在后端。应该向用户隐藏负载平衡,因此无需告诉他们确切地发送文件的位置。如果需要,使其成为可选项,但隐藏它们的操作。只需吞下网关服务器上的文件(可以是负载均衡服务器中的任何一个 - 事实上,它也应该是负载均衡的,所以它应该适用于其中任何一个)并将其发送到其他服务器从那里。从服务器到服务器的转移也可能更快。

答案 2 :(得分:1)

你最好的选择绝对是NAS,如果有的话 - 一个与任何机器没有特别关联的共享文件系统。然后,您可以专注于通过群集前端使NAS高度可用。

如果这不是一个选项,您可以在每台计算机上使用指向其中一台计算机上的一个文件夹的虚拟目录,但随后会丢失冗余。

我在工作中遇到了同样的挑战。我的应用很小但需要高度可用,但看不到NAS。因此,在每台机器的web.config中,我放置了应该存储上载文件的所有UNC路径的列表。上传到临时文件夹后,我将文件逐个复制到每台机器。它并不完美 - 一台机器可能会停机,在这种情况下,当它出现时它可能没有所有文件(并且通过寻找丢失的机器会减慢复制速度) - 但在我的情况下上传是如此罕见它不值得改进。

正如其他人所提到的,Javascript就是正确的。上传一次。

答案 3 :(得分:0)

我已经看到使用NAS解决了这个问题,使用可以读/写文件到该NAS的应用程序池的凭据。确保您的NAS设置为高可用性以防止单点故障,即:热插拔w / raid,多个阵列控制器,电源等等。

您还可以将文件夹监视软件放在保持某些目录同步的服务器上。我不推荐这种解决方案。