如果队列中放置了作业(pub-sub)分布式系统,如何处理问题,并且它们之间存在依赖关系。
例如队列的当前状态:
j3 -> j2 -> j1 rear front
j3取决于j1的完成。
队列处理器正在使用这些作业并开始在分布式环境中处理它。
基于某种依赖性解析机制,找到了j1
和j3
之间的依赖关系。
现在,我不知道的是,处理情况的最佳方式:
j3
放回队列中,然后再将其取回
后期,以便j1
到那时完成?j3
个依赖关系,然后处理j3
?任何帮助都将不胜感激。
谢谢!
答案 0 :(得分:0)
让作业调度程序知道这些作业位于队列的前面,但正在等待某些依赖项,这是最好的方法。这样,您可以在等待依赖项完成时完成其他工作,但仍然按顺序处理它们。
如果队列长度相对较短并且依赖性非常少,那么将项目重新推送到队列的开头是一个很好的解决方法,如果它相对便宜的话。如果您向后推的项目也是其他任务的依赖项,那么当它们到达前面时(或者一次,但这不必要地很难),它们也需要被推到队列的后面。如果队列长度很长,您可能会看到意外延迟。例如,如果队列是一天,您可能最终等待任务完成的等待天数。如果该任务是依赖链的一部分,则问题会增加。
无论哪种方式,您都需要知道任务是否排队/正在运行/已完成。您可以将此信息存储在您喜欢的数据库中,或使用一些八卦协议或任何您喜欢的方式。如果执行两次相同的作业不是正确性问题,则可以使用AP系统(在CAP意义上,具有最终一致性,例如八卦协议)。如果两次运行相同的任务会让事情变得非常糟糕,那么您需要一些共识机制,比如单个事实来源,例如您最喜欢的sql数据库或者可能是couchbase。