Kubernetes共享临时存储异步上传文件
Kubernetes share temporary storage to upload file async
以下 and this,这是我的情况:
用户将图像上传到我的后端,设置如下:LB -> Nginx Ingress Controller -> Django (Uwsgi)。该图像最终将上传到对象存储。因此,Django 会暂时将图像写入磁盘,然后将上传任务委托给异步服务(DjangoQ),因为上传到对象存储可能很耗时。这里有一个问题:因为我的 Django 副本和 DjangoQ 副本都是分开的 pods,该文件在 DjangoQ pod 中不可用。像往常一样,任务队列由 redis 代理管理,任何随机的 DjangoQ pod 都可以使用该任务。
我需要一种方法来与 DjangoQ 共享 Django 创建的磁盘文件。
上面提到的帖子基本上都提到了两种解决方案:
- 解决方案 1:将 NFS 挂载到所有 pods 上的磁盘。这似乎有点矫枉过正,因为共享卷只存储文件几秒钟,直到上传到对象存储完成。
-解决方案 2:Django 服务应该通过 API 使文件可用,DjangoQ 将使用它从另一个 pod 访问文件。这看起来不错,但我不知道如何继续...我是否应该创建第二个 Django/uwsgi 应用程序作为侧容器,它会侦听另一个端口并发送带有文件的 HTTPResponse?文件可以流式传输吗?
第三个选项:根本不要通过您的应用移动文件数据。让用户将其直接上传到对象存储。这通常意味着制作一个 API 其中 returns 预签名上传 URL 有效期几分钟,用户上传文件,然后再次调用让您知道上传已完成.然后你的异步任务可以下载它并做任何事情。
否则你的两个选项都是正确的。对于选项 2,内部 Minio 服务器非常普遍,因为 Django 处理大文件 blob 的速度非常慢。
以下
用户将图像上传到我的后端,设置如下:LB -> Nginx Ingress Controller -> Django (Uwsgi)。该图像最终将上传到对象存储。因此,Django 会暂时将图像写入磁盘,然后将上传任务委托给异步服务(DjangoQ),因为上传到对象存储可能很耗时。这里有一个问题:因为我的 Django 副本和 DjangoQ 副本都是分开的 pods,该文件在 DjangoQ pod 中不可用。像往常一样,任务队列由 redis 代理管理,任何随机的 DjangoQ pod 都可以使用该任务。
我需要一种方法来与 DjangoQ 共享 Django 创建的磁盘文件。
上面提到的帖子基本上都提到了两种解决方案:
- 解决方案 1:将 NFS 挂载到所有 pods 上的磁盘。这似乎有点矫枉过正,因为共享卷只存储文件几秒钟,直到上传到对象存储完成。
-解决方案 2:Django 服务应该通过 API 使文件可用,DjangoQ 将使用它从另一个 pod 访问文件。这看起来不错,但我不知道如何继续...我是否应该创建第二个 Django/uwsgi 应用程序作为侧容器,它会侦听另一个端口并发送带有文件的 HTTPResponse?文件可以流式传输吗?
第三个选项:根本不要通过您的应用移动文件数据。让用户将其直接上传到对象存储。这通常意味着制作一个 API 其中 returns 预签名上传 URL 有效期几分钟,用户上传文件,然后再次调用让您知道上传已完成.然后你的异步任务可以下载它并做任何事情。
否则你的两个选项都是正确的。对于选项 2,内部 Minio 服务器非常普遍,因为 Django 处理大文件 blob 的速度非常慢。