队列中的作业(pub-sub)具有依赖性的分布式系统?

Jobs in the queue(pub-sub) distributed systems with dependencies?

当有作业放入队列(pub-sub)时如何解决问题分布式系统,并且它们之间存在依赖关系。

For e.g. current state of the queue:

j3 -> j2 -> j1
rear      front

j3 depends on the completion of j1.

队列处理器正在使用这些作业并开始在分布式环境中处理它们。

基于某种依赖解析机制,发现了j1j3之间的依赖。

现在,我不知道的是,处理这种情况的最好方法是:

如有任何帮助,我们将不胜感激。

谢谢!

最好的方法是让作业调度程序知道这些作业位于队列的前面,但正在等待某些依赖项。这样,您可以在等待依赖关系完成的同时完成其他工作,但仍尽可能按顺序处理它们。

将项目推回到队列的开头是一个很好的解决方法,如果这样做相对便宜,如果队列长度相对较短并且依赖项很少。如果你推到后面的项目也是其他任务的依赖项,那么当它们到达前面时也需要将它们推到队列的后面(或立即,但这不必要地困难)。如果队列长度很长,您可能会看到意外的延迟。例如,如果队列长达一天,您最终可能要等待数天才能完成任务。如果该任务是依赖链的一部分,问题就会增加。

无论哪种方式,您都需要知道任务是否 queued/running/finished。您可以将这些信息存储在您最喜欢的数据库中,或者使用一些八卦协议或任何您喜欢的方式。如果同一个作业执行两次不是正确性问题,则可以使用 AP 系统(在 CAP 意义上,具有最终一致性,例如八卦协议)。如果 运行 同样的任务两次会把事情搞得一团糟,你将需要一些共识机制,比如单一的事实来源,比如你最喜欢的 sql 数据库或者 couchbase。