10

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

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

可能的解决方案包括:

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

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

4

6 回答 6

2

考虑一个像AWS S3这样的云解决方案。它为您所用、可扩展且具有高可用性而付费。

于 2009-01-21T05:51:46.273 回答
1

您需要一个带有 RAID 的 SAN。他们为正常运行时间制造这些机器。

这真的是一个IT问题......

于 2009-01-21T02:12:58.740 回答
1

当有多种不同的应用程序类型通过中央数据库共享信息时,将文件内容直接存储到数据库中通常是一个好主意。但您的系统设计中似乎只有一种类型——Web 应用程序。如果只是需要访问文件的 Web 服务器,而没有其他应用程序与数据库交互,则存储在文件系统而不是数据库中通常仍然是一种更好的方法。当然,这实际上取决于系统的复杂要求。

如果您不认为 DFS 是一种可行的方法,您可能希望考虑文件服务器层的故障转移集群,从而您的文件存储在外部共享存储中(不是昂贵的 SAN,我认为这对于您的情况来说是多余的,因为 DFS已经超出您的范围)在主动和被动文件服务器之间连接。如果主动文件服务器出现故障,被动文件服务器可能会接管并继续读取/写入共享存储。对于这种情况(根据文章),Windows 2008 群集磁盘驱动程序已比 Windows 2003 进行了改进,这表明需要支持 SCSI-3 (PR) 命令的存储解决方案。

于 2009-01-21T02:17:26.690 回答
0

DFS 可能是最简单的设置解决方案,尽管根据您的网络的可靠性,它有时可能会变得不同步,这需要您断开链接并重新同步,说实话这很痛苦。

鉴于上述情况,我倾向于使用 SQL Server 存储解决方案,因为这会降低而不是增加系统的复杂性。

先做一些测试,看看性能是否会成为问题。

于 2009-01-21T15:48:30.343 回答
0

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

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

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

完整的文章在 CodeProject。

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

于 2009-01-21T01:10:27.883 回答
0

我想这取决于您将看到的下载量类型。我成功地将文件存储在 SQL Server 2005 Image 列中。我们没有看到对这些文件的大量需求,因此在我们的特定情况下,性能真的不是什么大问题。

将文件存储在数据库中的好处之一是它使灾难恢复变得轻而易举。管理文件权限也变得更加容易,因为我们可以在数据库上管理它。

Windows Server 有一个我不推荐的文件复制服务。我们已经使用了一段时间,它引起了很多头痛。

于 2009-01-21T02:02:42.710 回答