簡體   English   中英

如何在負載下提高我的 NServiceBus Saga 的性能

[英]How to improve the performance of my NServiceBus Saga under load

我有一個使用 SQL 傳輸和 NHibernate 持久性用 NSB7 構建的非常簡單的 Saga。

Saga 偵聽隊列,並為收到的每條消息運行 4 個處理程序。 它們按順序調用,2 個處理程序並行運行,最后一個處理程序僅在兩個並行處理程序都完成后運行。 最后一個處理程序向 DB 寫入一條記錄

假設對於單個消息,每個處理程序需要 1 秒。 當收到一條新消息時,啟動 Saga,預期的結果是 3-4 秒后將記錄寫入數據庫。

如果隊列備份了 1000 條消息,一旦它們再次開始處理,在最后一個處理程序中創建新記錄之前需要將近 2000 秒。 基本上,不是為每條消息運行預期的 4 秒處理時間,而是有效地聚集在初始處理程序中,直到隊列被清空,然后為下一個處理程序再次執行此操作,以此類推。

關於如何在負載下提高該系統的性能的任何想法,以便在另一端出現單個新記錄之前,處理過的消息的恆定流出現在末尾,而不是一堆消息和長時間的延遲?

謝謝威爾

有關於 saga 並發問題的文檔: https : //docs.particular.net/nservicebus/sagas/concurrency#high-load-scenarios

我仍然不完全理解這個問題。 每個實例化 saga 的消息都應該在處理消息后在數據庫中創建一條記錄。 不是在 1000 條消息之后。 NServiceBus 還能如何保證一致性?

除此之外,您可能不應該讓 4 個處理程序處理單個消息。 如果真的需要這樣工作,請使用發布/訂閱並創建不同的端點。 saga 應該盡快完成處理,尤其是在高負載情況下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM