我们正在向网络应用程序添加一项功能,其中上传的文件(到应用程序服务器)由后台工作人员(其他机器)处理。
应用程序的性质意味着这些文件会保留一段时间。在工作线程上执行的代码知道文件何时变得不相关,并且应该在那时删除该文件。
我的直觉是要求我们的系统管理员使用 NFS 设置共享文件夹。任何网络服务器都可以将文件保存到 NFS 中,任何工作人员都可以拿起它来处理它。信号发送和编排工作通过共享 Redis 实例中的数据进行。
关于 NFS,我被告知:
通常,对于这种用例,我们将所有上传请求路由到单个 Web 服务器。处理上传的服务器会将文件写入一个目录,例如 /data/shared/uploads,然后以只读方式同步到所有其他服务器。
听起来他们不喜欢 NFS。我问有什么问题。有人告诉我:
对于 NFS 或任何其他共享文件系统,问题总是相同的 - 它引入了单点故障。不仅如此,它还将所有服务器紧密耦合在一起。一台服务器的问题可能会影响其他服务器,这违背了负载平衡和解耦的目的。
我们目前的规模是拥有多个 Web 服务器和工作人员,但仍然是单个数据库和 Redis 实例。因此,我们已经存在紧密耦合的单点故障。
NFS 的问题是否如此严重以至于上述论点都有效?