【发布时间】:2022-01-25 21:46:50
【问题描述】:
我们已经部署了一个 django 服务器 (nginx/gunicorn/django),但是为了扩展服务器,有多个相同的 django 应用程序实例正在运行。
这是图表(架构):
每个蓝色矩形都是一个虚拟机。
HAProxy 将所有到 example.com/admin 的请求发送到服务器 3。其他请求在服务器 1 和服务器 2 之间分配。(负载平衡)。
老问题:
每台机器都有一个媒体文件夹,当管理员上传内容时,上传的媒体仅在服务器 3 上。(普通用户无法上传任何内容)
我们通过将所有到 example.com/media/* 的请求发送到服务器 3 来解决这个问题,并且来自服务器 3 的 nginx 为所有静态文件和媒体提供服务。
现在有问题
我们也在使用 sorl-thumbnail。
当一个请求来自 example.com/ 时,sorl-thumbnail 尝试访问该媒体文件,但它在这台机器上不存在,因为它在 Server3 上。
所以现在对那台机器(服务器 1 或 2)的所有请求都为该媒体文件获得 404。
想到的一个解决方案是在所有 3 台机器之间创建一个共享分区并将其用作媒体。 另一种解决方案是在每次上传后同步所有媒体文件夹,但这个解决方案有问题,即我们每秒有近 2000 个请求,有时同步可能不够快,sorl-thumbnail 创建空文件的数据库记录并发生 404。
提前致谢,很抱歉问了这么长的问题。
【问题讨论】:
-
我们使用单独的机器来存储 NFS 安装到应用程序服务器的静态和媒体。它有效,但我们几乎没有你的负载......