1. 程式人生 > >系統架構師考試筆記之高併發佇列的學習

系統架構師考試筆記之高併發佇列的學習

訊息佇列已經逐漸成為企業IT系統內部通訊的核心手段。它具有低耦合、可靠投遞、廣播、流量控制手段。最終一致性等一系列的功能,成為非同步RPC的主要手段之一。

訊息佇列被處理的過程相當於流程 A被處理。我們這裡以一個實際的模型來計論下,如如使用者下單成功時給用記發簡訊,如果沒有這個訊息佇列,我們會選擇同步呼叫發簡訊的介面。

並等等簡訊息傳送成功,這時候假設簡訊介面實現出現問題,或者簡訊呼叫超時了,又或者簡訊傳送達到了上限,我們是選擇重試幾次還是放棄,還是先擇把這個放到資料庫

過一段時間再看看呢,不管怎麼樣,實現都很複雜。

我們可以將發簡訊放在訊息佇列裡,訊息佇列按照一定的順序挨個處理佇列裡的訊息,當處理到傳送簡訊的任務時,通知簡訊服務傳送訊息,如果出現之前出的現的問題,那麼把這個訊息重新放到訊息佇列中。

訊息佇列的好處:

1.成功完成了一個非同步解耦的過程。簡訊傳送時只要保證放到訊息佇列中去就可以了,接著後面的事情就行。一個事務只關心本質的流程,需要依賴其他事情但是不是那麼要的時候,有通知即可,無需等待結查。每個成員不必受其他成員影響,可以更獨立自主,只通過一個簡單的容器來聯絡。

對於我們的訂單系統,訂單最終支付成功之扣可以需要給使用者傳送簡訊積分什麼的,但其實這已經不是我們系統的核心流程了。如果外部系統偏慢,那麼主流程的時間會加很多,使用者肯定不希望點選支付過了幾分鐘才看到結果。那麼我們只需要通知簡訊系統“我們支付成功了”,不一定非要等待它處理完成。

2.保證最終一致性,通過在佇列中存放任務保證它最終一定會執行。

最終一致性指的是兩個系統的狀態保持一致,要麼都成功,要麼都失敗。當然有個時間限制,理論上越快越好,但實際上在各種異常的情況下,可以會有定延遲達到最終一致狀態,但最後兩個系統的狀態是一樣的。

業界有一些為“最終一致性”而生的訊息佇列。