这是为静态内容服务扩展 Nginx 的明智方法吗?

UpT*_*eek 4 nginx scalability

我需要设置一些 VPS 来提供静态内容(许多小文件)。我计划为此使用 Nginx,并希望对其进行设置,以便我们能够相对轻松地横向扩展。要求是:

  • 许多文件(至少数十万)。
  • 小文件大小(小于 10KB)。
  • 相邻服务器上的应用程序不断添加文件。
  • 新文件必须立即可供所有 Nginx 服务器使用。

我目前的计划是:

  • 拥有一个包含所有文件的 NFS 共享的“主”服务器。
  • 生成新文件的应用程序仅与 master 交互。
  • 让多个 Nginx 服务器挂载此 NFS 共享。
  • 跨 Nginx 实例的负载平衡。

一个明显的问题是“主”服务器是单点故障(对此有什么补救措施?)。 还有其他我忽略的潜在问题吗?这里是否存在不能以这种方式很好地扩展的元素?有人会建议另一种方法吗?

关于内存要求,我假设我应该尽可能多地提供每个 Nginx 服务器,以便可以缓存热文件(通过操作系统?Nginx?)而不必不断从 NFS 共享中请求。

最后,我疯了不使用 CDN 吗?

Den*_*ker 8

NFS 无法扩展。它增加了每个请求的延迟,最终会成为一个太大的瓶颈。我们在工作中遇到了类似的问题,但是有照片(所以,更大的文件)并编写了我们自己的软件来分片和分发它们。对于像您这样的几 GB 文件,您可能能够在上传过程中对所有服务器执行 HTTP PUT 并在服务器离线时进行重新同步。

或者以另一种方式解决它:拥有一个(一组)中央服务器,其中包含所有文件并缓存反向代理(鱿鱼、英镑、清漆),这些代理实际上为客户提供文件。

不使用 CDN 并不疯狂。如果你不调查它是否值得,你就疯了:-)