[發(fā)明專利]一種消息同步方法有效
| 申請?zhí)枺?/td> | 201611241828.1 | 申請日: | 2016-12-29 |
| 公開(公告)號: | CN106598762B | 公開(公告)日: | 2020-04-17 |
| 發(fā)明(設(shè)計(jì))人: | 項(xiàng)劍峰;鄔來軍;彭亮 | 申請(專利權(quán))人: | 上海理想信息產(chǎn)業(yè)(集團(tuán))有限公司 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54 |
| 代理公司: | 上海國智知識產(chǎn)權(quán)代理事務(wù)所(普通合伙) 31274 | 代理人: | 潘建玲 |
| 地址: | 200135 上海市浦*** | 國省代碼: | 上海;31 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 一種 消息 同步 方法 | ||
本發(fā)明公開了一種消息同步方法,該方法包括如下步驟:步驟一,主節(jié)點(diǎn)接收客戶端的消息寫入請求,存儲消息,并同步消息到從節(jié)點(diǎn);步驟二,從節(jié)點(diǎn)接收主節(jié)點(diǎn)發(fā)來的同步消息請求,并存儲消息;步驟三,利用控制節(jié)點(diǎn)緩存同步超時(shí)的消息和消息標(biāo)識,在主節(jié)點(diǎn)故障后,將相應(yīng)的超時(shí)消息更新到新的主節(jié)點(diǎn)中,通過本發(fā)明,實(shí)現(xiàn)了分布式消息中間件的高可靠的消息同步的目的。
技術(shù)領(lǐng)域
本發(fā)明涉及消息處理技術(shù)領(lǐng)域,特別是涉及一種高可靠的消息同步方法。
背景技術(shù)
在分布式系統(tǒng)中,為了保證系統(tǒng)高可用,常常需要在不同物理位置的機(jī)器中保存一份數(shù)據(jù)的多個(gè)副本。為保證數(shù)據(jù)的一致性,可以采用多種復(fù)制技術(shù)。數(shù)據(jù)復(fù)制有同步復(fù)制、異步復(fù)制和半同步復(fù)制等多種技術(shù),為了追求一致性和性能的平衡,常常會采用半同步復(fù)制方案。
在數(shù)據(jù)庫系統(tǒng)中目前有兩種半同步復(fù)制的方案,第一種半同步復(fù)制方案如下:先在主節(jié)點(diǎn)寫重做日志,然后將事務(wù)提交到主節(jié)點(diǎn),之后觸發(fā)等待直到從節(jié)點(diǎn)將主節(jié)點(diǎn)的重做日志寫入磁盤但不要求事務(wù)在從節(jié)點(diǎn)完全的執(zhí)行;第二種半同步復(fù)制方案如下:先在主節(jié)點(diǎn)寫重做日志,復(fù)制重做日志到從節(jié)點(diǎn),主節(jié)點(diǎn)等待從節(jié)點(diǎn)反饋接收到重做日志的ack(應(yīng)答信號)之后,再提交事務(wù)并且返回commit OK(確認(rèn)信號)結(jié)果給客戶端。
第一種半同步復(fù)制方案的主要問題是:當(dāng)主節(jié)點(diǎn)等待從節(jié)點(diǎn)回應(yīng)超時(shí),會直接向客戶端返回成功。如果主節(jié)點(diǎn)的重做日志并沒有同步到從節(jié)點(diǎn),這時(shí)主節(jié)點(diǎn)崩潰,從節(jié)點(diǎn)會丟失最后一個(gè)事務(wù)的內(nèi)容;第二種半同步復(fù)制方案很好的解決了第一種方案的問題,如果主節(jié)點(diǎn)等待從節(jié)點(diǎn)反饋接收到重做日志的ack超時(shí)之后,主節(jié)點(diǎn)上面的事務(wù)不會提交,會進(jìn)行回滾操作。
Kafka是當(dāng)前比較出色的一款高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),其數(shù)據(jù)復(fù)制原理就采用的上述第一種半同步復(fù)制方案,為提高性能,Kafka的從節(jié)點(diǎn)接收到數(shù)據(jù)后就立馬向主節(jié)點(diǎn)發(fā)送ack,而非等到持久化到磁盤上。Kafka同樣存在主從同步失敗后主掛掉的數(shù)據(jù)丟失問題,由于Kafka的消息存儲系統(tǒng)不同于一般的數(shù)據(jù)庫系統(tǒng),如果采用第二種半同步復(fù)制方案,做數(shù)據(jù)回滾操作時(shí)需要阻塞其他線程的寫操作,代價(jià)很高。
發(fā)明內(nèi)容
為克服上述現(xiàn)有技術(shù)存在的不足,本發(fā)明之目的在于提供一種消息同步方法,以實(shí)現(xiàn)分布式消息中間件的高可靠的消息同步的目的。
為達(dá)上述及其它目的,本發(fā)明提出一種消息同步方法,包括如下步驟:
步驟一,主節(jié)點(diǎn)接收客戶端的消息寫入請求,存儲消息,并同步消息到從節(jié)點(diǎn);
步驟二,從節(jié)點(diǎn)接收主節(jié)點(diǎn)發(fā)來的同步消息請求,并存儲消息;
步驟三,利用控制節(jié)點(diǎn)緩存同步超時(shí)的消息和消息標(biāo)識,在主節(jié)點(diǎn)故障后,將相應(yīng)的超時(shí)消息更新到新的主節(jié)點(diǎn)中。
進(jìn)一步地,步驟一進(jìn)一步包括:
主節(jié)點(diǎn)接收客戶端的消息寫入請求生成WAL日志文件,并持久化到磁盤;
主節(jié)點(diǎn)上通過WAL日志文件生成消息存儲文件和消息索引文件;
主節(jié)點(diǎn)同步WAL日志到所有的從節(jié)點(diǎn)。
進(jìn)一步地,步驟三進(jìn)一步包括:
步驟S1,若所有從節(jié)點(diǎn)的消息都同步成功,則更新主從一致的檢查點(diǎn)信息并返回客戶端消息發(fā)送成功;
步驟S2,若消息同步超時(shí),則提取消息標(biāo)識和消息內(nèi)容發(fā)送到該控制節(jié)點(diǎn);
步驟S3,若消息標(biāo)識和消息發(fā)送給該控制節(jié)點(diǎn)成功,則返回客戶端消息發(fā)送成功,否則進(jìn)入步驟S4;
步驟S4,返回客戶端Pendding狀態(tài)和消息標(biāo)識信息;
步驟S5,該客戶端通過該控制節(jié)點(diǎn)判斷主節(jié)點(diǎn)是否故障;
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于上海理想信息產(chǎn)業(yè)(集團(tuán))有限公司,未經(jīng)上海理想信息產(chǎn)業(yè)(集團(tuán))有限公司許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201611241828.1/2.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。





