对于负载均衡的ASP.NET应用程序,文件存储的最佳解决方案是什么?

9 sql-server asp.net infrastructure file

我们有一个ASP.NET文件传递应用程序(内部用户上传,外部用户下载),我想知道分发文件的最佳方法是什么,所以我们只有将应用程序的文件存储在一个文件上才会出现单点故障服务器.我们将应用程序的负载分布在多个前端Web服务器上,这意味着对于文件存储,我们不能简单地在Web服务器上本地存储文件.

我们当前的设置让我们指向主数据库/文件服务器上的共享.在一天中,我们将主服务器上共享的内容复制到故障转移.这个scneario确保我们有一台辅助计算机上有相当新的数据但我们希望能够从主服务器故障转移到故障转移,然后再返回,而不会丢失前端应用程序中的数据或错误.现在,这是一个相当手动的过程.

可能的方案包括:

  • 的Robocopy.很简单,但它不容易让您在没有多个作业一直运行的情况下进行故障转移和返回(来回复制数据)
  • 将文件存储在SQL Server 2005中的BLOB中.我认为这可能是性能问题,尤其是对于大文件.
  • 在SQL Server 2008中使用FILESTREAM类型.我们镜像我们的数据库,所以这看起来很有希望.有人对此有经验吗?
  • 微软的分布式文件系统.由于我们只有2台服务器需要管理,因此从我读过的东西看起来有些过分.

那么你通常如何解决这个问题,什么是最好的解决方案?

Dav*_*cia 0

我同意Omar Al Zabir关于高可用性网站的观点:

做法:使用存储区域网络 (SAN)

原因:性能、可扩展性、可靠性和可扩展性。SAN 是最终的存储解决方案。SAN 是一个巨大的盒子,里面运行着数百个磁盘。它有许多磁盘控制器、许多数据通道、许多高速缓冲存储器。您在 RAID 配置方面拥有极大的灵活性,可以在 RAID 中添加任意数量的磁盘、在多个 RAID 配置中共享磁盘等。与服务器中放置的常规控制器相比,SAN 具有更快的磁盘控制器、更强的并行处理能力和更多的磁盘高速缓存。因此,当您使用 SAN 时,您可以获得比本地磁盘更好的磁盘吞吐量。当您的应用程序运行并使用音量时,您可以动态增加和减少音量。SAN可以自动镜像磁盘,并且在磁盘出现故障时,它会自动启动镜像磁盘并重新配置RAID。

完整文章位于 CodeProject。

因为我个人现在没有 SAN 的预算,所以我依赖您帖子中的选项 1 (ROBOCOPY)。但是我保存的文件不是唯一的,如果它们因某种原因死亡,可以自动重新创建,因此在我的情况下绝对的容错是必要的。