2009-02-16 60 views
1

我有超过10个运行IIS的Web服务器的负载平衡环境。所有网站正在访问一个存放所有图片的单个文件存储。我们目前有200GB的图片 - 我们将它们存储在每个目录1000张图片的目录中。现在,所有图像都位于单个存储设备(RAID 10)中,并连接到用作文件服务器的单个服务器。所有Web服务器都连接到同一局域网上的文件服务器。 我期待改进架构,以便我们不会有单点故障。 我正在考虑两种选择:负载均衡环境中的图像

  1. 复制的文件存储到所有的Web服务器,使它们都访问本地
  2. 将数据复制的文件存储到另一个存储,所以如果出了事,我们将当前存储能够切换到它。

很明显,在文件存储上完成的主要操作被读取,但也有很多写操作。你认为什么是首选方法?任何其他想法?

我目前正在排除CDN的使用,因为它将需要对应用程序进行体系结构更改,而我们现在还不能对其进行修改。

+0

与编程无关 – AnthonyWJones 2009-02-16 12:36:59

回答

0

有些东西我会才去拱变化,通常考虑的是

  1. 什么是当前拱的问题
  2. 我在做什么毛病当前牌坊。(如果已经工作了而小的调整通常会解决很多问题)
  3. 它会让我容易成长(这里总会有一个上限)。根据过去数据的增长,您可以有效地进行规划。
  4. 可靠性
  5. 易于维护/监控/解决
  6. 成本

200GB不是大量的数据,你可以去为一些家庭长大的溶液或使用像一个NAS,其将允许您稍后扩展。并有一个热插拔它的复制品。

复制到所有的web服务器的存储是一个非常昂贵的设置,如你所说有很多的写操作,它将有一个大的开销复制到所有的服务器(这只会增加数量服务器和数据增长)。还有一个其他节点正在服务的陈旧数据的问题。除此之外,疑难解答复制问题将与10个不断增长的节点相混淆。 除非查找/读取/写入文件非常重要,否则复制到所有Web服务器并不是一个好主意。用户(web)几乎不会注意到100ms - 200ms的加载时间的差异。

0

这种东西有一些enterprisesolutions。但我不怀疑他们是昂贵的。 NAS不能很好地扩展。而且你有一个单一的失败点并不好。

有一些方法可以编写代码来帮助解决这个问题。您可以在第一次请求Web服务器时缓存图像,这将减少图像服务器上的负载。

您可以设置一个主从设备,以便您拥有一台主映像服务器,但其他服务器将从此复制。你可以负载均衡这些,并在你的代码中加入一些逻辑,这样如果一个从设备没有图像副本,你可以检查主设备。您也可以按优先级顺序分配这些参数,以便在主站不可用时,第一个从站成为主站。

0

由于您的存储空间中的数据非常少,因此购买多个大型HD或使用Web服务器上的可用空间保留副本是合理的。它将减轻后端存储系统的压力,当它失败时,您仍然可以为用户提供内容。更妙的是,如果你需要扩展(更多的下载),你可以简单地添加一个新的服务器,而且后端的压力也不会改变。

如果我必须这样做,我会使用rsyncunison将映像文件复制到存储设备上的Web服务器的完全相同的空间中(这样,您可以将副本替换为任何时候都可以挂载网络文件系统)。

不时地运行rsync(例如,在任何上传之后或在夜晚进行一次;您会更好地知道哪种尺寸最适合您)。

更通用的解决方案是使用像Bittorreent这样的P2P协议。这样,您可以将存储后端上的所有更改发布到Web服务器,并自动优化更新。