1

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

  1. 将文件存储复制到所有网络服务器,以便它们都在本地访问数据
  2. 将文件存储复制到另一个存储,因此如果当前存储发生问题,我们将能够切换到它。

显然对文件存储所做的主要操作是读,但也有很多写操作。您认为首选的方法是什么?还有什么想法吗?

我目前正在排除使用 CDN,因为它需要对应用程序进行架构更改,而我们现在无法进行。

4

3 回答 3

0

在进行拱形改变之前我通常会考虑的某些事情是

  1. 当前拱门的问题是什么
  2. 我在当前的拱门上做错了什么。(如果这已经工作了一段时间,小的调整通常会解决很多问题)
  3. 会不会让我轻松成长(这里总会有上限)。根据过去的数据增长情况,您可以有效地对其进行规划。
  4. 可靠性
  5. 易于维护/监控/故障排除
  6. 成本

200GB 不是很多数据,您可以使用一些本地解决方案或使用 NAS 之类的东西,这将允许您稍后进行扩展。并拥有它的热插拔副本。

复制到所有网络服务器的存储是一个非常昂贵的设置,正如你所说的有很多写入操作,复制到所有服务器会产生很大的开销(只会随着服务器数量和数据的增长而增加)。并且还存在由其他节点之一提供过时数据的问题。除此之外,对 10 个和不断增长的节点进行故障排除复制问题将变得一团糟。除非文件的查找/读取/写入对时间非常关键,否则复制到所有网络服务器并不是一个好主意。用户(网络)几乎不会注意到加载时间 100 毫秒 - 200 毫秒的差异。

于 2009-02-16T12:48:30.350 回答
0

这类事情有一些企业 解决方案。但我不怀疑它们很贵。NAS 不能很好地扩展。而且你有一个不好的单点故障。

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

您可以设置一个主从服务器,这样您就有一个主映像服务器,但其他服务器从该服务器复制。您可以对这些进行负载平衡,并在您的代码中添加一些逻辑,以便如果从属服务器没有图像副本,您可以检查主服务器。您还可以按优先级顺序分配它们,以便如果主服务器不可用,则第一个从服务器成为主服务器。

于 2009-02-16T13:16:47.973 回答
0

由于您的存储中的数据非常少,因此购买几个大型 HD 或使用 Web 服务器上的可用空间来保存副本是有意义的。它将减轻您的后端存储系统的压力,当它发生故障时,您仍然可以为您的用户提供内容。更好的是,如果您需要扩展(更多下载),您可以简单地添加一个新服务器,并且后端的压力不会有太大变化。

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

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

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

于 2009-02-16T13:43:43.930 回答