分布式mysql保持数据一致性_一种分布式跨数据库保持事务一致性的方法及系统与流程...
本發(fā)明涉及計算機網(wǎng)絡(luò)技術(shù)領(lǐng)域,尤其涉及一種分布式跨數(shù)據(jù)庫保持事務(wù)一致性的方法及系統(tǒng)。
背景技術(shù):
目前,分布式服務(wù)架構(gòu)十分的流行,特別是對于電商領(lǐng)域來說。他的優(yōu)點就不多說了,但是隨著集群機器的增加,集群的規(guī)模也越來越大,隨著集群搭載的服務(wù)規(guī)模也越來越大,導(dǎo)致事務(wù)的處理也就越來越復(fù)雜,有可能一個事務(wù)涉及到n多個服務(wù),可想而知就算再優(yōu)良的方案也很難處理這么復(fù)雜的事務(wù),很容易存在事務(wù)不一致的問題。
技術(shù)實現(xiàn)要素:
為了解決上述技術(shù)問題,本發(fā)明的目的是提供一種分布式跨數(shù)據(jù)庫保持事務(wù)一致性的方法及系統(tǒng)。
本發(fā)明所采用的技術(shù)方案是:一種分布式跨數(shù)據(jù)庫保持事務(wù)一致性的方法,其包括:在主業(yè)務(wù)系統(tǒng)中建立主業(yè)務(wù)活動表和分支業(yè)務(wù)活動表,登記主業(yè)務(wù)活動和所有分支業(yè)務(wù)活動,并開始業(yè)務(wù)活動;分支業(yè)務(wù)系統(tǒng)執(zhí)行分支業(yè)務(wù)活動,建立當(dāng)前業(yè)務(wù)活動狀態(tài)記錄表,持久化保存當(dāng)前活動狀態(tài),并向主業(yè)務(wù)系統(tǒng)發(fā)送活動狀態(tài);主業(yè)務(wù)系統(tǒng)持久化保存主業(yè)務(wù)活動和分支業(yè)活動的執(zhí)行數(shù)據(jù),對失敗的業(yè)務(wù)活動操作定時進行重操作。
進一步,所述分支業(yè)務(wù)系統(tǒng)執(zhí)行分支業(yè)務(wù)活動,建立當(dāng)前業(yè)務(wù)活動狀態(tài)記錄表,持久化保存當(dāng)前活動狀態(tài),并向主業(yè)務(wù)系統(tǒng)發(fā)送活動狀態(tài)步驟包括:分支業(yè)務(wù)系統(tǒng)執(zhí)行分支業(yè)務(wù)活動,建立當(dāng)前業(yè)務(wù)活動狀態(tài)記錄表,記錄業(yè)務(wù)活動狀態(tài),若成功則將操作數(shù)據(jù)永久保存至分支業(yè)務(wù)數(shù)據(jù)庫;若失敗則返回信息至主業(yè)務(wù)系統(tǒng)。
進一步,所述主業(yè)務(wù)系統(tǒng)持久化保存主業(yè)務(wù)活動和從業(yè)活動的執(zhí)行數(shù)據(jù),對失敗的業(yè)務(wù)活動操作定時進行重操作步驟包括:所述主業(yè)務(wù)系統(tǒng)持久化保存主業(yè)務(wù)活動和從業(yè)活動的執(zhí)行數(shù)據(jù),對失敗的業(yè)務(wù)活動操作進行永久化保存,重新發(fā)送指令至分支業(yè)務(wù)系統(tǒng),分支業(yè)系統(tǒng)重新執(zhí)行分支業(yè)務(wù)活動,直到分支業(yè)務(wù)活動執(zhí)行成功,并永久化保存。
一種分布式跨數(shù)據(jù)庫保持事務(wù)一致性的系統(tǒng),其用于實施上述分布式跨數(shù)據(jù)庫保持事務(wù)一致性的,其特征在于:其包括主業(yè)務(wù)系統(tǒng)和分支業(yè)務(wù)系統(tǒng),所述主業(yè)務(wù)系統(tǒng)包括:主數(shù)據(jù)庫:用于存儲主業(yè)務(wù)活動表和分支業(yè)務(wù)活動表,登記主業(yè)務(wù)活動、所有分支業(yè)務(wù)活動;業(yè)務(wù)活動管理器:用于管理所有業(yè)務(wù)活動的執(zhí)行,并對執(zhí)行過程中成功和失敗操作的數(shù)據(jù)進行持久化保存;定時器:用于對失敗的業(yè)務(wù)活動操作定時進行重操作,直到失敗業(yè)務(wù)活動操作執(zhí)行重操作成功為止;所述分支業(yè)務(wù)系統(tǒng)包括:業(yè)務(wù)活動執(zhí)行器:用于執(zhí)行分支業(yè)務(wù)活動;分支數(shù)據(jù)庫:用于持久化保存當(dāng)前業(yè)務(wù)活動狀態(tài);反饋單元:用于向主業(yè)務(wù)系統(tǒng)反饋當(dāng)前業(yè)務(wù)活動狀態(tài)。
進一步,所述分支系統(tǒng)還包括判斷單元:其用于若成功則將操作數(shù)據(jù)永久保存至分支業(yè)務(wù)數(shù)據(jù)庫;若失敗則返回信息至主業(yè)務(wù)系統(tǒng)。
進一步,主業(yè)務(wù)系統(tǒng)還包括重發(fā)單元,其用于重新發(fā)送業(yè)務(wù)活動至分支業(yè)務(wù)系統(tǒng)。
本發(fā)明的有益效果是:通過記錄每個業(yè)務(wù)活動的執(zhí)行情況,對每個活動執(zhí)行失敗做反向操作登記,并對業(yè)務(wù)活動執(zhí)行過程中成功和失敗操作的數(shù)據(jù)進行持久化保持到數(shù)據(jù)庫中,失敗的業(yè)務(wù)活動操作定時進行重操作,確保分布式架構(gòu)系統(tǒng)跨數(shù)據(jù)庫進行事務(wù)操作時始終能保持數(shù)據(jù)的一致性要求,能更有效的解決跨數(shù)據(jù)庫分布式事務(wù)一致性的問題。
附圖說明
下面結(jié)合附圖對本發(fā)明的具體實施方式作進一步說明:
圖1是本發(fā)明中分布式跨數(shù)據(jù)庫保持事務(wù)一致性的方法的流程圖;
圖2是本發(fā)明中分布式跨數(shù)據(jù)庫保持事務(wù)一致性的系統(tǒng)的示意圖。
具體實施方式
需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互組合。
如圖1所示,一種分布式跨數(shù)據(jù)庫保持事務(wù)一致性的方法,其包括:
在主業(yè)務(wù)系統(tǒng)中建立主業(yè)務(wù)活動表和分支業(yè)務(wù)活動表,登記主業(yè)務(wù)活動和所有分支業(yè)務(wù)活動,并開始業(yè)務(wù)活動;
主業(yè)務(wù)活動列表登記有業(yè)務(wù)活動的唯一標識、開始狀態(tài)、結(jié)束狀態(tài)(業(yè)務(wù)活動處理失敗,未結(jié)束時的處理機制)、分支服務(wù)個數(shù)、主業(yè)務(wù)活動創(chuàng)建時間、狀態(tài)變更時間、已完成的分支服務(wù)執(zhí)行返回操作、重復(fù)提交,未完成的分支服務(wù)執(zhí)行提交操作。
分支業(yè)務(wù)活動表登記有分支活動標識、所述主業(yè)務(wù)活動ID、分支服務(wù)名、執(zhí)行提交或返回動作的方法名、提交或回滾方法對應(yīng)參數(shù)的序列化值,通過該值進行反序列化后可獲得實體對象、分支業(yè)務(wù)活動創(chuàng)建時間。
分支業(yè)務(wù)系統(tǒng)執(zhí)行分支業(yè)務(wù)活動,建立當(dāng)前業(yè)務(wù)活動狀態(tài)記錄表,持久化保存當(dāng)前活動狀態(tài),并向主業(yè)務(wù)系統(tǒng)發(fā)送活動狀態(tài);
當(dāng)前業(yè)務(wù)活動狀態(tài)記錄表中記錄有所屬主業(yè)務(wù)活動ID、所屬主業(yè)務(wù)活動ID、提交方法名、當(dāng)前活動狀態(tài)、活動創(chuàng)建時間、活動狀態(tài)變更時間。
主業(yè)務(wù)系統(tǒng)持久化保存主業(yè)務(wù)活動和分支業(yè)活動的執(zhí)行數(shù)據(jù),對失敗的業(yè)務(wù)活動操作定時進行重操作。定義觸發(fā)時間,每5分鐘觸發(fā)定時任務(wù),定時任務(wù)實現(xiàn)查詢前15分鐘至前2小時間所有未完成主業(yè)務(wù)活動,對這些操作執(zhí)行重操作直至所有主業(yè)務(wù)活動執(zhí)行成功。
進一步作為優(yōu)選的實施方式,所述分支業(yè)務(wù)系統(tǒng)執(zhí)行分支業(yè)務(wù)活動,建立當(dāng)前業(yè)務(wù)活動狀態(tài)記錄表,持久化保存當(dāng)前活動狀態(tài),并向主業(yè)務(wù)系統(tǒng)發(fā)送活動狀態(tài)步驟包括:分支業(yè)務(wù)系統(tǒng)執(zhí)行分支業(yè)務(wù)活動,建立當(dāng)前業(yè)務(wù)活動狀態(tài)記錄表,記錄業(yè)務(wù)活動狀態(tài),若成功則將操作數(shù)據(jù)永久保存至分支業(yè)務(wù)數(shù)據(jù)庫;若失敗則返回信息至主業(yè)務(wù)系統(tǒng)。
具體的,登記主業(yè)務(wù)活動、所有分支業(yè)務(wù)活動,并開始業(yè)務(wù)活動。執(zhí)行分支業(yè)務(wù)活動A,將數(shù)據(jù)X持久化保存(A業(yè)務(wù)的本地事務(wù))執(zhí)行分支業(yè)務(wù)活動B,將數(shù)據(jù)Y持久化保存(B業(yè)務(wù)的本地事務(wù))持久化保存Y失敗,業(yè)務(wù)活動管理器將X數(shù)據(jù)執(zhí)行反操作(回滾),并使回滾數(shù)據(jù)持久化。
進一步作為優(yōu)選的實施方式,所述主業(yè)務(wù)系統(tǒng)持久化保存主業(yè)務(wù)活動和從業(yè)活動的執(zhí)行數(shù)據(jù),對失敗的業(yè)務(wù)活動操作定時進行重操作步驟包括:所述主業(yè)務(wù)系統(tǒng)持久化保存主業(yè)務(wù)活動和從業(yè)活動的執(zhí)行數(shù)據(jù),對失敗的業(yè)務(wù)活動操作進行永久化保存,重新發(fā)送指令至分支業(yè)務(wù)系統(tǒng),分支業(yè)系統(tǒng)重新執(zhí)行分支業(yè)務(wù)活動,直到分支業(yè)務(wù)活動執(zhí)行成功,并永久化保存。
具體的,登記主業(yè)務(wù)活動、所有分支業(yè)務(wù)活動,并開始業(yè)務(wù)活動。執(zhí)行分支業(yè)務(wù)活動A,將數(shù)據(jù)X持久化保存(A業(yè)務(wù)的本地事務(wù)),執(zhí)行分支業(yè)務(wù)活動B,將數(shù)據(jù)Y持久化保存(B業(yè)務(wù)的本地事務(wù)),持久化保存Y失敗,業(yè)務(wù)活動管理器對Y進行補償操作,直到Y(jié)數(shù)據(jù)成功持久化為止。
一種分布式跨數(shù)據(jù)庫保持事務(wù)一致性的系統(tǒng),其用于實施上述分布式跨數(shù)據(jù)庫保持事務(wù)一致性的,其特征在于:其包括主業(yè)務(wù)系統(tǒng)和分支業(yè)務(wù)系統(tǒng),所述主業(yè)務(wù)系統(tǒng)包括:主數(shù)據(jù)庫:用于存儲主業(yè)務(wù)活動表和分支業(yè)務(wù)活動表,登記主業(yè)務(wù)活動、所有分支業(yè)務(wù)活動;業(yè)務(wù)活動管理器:用于管理所有業(yè)務(wù)活動的執(zhí)行,并對執(zhí)行過程中成功和失敗操作的數(shù)據(jù)進行持久化保存;定時器:用于對失敗的業(yè)務(wù)活動操作定時進行重操作,直到失敗業(yè)務(wù)活動操作執(zhí)行重操作成功為止;所述分支業(yè)務(wù)系統(tǒng)包括:業(yè)務(wù)活動執(zhí)行器:用于執(zhí)行分支業(yè)務(wù)活動;分支數(shù)據(jù)庫:用于持久化保存當(dāng)前業(yè)務(wù)活動狀態(tài);反饋單元:用于向主業(yè)務(wù)系統(tǒng)反饋當(dāng)前業(yè)務(wù)活動狀態(tài)。
進一步作為優(yōu)選的實施方式,所述分支系統(tǒng)還包括判斷單元:其用于若成功則將操作數(shù)據(jù)永久保存至分支業(yè)務(wù)數(shù)據(jù)庫;若失敗則返回信息至主業(yè)務(wù)系統(tǒng)。
進一步作為優(yōu)選的實施方式,主業(yè)務(wù)系統(tǒng)還包括重發(fā)單元,其用于重新發(fā)送業(yè)務(wù)活動至分支業(yè)務(wù)系統(tǒng)。
以上是對本發(fā)明的較佳實施進行了具體說明,但本發(fā)明創(chuàng)造并不限于所述實施例,熟悉本領(lǐng)域的技術(shù)人員在不違背本發(fā)明精神的前提下還可做作出種種的等同變形或替換,這些等同的變形或替換均包含在本申請權(quán)利要求所限定的范圍內(nèi)。
總結(jié)
以上是生活随笔為你收集整理的分布式mysql保持数据一致性_一种分布式跨数据库保持事务一致性的方法及系统与流程...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: yii2 mysql between_y
- 下一篇: mysql variables 大记录