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

时间:2016-09-16 16:56:42

标签: queue distributed-system

如果队列中放置了作业(pub-sub)分布式系统,如何处理问题,并且它们之间存在依赖关系。

  

例如队列的当前状态:

j3 -> j2 -> j1
rear      front
     

j3取决于j1的完成。

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

基于某种依赖性解析机制,找到了j1j3之间的依赖关系。

现在,我不知道的是,处理情况的最佳方式:

  • 我应该将j3放回队列中,然后再将其取回 后期,以便j1到那时完成?
  • 我应该有一些其他机制 - 数据库来检查是否全部 已经满足j3个依赖关系,然后处理j3

任何帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

无论哪种方式,您都需要知道任务是否排队/正在运行/已完成。您可以将此信息存储在您喜欢的数据库中,或使用一些八卦协议或任何您喜欢的方式。如果执行两次相同的作业不是正确性问题,则可以使用AP系统(在CAP意义上,具有最终一致性,例如八卦协议)。如果两次运行相同的任务会让事情变得非常糟糕,那么您需要一些共识机制,比如单个事实来源,例如您最喜欢的sql数据库或者可能是couchbase。