我正在研究纯粹使用 Golang 的后端架构。我有一个 API,用于将文件上传到 golang 服务器,然后我将文件传输到云存储(从 golang 服务器本身)。现在,我希望两个传输都是独立的,这样最终用户就不必在上传文件后等待响应。
End User -> Golang Server ->[Concurrency/Parallelism] -> Cloud Storage
现在,我想到了两种方法:
用户完成上传并将文件传输到云后,立即创建一个 goroutine。
将文件处理程序插入队列,不同的进程将读取此队列并将文件传输到云存储(多生产者 - 单消费者模型)。
我找到了使用 goroutine 和 channels 执行此操作的示例,但我认为这将创建与上传一样多的 goroutine。我想使用第二个选项,但无法理解如何在 golang 中进行操作?
另外,请建议我是否使用了错误的方法,并且还有其他一些有效的方法可以做到这一点。
更新
有关要求和约束的详细信息:
1. 我使用 AWS S3 作为云存储。如果在某个时候,从 Go 服务器到 Amazon S3 的上传失败,文件处理程序应该保持原样以记录失败的上传。(我没有优先考虑这一点,我可能会根据客户的反馈进行更改)
2.上传到 Amazon S3 成功完成后,文件将立即从 Go 服务器中删除,以避免重复上传。此外,如果文件以相同的名称上传,它将在 Amazon S3 中被替换。
3.正如评论中所指出的,我可以使用频道作为队列。是否可以使用 Go 的 Channels 和 goroutines 来设计上述架构?
侃侃尔雅
米脂
相关分类