[英]Microservices architecture tasks system problem
此刻,我正在編寫具有微服務架構的新應用程序。 我的應用程序將做什么的簡短說明如下:
running: true
任務的產品,它會抓取產品並創建一個帶running: true
的新任務。running: false
我目前正在苦苦掙扎的是,我希望微服務 A 重新開始對微服務 C 處理過的產品進行抓取。為此,我想到了某種任務系統,其中每個抓取的產品也有一個任務 ID與他們聯系在一起。 我目前遇到的唯一問題是:
我想問的是,如果有人有關於如何在我的微服務中改進/實現這樣一個系統的方法或技巧。 每個產品都需要在前一個產品完成后立即刮掉。 目前微服務 A 只是檢查它是否可以使用 setInterval 找到產品的正在運行的任務。
所有這些都是在 NodeJS 中開發的,所有信息都保存在 MongoDB 數據庫中。 微服務之間的通信是通過rabbitMQ完成的。
很感謝任何形式的幫助。
我想為這個架構添加兩點。 似乎每個微服務都會隨着時間改變數據的狀態,但數據源是相同的。
1. 為什么不在每個微服務[state]處改變數據狀態?
現在,您正在為您開始running:true
一項作業使用布爾值running:true
。 我們可以將其更改為['scrapping', 'compare', 'notify']
{
...
status : 'scrapping',
jobId : 23,
...
}
現在,當數據最后是微服務 C 時,它可以為消費者微服務 A 發布一個狀態為“通知”的新作業,A 可以有條件地處理這種情況,並在需要時進行回收。 另一個好處是每個微服務也可以有條件地識別基於作業狀態的作業。 因此,在任何失敗或重啟的情況下,每個微服務只會執行符合其標准的任務。 例如,微服務 B 不會啟動一個沒有scrapping
狀態的工作。 基本上,只有在使用channel.ack(message)
完成后才確認您的工作。
2.數據同步
我不建議創建多個 B 微服務作為消費者,數據同步可能存在問題[而多個消費者 B,在同一頁面上使用不同的產品] 或者,您可以測量每頁的產品列表,相應地調整您的隊列配置進行一些測試(但不要排隊太長,因為這會降低速度並影響性能,或者將它們捆綁為一項作業並將其發送進行處理。
探索更多:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.