2 回答
TA贡献1801条经验 获得超15个赞
上传文件的用户可以容忍错误,然后重试。但是当上传的文件只存在于它上传到的机器上时存在危险,并且在上传到云存储之前出现问题。在这种情况下,文件将丢失,这对用户来说将是一个无赖。
这是通过良好的架构解决的。这是一个先进先出的队列模式。
这种模式的一个最受欢迎的 Go 实现是go-workers,它可能由Redis数据库支持。
假设在任何给定时间有n个服务器运行您的服务。假设您的后端代码编译了两个单独的二进制文件,一个服务器二进制文件和一个工作二进制文件。
理想情况下,接受文件上传的机器都会挂载一个共享的网络文件系统,这样:
用户上传文件到服务器
一种。服务器将一条记录添加到工作队列中,该记录包含来自 Redis 存储的唯一 ID。
湾 这个唯一的 ID 用于创建文件名,文件直接从用户上传到 NFS 服务器上的临时存储。请注意,该文件永远不会驻留在运行服务器的机器的存储中。
文件由工人上传到云存储
一种。worker从具有唯一 ID 的工作队列中取出下一个待办事项记录
湾 使用唯一 ID 在 NFS 服务器上查找文件,工作人员将文件上传到云存储
C。成功后,worker更新工作队列中的记录以反映成功
d. worker删除 NFS 服务器上的文件
通过将服务器流量和工作队列大小作为两个独立的指标进行监控,可以确定应该分别运行服务器/工作器服务的服务器数量。
TA贡献1836条经验 获得超3个赞
Marcio Castilho 写了一篇关于类似问题的好文章。它可以在使用 golang 处理每分钟一百万个请求中找到。
他展示了他所犯的错误以及他为纠正这些错误所采取的步骤。一般学习通道、goroutines 和并发的使用的好资源。
charneykaye提到的go-workers也是很好的来源。
- 2 回答
- 0 关注
- 127 浏览
添加回答
举报