1. 部署喷兼,一種常用的高可用部署方案
對于節(jié)點(diǎn)比較少的集群七嫌,可以采用每個(gè)節(jié)點(diǎn)都是鏡像模式,從而隊(duì)列數(shù)據(jù)做全鏡像備份,保證數(shù)據(jù)安全和高可用咆爽,如果節(jié)點(diǎn)書比較多,可以采用超過半數(shù)(n/2+1)的節(jié)點(diǎn)設(shè)置為鏡像模式,惨缆;采用HAproxy 做負(fù)載均衡,為了高可用采用雙負(fù)載均衡,且用 keepAlived 實(shí)現(xiàn)主備備份和切換, 且生成虛擬IP 暴露給客戶端.?
2. 優(yōu)點(diǎn):異步辟灰、解耦、消峰
3.生產(chǎn)者實(shí)現(xiàn)不丟消息凯旭。 任何設(shè)計(jì)不能脫離業(yè)務(wù)需求和業(yè)務(wù)場景概耻,如果系統(tǒng)對數(shù)據(jù)可靠性要求比較高,極端情況也不能丟數(shù)罐呼,那就需要先將消息持久化入庫鞠柄,然后再發(fā)送給MQ ;等待MQ ack 后修改消息狀態(tài)嫉柴,如果超齒沒有收到ack 觸發(fā)重發(fā)模式(定義重發(fā)次數(shù))厌杜,重發(fā)n次后還是收不到,修改消息狀態(tài)為未收到ack,設(shè)計(jì)一個(gè)定時(shí)job 定時(shí)掃描數(shù)據(jù)中沒有收到ack 的消息觸發(fā)重發(fā)夯尽,依舊收不到的可以標(biāo)記為失敗瞧壮,失敗數(shù)據(jù)可以發(fā)送郵件等方式進(jìn)行通知。因?yàn)槭窍热氲臄?shù)據(jù)庫那么對于消峰的業(yè)務(wù)場景就不實(shí)用匙握,實(shí)用MQ? 就是為了應(yīng)對高并發(fā)是數(shù)據(jù)的瓶頸咆槽,可以先暫時(shí)放入到redis 中,然后等重發(fā)失敗后再入庫圈纺,這樣概率已經(jīng)大大降低罗晕,或者對于那種消息不是特別嚴(yán)謹(jǐn)?shù)膱鼍翱梢灾苯酉劝l(fā)送,嘗試重發(fā)失敗后再入庫赠堵,風(fēng)險(xiǎn)就是重試和發(fā)送都在內(nèi)存中小渊,服務(wù)掛了,消息丟失茫叭。
4.冪等性酬屉。冪等性主要解決消息重復(fù)問題。首先需要找出消息得唯一標(biāo)識(shí)揍愁。對于生產(chǎn)端可以借助于mq 的intercepter 實(shí)現(xiàn)對重復(fù)消息得丟棄呐萨。消費(fèi)者端,再拉取消息得時(shí)候可以跟數(shù)據(jù)庫或者redis 里的數(shù)據(jù)通過唯一標(biāo)識(shí)作比對莽囤,看是否已經(jīng)做過處理谬擦,從而決定是否消費(fèi)還是丟棄。
5.怎么保證數(shù)據(jù)可靠性朽缎。通過ack 機(jī)制保證發(fā)送和消費(fèi)不丟數(shù)惨远; 隊(duì)列消息可以做磁盤存儲(chǔ)做持久化;通過高可用集群中節(jié)點(diǎn)鏡像模式保證某一個(gè)節(jié)點(diǎn)掛了還有備份節(jié)點(diǎn)可用话肖,數(shù)據(jù)不丟失