自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

消息隊(duì)列誰都會用,程序的好壞在于如何保證消息萬無一失

開發(fā) 前端
消息隊(duì)列將我們系統(tǒng)從同步調(diào)用改成了異步調(diào)用,將我們的系統(tǒng)進(jìn)行解耦,但隨之也帶來一個問題,那便是如何保證消息使命必達(dá)。

 消息隊(duì)列將我們系統(tǒng)從同步調(diào)用改成了異步調(diào)用,將我們的系統(tǒng)進(jìn)行解耦,但隨之也帶來一個問題,那便是如何保證消息使命必達(dá)。

 

 

[[345458]]

 

 

舉個例子,在電商系統(tǒng)中,用戶下單后,我們通常是使用異步消息去通知購物車系統(tǒng)清空對應(yīng)的購物車物品的。如果我們不能夠保證消息使命必達(dá),那么就意味著有些用戶下完單之后,他的購物車還有原來這些物品,造成不好的體驗(yàn)。所以,一個可用的消息隊(duì)列,必須是可靠,那么如何去保證消息生產(chǎn)到消費(fèi)的過程中,是可靠的呢。

一般來說,消息隊(duì)列隊(duì)列有三個重要步驟,分別是生產(chǎn)-存儲-消費(fèi)。這一點(diǎn)很多同學(xué)都會沒有注意到,甚至很多人調(diào)用消息隊(duì)列的時候都會經(jīng)常忘記去處理異常。在通常情況下,生產(chǎn)消息都是可以成功的,但是,在一些極端的條件下,例如網(wǎng)絡(luò)波動,或者機(jī)器宕機(jī),往往會造成消息入隊(duì)失敗,這就要求我們需要處理對應(yīng)的異常。在消息入隊(duì)失敗的時候,進(jìn)行重試或者直接回滾相應(yīng)的事務(wù),并且告訴前端處理失敗。

 

其次,則是消息的存儲階段。雖然我們的消息隊(duì)列已經(jīng)經(jīng)歷了非常多場景的考驗(yàn),但是在生產(chǎn)環(huán)境中,應(yīng)用的重啟也是常態(tài)。為了避免應(yīng)用重啟帶了的數(shù)據(jù)丟失,我們最好是將數(shù)據(jù)進(jìn)行落盤,即便是我們重啟應(yīng)用,也不會造成數(shù)據(jù)丟失。其次,硬件的損壞不可避免,服務(wù)器也是有使用壽命的,也是有可能遭遇到意外,如果我們的數(shù)據(jù)只存在一臺機(jī)器上,一旦機(jī)器損壞,就有可能會丟失數(shù)據(jù),所以,常見的做法是每條消息都會至少在兩臺機(jī)器上寫成功才會返回成功。為什么是兩臺機(jī)器呢,因?yàn)閺母怕蕦W(xué)的角度上來說,同一個集群在不同機(jī)房的兩臺機(jī)器,同時遇到故障的概率幾乎為0。

最后則是在消息的消費(fèi)階段,很多同學(xué)有非常不好的編寫代碼習(xí)慣,就是不處理異常,無論代碼執(zhí)行的結(jié)果如何,都會告訴消息隊(duì)列消息消費(fèi)成功,這是非常不好的。我們就曾經(jīng)遇到這樣一個例子,每次用戶成交之后,我們都會回調(diào)給商家,通知商家數(shù)據(jù)變更,可以來拉取數(shù)據(jù)。這只是一個非常簡單的HTTP GET請求,按道理來說,是很難失敗的。但是,有些商家的開發(fā)能力差,服務(wù)器經(jīng)常宕機(jī),剛好這個商家今天就成交這一單。因?yàn)闆]有處理HTTP的異常,消息被判斷為消費(fèi)成功,就會造成商家的數(shù)據(jù)錯誤。

 

如果你以為只要做好重試就行了,那就太天真了。在現(xiàn)代分布式系統(tǒng)中,有一種特殊情況特別需要程序員注意的,那就是對于超時的處理,在程序異常中,很多異常我們都可以認(rèn)為下游系統(tǒng)處理失敗了,唯有超時異常,我們很難去判斷下游系統(tǒng)是否已經(jīng)處理成功。這就需要我們對消息隊(duì)列進(jìn)行設(shè)計,盡量保證我們的系統(tǒng)是冪等的,從而保證消息不會因?yàn)橹貜?fù)消費(fèi)而帶來新的問題。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2020-02-07 10:14:07

程序員設(shè)計人生第一份工作

2013-02-01 10:48:52

2013-01-06 10:57:03

2013-08-12 10:37:14

云服務(wù)云計算

2021-01-11 18:36:06

Redis分布式鎖數(shù)據(jù)庫

2021-06-22 06:13:05

私有云混合多云網(wǎng)絡(luò)架構(gòu)

2011-07-19 21:20:01

2017-10-26 14:15:32

測試工具設(shè)計開發(fā)

2019-06-25 08:46:04

Redis分布式鎖JVM

2016-11-28 15:54:17

聯(lián)想網(wǎng)盤

2022-02-07 19:28:02

LoRa廣域網(wǎng)5G

2021-08-31 15:57:32

勒索軟件零信任網(wǎng)絡(luò)罪犯

2020-10-26 09:19:11

線程池消息

2014-07-29 15:48:08

2013-11-21 07:33:34

2010-07-30 15:41:05

無線路由器安全配置

2010-03-31 10:24:15

服務(wù)器虛擬化

2021-04-28 18:26:35

命令參數(shù)git

2013-06-07 17:25:46

路由技術(shù)路由器

2023-08-30 19:10:17

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號