2016-09-16 103 views
0

如何在存在作业放入队列时发出问题(pub-sub)分布式系统,并且它们之间存在依赖关系。队列中的作业(pub-sub)具有依赖关系的分布式系统?

例如,当前队列状态:

j3 -> j2 -> j1 
rear  front 

j3取决于j1的完成情况。

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

基于一些依赖关系解析机制,找出了j1j3之间的依赖关系。

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

  • 我应该把j3回到队列,并再次把它捡起来在 后一阶段,使j1那时候会完成吗?
  • 我应该有一些其他机制 - 数据库来检查是否所有的 j3依赖项已满足,然后处理j3

任何帮助,将不胜感激。

谢谢!

回答

0

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

将项目返回到队列的起始位置是一个很好的解决方法,如果这样做相对便宜,如果队列长度相对较短并且依赖性很少。如果你推到后面的项目也是其他任务的依赖项,当它们到达前面(或者立即,但是这不必要的困难)时,它们也需要被推到队列的后面。如果队列长度很长,您可能会看到意外的延迟。例如,如果队列长达一天,则可能会等待几天完成任务。如果这个任务是一系列依赖关系的一部分,问题就会增加。

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

+0

感谢您指出CAP定理! – AKK

+0

@AKK有更多的一致性模型比CAP定理所允许的7更多,但是:) –

+0

请您指点我一些很好的资源来阅读更多关于一致性模型的内容吗?谢谢! – AKK