中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MQ如何解決消息的順序問題和消息的重復問題

發布時間:2020-07-15 20:29:43 來源:網絡 閱讀:500 作者:阿笨NET 欄目:編程語言

作者:CHEN川

鏈接:http://www.jianshu.com/p/453c6e7ff81c

來源:簡書

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

一、摘要

分布式消息系統作為實現分布式系統可擴展、可伸縮性的關鍵組件,需要具有高吞吐量、高可用等特點。而談到消息系統的設計,就回避不了兩個問題:

1、消息的順序問題

2、消息的重復問題

二、關鍵特性以及其實現原理

2.1、順序消息

要實現嚴格的順序消息,簡單且可行的辦法就是:

保證生產者 - MQServer - 消費者是一對一對一的關系

這樣的設計雖然簡單易行,但也會存在一些很嚴重的問題,比如:

1、并行度就會成為消息系統的瓶頸(吞吐量不夠)

2、更多的異常處理,比如:只要消費端出現問題,就會導致整個處理流程阻塞,我們不得不花費更多的精力來解決阻塞的問題。

但我們的最終目標是要集群的高容錯性和高吞吐量。這似乎是一對不可調和的矛盾,那么阿里是如何解決的?

有些問題,看起來很重要,但實際上我們可以通過合理的設計或者將問題分解來規避。如果硬要把時間花在解決問題本身,實際上不僅效率低下,而且也是一種浪費。從這個角度來看消息的順序問題,我們可以得出兩個結論:

1、不關注亂序的應用實際大量存在

2、隊列無序并不意味著消息無序

2.2、消息重復

上面在解決消息順序問題時,引入了一個新的問題,就是消息重復。那么MQ是怎樣解決消息重復的問題呢?還是“恰好”不解決。

造成消息的重復的根本原因是:網絡不可達。只要通過網絡交換數據,就無法避免這個問題。所以解決這個問題的辦法就是不解決,轉而繞過這個問題。那么問題就變成了:如果消費端收到兩條一樣的消息,應該怎樣處理?

1、消費端處理消息的業務邏輯保持冪等性

2、保證每條消息都有唯一編號且保證消息處理成功與去重表的日志同時出現

第1條很好理解,只要保持冪等性,不管來多少條重復消息,最后處理的結果都一樣。第2條原理就是利用一張日志表來記錄已經處理成功的消息的ID,如果新到的消息ID已經在日志表中,那么就不再處理這條消息。

我們可以看到第1條的解決方式,很明顯應該在消費端實現,不屬于消息系統要實現的功能。第2條可以消息系統實現,也可以業務端實現。正常情況下出現重復消息的概率不一定大,且由消息系統實現的話,肯定會對消息系統的吞吐量和高可用有影響,所以最好還是由業務端自己處理消息重復的問題,這也是MQ不解決消息重復的問題的原因。

MQ不保證消息不重復,如果你的業務需要保證嚴格的不重復消息,需要你自己在業務端去重。

三、閱讀原文

【網易云課堂】:點擊在線觀看

【騰訊課堂】:點擊在線觀看

【微信公眾號】:跟著阿笨一起玩NET





向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

雷波县| 泗洪县| 青浦区| 临沭县| 通海县| 那曲县| 洛川县| 花莲县| 新昌县| 交口县| 乌兰察布市| 涿鹿县| 共和县| 蓝山县| 湖口县| 镇坪县| 商河县| 客服| 固始县| 泰顺县| 西昌市| 固阳县| 茂名市| 天津市| 明水县| 汉川市| 榆林市| 石河子市| 繁昌县| 越西县| 犍为县| 墨江| 金门县| 北流市| 琼海市| 新泰市| 连州市| 章丘市| 兰西县| 察雅县| 嘉鱼县|