精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用消息中間件時,如何保證消息僅僅被消費一次?

開發(fā) 前端
消息中間件使用廣泛,常用來削峰填谷、系統(tǒng)解耦、異步處理。異步處理可能是使用的最多的場景了,比如現(xiàn)在的技術博客網(wǎng)站,都采用積分制,用戶發(fā)表一篇文章后,可以獲取想要的積分,為了提升系統(tǒng)的性能,給用戶加積分的操作可以異步處理,并不需要放在同步流程中。

 消息中間件使用廣泛,常用來削峰填谷、系統(tǒng)解耦、異步處理。異步處理可能是使用的最多的場景了,比如現(xiàn)在的技術博客網(wǎng)站,都采用積分制,用戶發(fā)表一篇文章后,可以獲取想要的積分,為了提升系統(tǒng)的性能,給用戶加積分的操作可以異步處理,并不需要放在同步流程中。

[[318312]]

我們可以把用戶ID,需要增加的積分封裝成一條消息投遞到消息系統(tǒng)中,異步處理加積分操作,由于這是發(fā)生在不同服務器之間,消息有可能投遞失敗、處理失敗等問題,從而導致用戶加積分失敗,還有一種可能是消息重復投遞,那么用戶就有可能重復加積分,不管出現(xiàn)那種情況,都是不正常的情況。

要避免上面的兩種情況,就需要我們盡量保證消息不丟失和消息只被消費一次,這篇文章拋開具體的消息中間件,從消息系統(tǒng)的通用層面上,談談如何避免這兩種情況。

1、保證消息不丟失

一條消息從生產到消費這條鏈路中,有三個地方可能會造成消息丟失,分別如下:

  • 消息從生產者寫入到消息隊列的過程投遞失敗。
  • 消息在消息隊列中,持久化失敗。
  • 消息被消費者消費的過程出現(xiàn)異常。

在消息生產的過程中投遞失敗

消息生產者和消息系統(tǒng)一般都是獨立部署在不同的服務器上,兩臺服務器之間要通信就要通過網(wǎng)絡來完成,網(wǎng)絡是不穩(wěn)定,可能會發(fā)生抖動,那么數(shù)據(jù)就有可能丟失。網(wǎng)絡發(fā)生抖動會有以下兩種情況。

 

在消息生產的過程中丟失消息

情景一:消息在傳送給消息系統(tǒng)的過程中發(fā)生網(wǎng)絡抖動,數(shù)據(jù)直接丟失。

情景二:消息已經到達消息系統(tǒng),但是在消息系統(tǒng)給生產者服務器返回信息時,網(wǎng)絡發(fā)生抖動,此時的數(shù)據(jù)不一定真正的丟失,很可能只是生產者認為數(shù)據(jù)丟失。

針對消息在消息生產時丟失,可以采取重投機制,當程序檢測到網(wǎng)絡異常時,將消息再次投遞到消息系統(tǒng)。但是重新投遞在情景二情況下,可能造成數(shù)據(jù)重復,如何解決這個問題,在后面會提到。

在消息隊列中持久化失敗

消息系統(tǒng)是可以對消息進行持久化,一般都是將消息存儲到本地磁盤中,當然也有少數(shù)消息中間件支持將數(shù)據(jù)持久化到數(shù)據(jù)庫中,那么消息系統(tǒng)的性能可能就會下降。

如果你對 Redis 的持久化有一定的了解話,你會發(fā)現(xiàn) Redis 在持久化數(shù)據(jù)時并不是每新增一條就立即存入到本地磁盤,而是會將數(shù)據(jù)先寫入到操作系統(tǒng)的 Page Cache 中,當滿足一定條件時,再將 Page Cache 中的數(shù)據(jù)刷入磁盤,因為這樣可以減少對磁盤的隨機 I/O 操作,我們知道隨機 I/O 是非常耗時的,這樣也提高了系統(tǒng)性能,消息中間件也不例外,在持久化時也是采用這種方式。

在某些極端情況下,可能會造成 Page Cache 中的數(shù)據(jù)丟失,比如突然停電或者機器異常重啟操作。要解決 Page Cache 中數(shù)據(jù)丟失問題,可以采用集群部署的方式,來盡量保證數(shù)據(jù)不丟失。

在消費的過程中存在消息丟失

消息在消費過程中也是會發(fā)生丟失的,而且在消費過程中丟失的概率要比前兩種情況大很多。一條消息消費過程大概分成三步:消費者拉取消息,消費者處理消息,消息系統(tǒng)更新消費進度。

 

圖片描述

第一步在拉取消息的時候可能發(fā)生網(wǎng)絡抖動異常,第二步在處理消息的時候可能發(fā)生一些業(yè)務異常,而導致流程并沒有走完,如果在第一步、第二步發(fā)生異常的情況下,通知消息系統(tǒng)更新消費進度,那么這條失敗的消息就永遠不會在被處理了,自然就丟失了,其實我們的業(yè)務并沒有跑完。

要避免消息在消費時丟失的情況,可以在消息接收和處理完成之后才更新消費進度,但是在極端的情況下,會出現(xiàn)消息重復消費的問題,比如某一條消息在處理完成之后,消費者宕機了,這時還沒有更新消費進度,消費者重啟后,這條消息還是會被消費到。

2、保證消息只被消費一次

消息系統(tǒng)本身不能保證消息僅被消費一次,因為消費本身可能重復、下游系統(tǒng)啟動拉取重復、失敗重試帶來的重復、補償邏輯導致的重復都有可能造重復消息,要保證消息僅被消費一次可以利用等冪性來實現(xiàn)。

等冪是數(shù)學上的一個概念,就是多次執(zhí)行同一個操作和執(zhí)行一次操作,最終得到的結果是相同的。

從等冪的概念上就可以看出來,就算消息執(zhí)行多次也不會對系統(tǒng)造成影響,那么在使用消息系統(tǒng)時如何保證等冪性呢?因為生產者和消費者都有可能產生重復消息,所以要在生產者和消費者兩端都保證等冪性。

保證生產者等冪性,在生產消息的時候,利用雪花算法給消息生成一個全局 ID,在消息系統(tǒng)中維護消息已 ID 映射關系,如果在映射表中已經存在相同 ID,這丟棄這條消息,雖然消息被投遞了兩次,但是實際上就保存了一條,避免了消息重復問題。

生產者等冪性跟所選者的消息中間件有關系,因為絕大數(shù)情況下消息系統(tǒng)不需要我們自己實現(xiàn),所以等冪性是不太好控制的,消費者等冪性才是我們開發(fā)人員控制的重點方向。

在消費者端可以從通用層和業(yè)務層兩個方面來做等冪操作,取決于我們的業(yè)務要求。

在通用層面中,利用好消息生成是產生的全局唯一ID,消息被處理成功后,把這個全局 ID 存入到數(shù)據(jù)中,在處理下一條消息之前,先從數(shù)據(jù)庫中查詢這個全局 ID 是否存在,如果已經存在,則直接放棄該消息。

利用這個全局唯一ID就實現(xiàn)了消息等冪性,偽代碼如下:

  1. boolean isIDExisted = selectByID(ID); // 判斷ID是否存在 
  2. if(isIDExisted) { 
  3.   return; //存在則直接返回 
  4. else { 
  5.   process(message); //不存在,則處理消息 
  6.   saveID(ID);   //存儲ID 

但是在極端情況下,這種方式還是會出問題,如果消息在處理之后,還沒來得及保存到數(shù)據(jù)庫,消費者就宕機重啟了,重啟之后還會再次獲取該消息,執(zhí)行時查詢該消息并未被消費過,還是會執(zhí)行兩次消費。可以引入數(shù)據(jù)庫事務來解決這個問題,但是會降低系統(tǒng)性能。如果對消息重復消費沒有特別嚴格要求的話,直接使用這種沒有引入事務的通用方案就好了,畢竟這也是極小概率的事情。

在業(yè)務層面上,我們可選擇性就變多了,比如樂觀鎖、悲觀鎖、內存去重(https://github.com/RoaringBitmap/RoaringBitmap)等方法。

我們拿樂觀鎖來舉例,比如我們要給一個用戶加積分,因為加積分操作并不需要放在主業(yè)務中,所以就可以使用消息系統(tǒng)來異步通知,要使用樂觀鎖,就需要給積分表添加一個版本號字段。并且在生產消息的時候先查詢這個賬號的版本號并且連同消息一起發(fā)送到消息系統(tǒng)中。

圖片描述

消費者拿到消息和版本號后,在執(zhí)行更新積分操作的 SQL 時帶上版本號,類似于:

  1. update score set score = score + 20, version=version+1 where userId=1 and version=1; 

這條消息消費成功后,version 就變成了 2,那么如果有重復的 version=1 的消息再次被消費者拉取到,SQL 語句并不會執(zhí)行成功,從而保證了消息的冪等性。

要保證消息僅被消費一次,我們需要把重點放在消費者這一段,利用等冪性來保證消息被消費一次。

今天站在消息中間件的通用層面上,聊了聊如何保證數(shù)據(jù)不丟失和僅被消費一次,希望今天的文章對您的學習或者工作有所幫助,如果您認為文章有價值,歡迎點個贊,謝謝。

 

責任編輯:華軒 來源: 互聯(lián)網(wǎng)平頭哥
相關推薦

2024-12-18 07:43:49

2022-10-28 13:33:05

Push模式互聯(lián)網(wǎng)高并發(fā)

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2015-08-11 11:16:36

淘寶中間件

2022-11-02 10:08:46

分布式高并發(fā)消息中間件

2021-12-14 10:39:12

中間件ActiveMQRabbitMQ

2019-07-19 07:56:13

消息隊列消息代理消息中間件

2022-08-09 08:31:29

RocketMQ消息中間件

2023-05-08 08:09:26

路由元信息謂詞

2022-09-21 16:09:28

消息中間件

2019-12-13 10:32:56

開源消息中間件

2019-09-11 09:00:19

消息中間件選型

2024-01-24 08:19:02

Stream應用場景注解

2022-02-13 23:04:28

RedisRabbitMQKafka

2022-10-21 10:48:17

消息中間件互聯(lián)網(wǎng)應用協(xié)議

2022-05-27 07:49:14

RocketMQ消息中間件分布式

2019-01-29 11:02:30

消息中間件Java互聯(lián)網(wǎng)

2019-11-12 08:40:03

RocketMQ架構

2020-10-10 08:04:09

RabbitMQ消息中間件
點贊
收藏

51CTO技術棧公眾號

www.欧美精品一二区| 久久国产小视频| 午夜视频一区二区| 欧美精品一区二区三区在线四季| 中文字幕网站在线观看| av在线播放一区| 一区二区在线免费观看| 麻豆av一区二区三区| 国产精华7777777| 欧美精品综合| 亚洲一区二区精品| 中文字幕人妻无码系列第三区| 一本大道熟女人妻中文字幕在线| 亚洲人一区二区| 91精品视频免费在线观看| 一区在线视频观看| 中文字幕在线成人| 中文在线一区二区三区| 国产一区二区三区免费观看在线| 中文字幕综合网| 久久免费一区| 亚洲乱熟女一区二区| 日韩av中文字幕一区二区| 久久精品美女视频网站| 一级性生活大片| av日韩精品| 欧美无人高清视频在线观看| 成年人午夜免费视频| 久久精品视频免费看| 99久久伊人网影院| 99se婷婷在线视频观看| 一道本在线视频| 国产精品久久久久久久久久妞妞| 日韩精品视频观看| 91小视频在线播放| 羞羞影院欧美| 欧美日韩视频在线| 91免费黄视频| 国产后进白嫩翘臀在线观看视频| www日韩大片| 成人动漫视频在线观看完整版| 国产一国产二国产三| 久久精品影视| 久久精品视频在线观看| 黄色片网站在线播放| 精品国产乱码久久久久久蜜坠欲下| 色偷偷一区二区三区| 免费在线观看亚洲视频| 欧美男男video| 一区二区三区精品视频在线| 日本xxxxx18| 日本在线免费| 亚洲国产精品成人综合色在线婷婷 | 日本在线精品视频| 国产无码精品在线播放| 禁久久精品乱码| 欧美精品第一页在线播放| 18精品爽视频在线观看| 亚洲午夜精品久久久久久app| 亚洲人成免费电影| 国产精品无码久久久久久| 婷婷五月色综合香五月| 亚洲男人天堂视频| 成人激情五月天| 色综合色综合| 久久国产精品首页| 久久免费在线观看视频| 在线免费观看欧美| 国产97免费视| 国产一区二区三区中文字幕 | 色综合久久88| 激情视频在线播放| 亚洲国产免费看| 欧美在线一级视频| 中文字幕一区二区三区波野结 | 台湾亚洲精品一区二区tv| 日韩电视剧免费观看网站| 久久无码人妻精品一区二区三区| 不卡精品视频| 精品少妇一区二区| 国产又黄又粗又猛又爽的视频 | 美日韩一级片在线观看| 国产欧美亚洲视频| 国产视频手机在线观看| 成人免费毛片aaaaa**| 久久99国产精品| 国产免费av在线| 亚洲九九爱视频| 9久久9毛片又大又硬又粗| 视频二区不卡| 91精品国产高清一区二区三区| 亚洲xxxx2d动漫1| 日韩一区二区三区色| 国产视频精品在线| 免费三级在线观看| 国产一区二区精品| 亚洲一区二区自拍| 精品乱码一区二区三四区视频| 懂色av中文一区二区三区 | 国自产拍偷拍精品啪啪一区二区| 黄av在线播放| 欧美日韩国产精品一区| 五月天av在线播放| 欧美日韩直播| 久久影院中文字幕| 日韩精品成人免费观看视频| 国产精品一区二区三区99| 欧美成人综合一区| 欧美黑人猛交| 欧美情侣在线播放| 丰满少妇高潮一区二区| 欧美日本国产| 国产精品永久免费| 日本在线视频1区| 亚洲精品视频观看| 15—17女人毛片| 日本午夜精品| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产黄色片在线免费观看| 久久国产精品99国产| 999视频在线观看| jizz在线观看视频| 精品国产乱码久久久久久婷婷 | 国产一二三区精品| 在线一区视频| 99视频日韩| 激情成人四房播| 欧美伊人久久久久久久久影院| 日本xxxx黄色| 久久不见久久见免费视频7| 久久久久久久久国产精品| 中文字幕人妻丝袜乱一区三区| 国产真实乱子伦精品视频| 欧美精品在线一区| 香蕉伊大人中文在线观看| 精品播放一区二区| 九九在线观看视频| 国产精品一区二区91| 宅男一区二区三区| 深夜福利亚洲| 日韩中文字幕在线看| 国产精品自拍第一页| 久久久久久久一区| 四虎永久在线精品无码视频| 欧美人与动xxxxz0oz| 97av视频在线| 涩爱av在线播放一区二区| 五月激情综合网| 亚洲一区二区三区综合| 男人的天堂亚洲| 视频一区二区精品| 日韩福利影视| 久久视频在线看| 91中文字幕在线播放| 综合欧美亚洲日本| 无码人妻少妇色欲av一区二区| 视频一区欧美| 国产精品96久久久久久| 狠狠v欧美ⅴ日韩v亚洲v大胸| 亚洲综合男人的天堂| 性生交大片免费看l| 激情欧美日韩一区| 久久久久成人精品免费播放动漫| 黄色大片在线播放| 欧美一区二区三区在线看| 激情高潮到大叫狂喷水| 国产一级精品在线| 久久综合久久久久| 日韩精品福利一区二区三区| 日本亚洲欧洲色| 在线观看二区| 日韩丝袜美女视频| 免费看日韩毛片| 国产免费久久精品| 午夜激情视频网| 亚洲精品激情| 亚洲精品tv久久久久久久久| 精品午夜视频| 欧美在线国产精品| 欧美激情午夜| 亚洲精品aⅴ中文字幕乱码| 久久国产乱子伦精品| 亚洲视频免费观看| av2014天堂网| 久久成人免费网| 欧美精品自拍视频| 欧美日韩在线二区| 高清国语自产拍免费一区二区三区| av在线天堂播放| 岛国av一区二区三区| 美女av免费看| 99re成人精品视频| 中文字幕资源在线观看| 亚洲激情影院| 制服国产精品| 猛男gaygay欧美视频| 亚洲综合在线做性| 日韩在线短视频| 欧美精品手机在线| 成年人在线视频免费观看| 日韩精品一区二区三区在线播放| 国产老头老太做爰视频| 波多野结衣一区二区三区| 精品一区精品二区高清| 精品一区二区国产| 亚洲男人在线| 国产成人精品电影| 免费网站在线观看人| 亚洲视频在线观看视频| 亚洲国产成人一区二区| 欧美日韩一级视频| 久久国产精品免费看| 伊人色综合久久天天| 天天舔天天操天天干| 99riav久久精品riav| 色男人天堂av| 久久精品国产久精国产| 爱福利视频一区二区| 国产一区二区中文| 亚洲天堂av免费在线观看| 精品国产91| 久久久久久久久久久久久久久久av| 国产调教在线| 欧美高清视频在线播放| 精品麻豆一区二区三区| 亚洲免费视频一区二区| 日韩中文字幕免费观看| 日韩亚洲欧美一区| 一级特黄录像免费看| 在线免费观看日本一区| 天堂中文字幕在线观看| 婷婷久久综合九色国产成人| 久久一二三四区| 亚洲乱码精品一二三四区日韩在线| 激情av中文字幕| 国产麻豆精品视频| 天堂av手机在线| 精品一区二区综合| 手机在线看福利| 日韩高清在线不卡| 蜜臀久久99精品久久久酒店新书| 亚洲va在线| 在线综合视频网站| 国产精品99久久精品| 午夜一区二区三视频在线观看| 欧美成年网站| 91精品久久久久久久久久久| 欧美久久久网站| 国产在线精品成人一区二区三区| 多野结衣av一区| 午夜精品久久久久久久久久久久久| 日本v片在线免费观看| 亚洲国内高清视频| 污污视频在线观看网站| 精品亚洲国产视频| 免费一级在线观看| 自拍偷拍免费精品| 免费网站看v片在线a| 久久久精品国产| 日本一本在线免费福利| 久久久欧美一区二区| 少妇视频在线观看| 国产成人亚洲综合青青| 亚洲国产尤物| 亚洲a成v人在线观看| jizz性欧美23| 久久一区免费| 日韩欧美一区二区三区免费看| 精品1区2区| 国产一卡不卡| 中国一级黄色录像| 在线国产欧美| 男女爽爽爽视频| 国产精品夜夜嗨| 少妇一级淫片免费放播放| 久久蜜桃一区二区| 一级免费黄色录像| 亚洲一区二区五区| 久久久久在线视频| 欧美日韩国产一二三| 亚洲免费成人网| 亚洲图中文字幕| 182tv在线播放| 日本成人激情视频| www.久久热| 久久99精品久久久久久水蜜桃| japanese色系久久精品| 日本精品二区| 综合久久99| 久久久免费视频网站| 国产尤物一区二区在线| 懂色av粉嫩av蜜乳av| 亚洲欧洲日韩在线| 日本熟女一区二区| 欧美日本一区二区在线观看| 婷婷视频在线观看| 久久激情视频免费观看| 国产精品25p| 成人写真福利网| 精品一区亚洲| www.av91| 精品一区二区三区视频在线观看| 污污网站在线观看视频| 国产精品亚洲一区二区三区在线| 亚洲一区二区图片| 久久亚洲一级片| 少妇影院在线观看| 欧美性一二三区| 天天干天天操av| 欧美久久精品午夜青青大伊人| 成人在线直播| 日产日韩在线亚洲欧美| 999久久精品| 一区二区日本| 日韩视频久久| 在线成人精品视频| 中文字幕一区二区不卡| 亚洲第一在线播放| 精品久久久久久久久久久院品网 | jizz亚洲少妇| 色婷婷综合久久久久中文| 人妻丰满熟妇av无码区hd| 久久人人爽人人爽爽久久 | 欧美在线视频免费播放| 中文在线免费一区三区| 在线视频不卡国产| 热久久国产精品| 精品欧美一区二区久久久| 亚洲成人av一区二区三区| 国产理论视频在线观看| 色久欧美在线视频观看| 日韩欧美少妇| 成人综合在线观看| 97在线观看免费视频| 欧美性黄网官网| 天堂网在线观看视频| 欧美夫妻性视频| 无码国模国产在线观看| 日韩不卡视频一区二区| 国产一区二区不卡| 欧美日韩人妻精品一区二区三区| 午夜视频一区二区三区| 亚洲成人av综合| 欧美理论片在线观看| 亚洲精品在线国产| 欧美中日韩在线| 成人精品gif动图一区| 日本免费在线播放| 日韩成人激情视频| 三级在线观看视频| 免费国产一区| 日本亚洲免费观看| 91香蕉国产视频| 777色狠狠一区二区三区| 成人ww免费完整版在线观看| 亚洲a在线播放| 亚洲第一精品影视| 黄色正能量网站| 欧洲一区二区av| 午夜免费视频在线国产| 91久久久久久| 亚洲无线视频| 中文字幕xxx| 欧美探花视频资源| 黄色网页在线观看| 成人妇女淫片aaaa视频| 亚洲成人精品| 最新日本中文字幕| 日韩欧美综合在线视频| www.视频在线.com| 91色在线观看| 99视频在线精品国自产拍免费观看| 老司机午夜性大片| 一区二区三区精品在线观看| 日韩一区二区三区在线观看视频| 久久精品国产91精品亚洲| 国产一区二区三区精品在线观看| 中文字幕在线亚洲精品 | 成人在线观看黄| 国产亚洲美州欧州综合国| 97精品久久人人爽人人爽| 久久免费在线观看| 国内精品久久久久久久久电影网 | 高清不卡一二三区| 久久精品国产成人av| 日韩中文av在线| 精品久久97| 中文字幕av专区| 亚洲国产成人91porn| eeuss影院www在线观看| 国产精品国产三级国产专区53| 91精品国产麻豆国产在线观看 | 日韩一级淫片| 乱子伦视频在线看| 亚洲视频一区在线| 青春有你2免费观看完整版在线播放高清 | 怡红院在线观看| 欧美一区二区影视| 国产成人午夜99999| 中文字幕免费高清网站|