我們正試圖儘可能地分離出我們的系統。我們理想地喜歡微服務只做一件事,而且一件事情很好。他們不應該知道依賴關係。他們應該從隊列中抽出一份工作,完成工作,並以某種方式發出一份完成工作的事件(我會回到這個)。如何在微服務架構中建模服務依賴關係?
我們的系統包含「快照」(圖片)作爲基礎,原子單位。 「事件」是最大長度爲5分鐘的快照分組。
一旦我們收到快照到我們的系統中,並確定它們屬於哪個事件,我們將這些快照排入RabbitMQ實例,以便執行一些圖像分析。然後我們有「快照分析儀」微服務拉下這個隊列並執行圖像分析。這些微服務直接寫入數據庫,爲圖像對象附加更多的元數據。這些也是無國籍的,並且易於水平擴展。
問題是,在快照分析儀已完成其工作後,有任務需要完成。如果我們檢測到快照上的某些屬性,我們希望使用「事件分析器」對該事件執行工作。我們不希望多次對此事件進行工作(因此,如果多個快照具有這些屬性,則無關緊要 - 我們仍然只想在事件上執行該操作)。這對於設計人員來說非常具有挑戰性,特別是在分佈式環境中,我們有幾個這樣的圖像分析儀正在退出隊列。我們目前所做的是,如果我們在快照上檢測到這些屬性(意味着我們希望在包含此快照的事件上完成工作),我們會將其寫入事件。如果是第一次寫入事件,我們將它排入我們的第二個隊列以進行事件處理。這確保了該事件只能排隊一次。是
與上述方法的問題如下:快照分析器和事件分析器生命快照分析器內部之間
- 依賴。理想情況下,我希望快照分析器不瞭解事件分析器。它應該只是做它的工作,而不關心排隊的事情。我不確定這個依賴關係應該在哪裏編碼。
- 找出排隊事件,當該事件的多個快照正在同時處理。如何只參加一次賽事的參賽作品。當調用$ set時,我們「濫用」MongoDB的原子更新,返回它是否成功。
有沒有人有任何想法或如何聲明相似的依賴關係的例子?我需要一個調度員服務,負責排隊等待正確的事情,並從一個工作完成隊列或其他東西拉。