-
Notifications
You must be signed in to change notification settings - Fork 46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Q&A #17
Comments
作者你好,本项目若在集群部署,那么每一个节点将会有自己的任务生产者与消费者,但我发现每次生产者定时查询DB获取任务时,只根据任务状态进行查询,那么是否可能会获取到其它节点的任务,导致handler在处理时,当前节点并没有文件而导致任务失败。我认为是否应该在发布任务时,插入当前节点ip到DB,而在生产者获取任务时根据status与node_ip进行获取任务进行处理,使得当前节点消费者只处理当前节点的任务。 |
感谢关注,这是一个好问题,因为文件分片相关的任务,需要和node_ip来关联执行。 我们从问题思路,项目设计,代码优化几个方面来看下, 问题思路这里从你的疑问点出发,解释下为什么不使用node_ip。 首先,使用容器部署,每次重新部署后,node_ip都会发生变化(你可以使用固定ip,但这个应用没必要),会导致有些未执行的任务不被执行。当然,你可以另外写逻辑,使用脚本来兜底。 另外,这是一个通用的异步任务设计,如果不涉及文件分片相关的任务,希望能多副本抢占任务,而不是只能单个副本+node_ip执行,比如发送邮件等。 项目设计这里从现有逻辑来看,解释下为什么可以正常运行。 集群部署时,每个副本都会启动本地生产者和消费者,两者通过 osproxy/app/pkg/event/dispatch/producer.go Lines 35 to 54 in 8108ac3
代码优化分析完之后,发现partDelete任务的预处理确实有点问题,需要增加判断uid是否在本地的逻辑,在下面的代码中: osproxy/app/pkg/event/handlers/partdelete.go Lines 22 to 38 in 8108ac3
新增partMerge类似逻辑的代码: osproxy/app/pkg/event/handlers/partmerge.go Lines 42 to 47 in 8108ac3
请问,你能提交一个commit来修复这个问题吗?非常感谢。 |
u> > 作者你好,本项目若在集群部署,那么每一个节点将会有自己的任务生产者与消费者,但我发现每次生产者定时查询DB获取任务时,只根据任务状态进行查询,那么是否可能会获取到其它节点的任务,导致handler在处理时,当前节点并没有文件而导致任务失败。我认为是否应该在发布任务时,插入当前节点ip到DB,而在生产者获取任务时根据status与node_ip进行获取任务进行处理,使得当前节点消费者只处理当前节点的任务。
当然可以,这是我的荣幸,也非常感谢您解答我的疑惑 |
为什么需要分布式转发?
(1) 文件需要先在本地校验合并后,再上传到对象存储;大文件分片时,数据需要转发到一个机器上方便合并。
(2) 如果文件上传失败,对象存储中不存在脏数据
如果不在本地中转,直接代理到对象存储是否可行?
可以,s3协议的对象存储支持分片合并,同时会清理长时间不使用的数据。
这个项目的主要目的是什么?
屏蔽底层对象存储,方便底层数据迁移。
The text was updated successfully, but these errors were encountered: