问题描述
问题
考虑一个支持以下操作的社交网站:
- MediaUploadService :您可以上载单个文件或多个文件的媒体文件(图像和视频)。
- TaggingService :文件上传后,文件中标识的所有人员都会被自动标记。
- NotificationService :标记文件后,所有人员都将收到通知。
必须满足以下要求:
- 用户可以随时取消上传,这意味着上传也应停止。这也意味着标记和通知服务甚至不应针对此类请求触发。
- 所有服务都应该能够重试失败的作业。
- 所有服务都通过消息传递基础结构进行通信。
- 服务必须是可扩展的并且可用。
我的拍摄
我们可以有一个全局任务队列,上载服务可以侦听新作业。该请求可以表示为:
{
"request_id":"abcd-defg-pqrs","total_files": 2,"files":[
{
"id":"bcde-efgh-qrst","name":"cat.jpg","type":"image"
},{
"id":"cdef-fghi-rstu","name":"kitty.mp4","type":"video"
}
]
}
该请求分为单个文件上传请求,并被推送到 upload-request 消息队列:
{
"request_id":"abcd-defg-pqrs","file":{
"id":"bcde-efgh-qrst","type":"image"
}
}
每个请求均被挑选并作为后台作业处理,然后将响应发送到 upload-response 聚合器,该聚合器将保留上传的文件总数:
{
"request_id":"abcd-defg-pqrs","uploaded_files": 1,"file":[
"bcde-efgh-qrst"
]
}
所有文件上传完毕后,最终响应将发送到 tagging-request 消息队列:
{
"request_id":"abcd-defg-pqrs","files":[
"bcde-efgh-qrst","cdef-fghi-rstu"
]
}
完成作业的标记服务后,它将请求发送到 notification-request 消息队列。最后,一旦我们完成所有任务,就可以使用 global-response 消息队列将其通知给用户。
关注点
- 对于重试失败的作业,我们可以为每个服务设置其他低优先级队列。如果我们也想在实时范围内给予相同的优先级和重试流程,该怎么办?
- 处理尊重服务相关性的作业,即
upload
→tag
→notify
的工作是使用消息传递队列。有没有更好的方法可以达到相同的目的? - 我们如何立即停止文件上传(假设在我们提出取消请求时文件上传仍在进行中)?对于上传的文件,我们只需继续删除文件即可。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)