2016-09-16 54 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