中間件——消息隊列的作用,為什么要用消息隊列?


消息隊列的作用:1,是減少相應所需的時間和削峰2,降低系統耦合性(解耦或提升系統的可拓展性)

當我們不使用消息隊列的時候,所有用戶的請求都會直接落到服務器上,然后通過數據庫或者緩存相應,假如在高並發的環境下,如果沒有緩存或者數據庫承受不了那么大的壓力的話,就會造成響應速度緩慢,甚至造成數據庫宕機。因此這時候如果使用消息隊列,用戶發送的請求數據發送給了消息隊列之后就可以立即返回,再由消息隊列的消費者進程從消息隊列中獲取數據,異步寫入數據庫。由於消息隊列服務器的處理速度大於數據庫,因此響應速度大幅度提高。

(圖片來自於網絡)

另外消息隊列還具有一定的削峰的作用——通過異步處理,將短時間內高並發產生的事務消息存儲在消息隊列當中,從而削平高峰期的並發事務。比如一些電商網站的秒殺和促銷活動都是用消息隊列來緩解對系統的沖擊,當然這時用戶請求的壓力也就變成了消息隊列的壓力。

(圖片來自於網絡)

同樣的消息隊列還可以降低系統的耦合性,就像我們知道如果模塊之間不存在直接的調用,那么新增的模塊就會對其他的模塊的影響減少,這樣系統的可拓展性就更好。生產者發送信息到消息隊列當中去,接收者負責處理消息,需要消費的系統直接去消息隊列當中去取即可,這樣就不需要和其他系統有耦合沖突,就提升了系統的拓展性。

當然消息隊列也不是沒有缺點的:

1.首先就是系統的可用性降低了,在加入mq之前,你不用去考慮消息的丟失的情況,因為當時的請求和相應都是同步的。但是在加入mq之后,就需要去考慮消息丟失或者mq掛掉的情況。

2.加入mq之后,需要保證消息不會被重復消費(重點,也就是一定要保持冪等性),處理消息丟失,保證消息的順序閱讀。

3.一致性,異步處理雖然可以增加相應的速度,但是需要注意消費者消費的信息是否正確和合理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM