RabbitMQ 入门系列(5)— RabbitMQ 使用场景优缺点
1. 為什么要使用 MQ
1.1 異步
怎么理解異步這個概念呢? 舉個簡單的例子,假設有個業務需要寫數據庫,但是呢寫數據庫需要一定的網絡開銷,可能是幾毫秒或者幾十毫秒,這對于延時要求很高的業務來說是不可接受的,在寫數據庫的同時會嚴重阻塞后面的任務。要解決這種場景的問題,就需要采用異步的設計。
而 MQ 的出現為這種異步的設計提供了很好的支持, 我們可以把要寫數據庫的 SQL 存儲在 MQ 中,而由另外的進程從 MQ 中讀取并寫進數據庫, 這樣就可以避免主業務在寫數據庫延遲操作。
1.2 解耦
解耦, 從字面意思來看就是解除耦合。以上面的例子繼續來講,假如 A 功能用于生成寫數據庫的 SQL, 而 B 功能用于將 SQL 執行寫到數據庫, 那么假如業務需求發生變更,需要寫多張表或者修改生成的 SQL,那么我們只需要修改功能 A 就可以。
而假如沒有解耦的話,那么就必須修改整個業務邏輯,肯能會引發其它的問題。
1.3 高并發緩沖
假如瞬時間有 1 萬個任務同時觸發, 但是系統最大能同時負載 1000 個任務,如果在同一時刻處理這 1 萬個任務,系統可能會崩潰,那么就可以把這 1 萬個任務發送給 MQ,讓 MQ 先緩存下來,然后系統在每秒從 MQ 中獲取 1000 個任務來處理。這樣就可以避免瞬時間給系統造成的壓力。
1.4 順序調度
先進先出,按順序處理。
2. MQ 可能帶來的問題
2.1 系統可用性降低
增加 MQ 之后在一定程度上方便了我們專注于業務開發,但是如果 MQ 使用不當或者 MQ 突然掛掉,那么就會對我們的業務造成很大的影響。所以從這個角度來看增加 MQ 會使我們系統的可用性降低。
2.2 系統復雜度提高
本來系統通過調用接口就能完事的,但是加入一個 MQ 之后,需要考慮消息重復消費、消息丟失、甚至消息順序性的問題,為了解決這些問題,有需要引入很多復雜的機制,這樣一來系統的復雜度提高了很多。
2.3 數據一致性問題
當 A 功能生成 SQL 之后,A 就認為當前系統中某個屬性已經發生變更,但是假如 B 功能沒有將 SQL 寫進數據庫那么就會造成系統某個屬性的實際值和預期值不一致問題。
總結
以上是生活随笔為你收集整理的RabbitMQ 入门系列(5)— RabbitMQ 使用场景优缺点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个6个字个性签名!
- 下一篇: 但求一死下一句是什么呢?