亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

微服務(wù)架構(gòu)下的分布式事務(wù)解決方法與流程

文檔序號(hào):11657474閱讀:237來源:國(guó)知局
微服務(wù)架構(gòu)下的分布式事務(wù)解決方法與流程
本發(fā)明涉及無(wú)線通信
技術(shù)領(lǐng)域
,尤其涉及一種微服務(wù)架構(gòu)下的分布式事務(wù)解決方法。
背景技術(shù)
:傳統(tǒng)的單體式應(yīng)用不足以滿足現(xiàn)代互聯(lián)網(wǎng)應(yīng)用的業(yè)務(wù)量和數(shù)據(jù)量,這個(gè)時(shí)候需要對(duì)應(yīng)用和數(shù)據(jù)庫(kù)進(jìn)行拆分,就出現(xiàn)了一個(gè)應(yīng)用需要同時(shí)訪問兩個(gè)或兩個(gè)以上的數(shù)據(jù)庫(kù)情況。此時(shí)我們使用分布式事務(wù)來保證一致性,也就是我們常說的2pc(twophasecommitmentprotocol,兩階段提交協(xié)議的縮寫)。然而,2pc這種傳統(tǒng)分布式事務(wù)不是微服務(wù)架構(gòu)中一致性的最佳選擇:首先,對(duì)于微服務(wù)架構(gòu)來說,不僅對(duì)數(shù)據(jù)庫(kù)進(jìn)行了拆分,對(duì)應(yīng)用也進(jìn)行了拆分,數(shù)據(jù)訪問變得更加復(fù)雜,這是因?yàn)閿?shù)據(jù)都是微服務(wù)私有的,唯一可訪問的方式就是通過api(applicationprogramminginterface,應(yīng)用程序編程接口),而2pc這種方式并不適用于這種軟件架構(gòu)。其次,不同的微服務(wù)經(jīng)常使用不同的數(shù)據(jù)庫(kù)。應(yīng)用會(huì)產(chǎn)生各種不同類型的數(shù)據(jù),關(guān)系型數(shù)據(jù)庫(kù)并不一定是最佳選擇。基于微服務(wù)的應(yīng)用一般都使用關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)結(jié)合的模式,但是這些非關(guān)系型數(shù)據(jù)大多數(shù)并不支持2pc。2pc方式不適合于微服務(wù)架構(gòu),微服務(wù)架構(gòu)下最主要的方式是可靠事件模式,該模式主要依賴高可靠性的消息中間件,通過第三方消息中間件傳遞事務(wù)消息,從而達(dá)到微服務(wù)架構(gòu)下的事務(wù)最終一致性。這種模式下有以下缺點(diǎn):1:對(duì)消息中間件本身要求極高,事務(wù)所有消息在消息中間件中存儲(chǔ),一旦消息中間件發(fā)生故障,不僅影響業(yè)務(wù),還可能造成無(wú)法恢復(fù)的數(shù)據(jù)丟失;2:微服務(wù)系統(tǒng)對(duì)消息中間件高度依賴,造成應(yīng)用系統(tǒng)與第三方中間件的強(qiáng)耦合性,一旦選擇某款第三方中間件,就很難替換,如需替換,則需要針對(duì)新選擇的第三方消息中間件進(jìn)行復(fù)雜系統(tǒng)改造;3:高可靠性的消息中間件往往是商用軟件產(chǎn)品,增加系統(tǒng)建設(shè)成本。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的實(shí)施例提供了一種微服務(wù)架構(gòu)下的分布式事務(wù)解決方法。為了實(shí)現(xiàn)上述目的,本發(fā)明采取了如下技術(shù)方案。一種微服務(wù)架構(gòu)下的分布式事務(wù)解決方法,包括:用戶客戶端向前端網(wǎng)站服務(wù)器發(fā)起注冊(cè)請(qǐng)求,所述前端網(wǎng)站服務(wù)器將用戶的注冊(cè)請(qǐng)求發(fā)送給用戶微服務(wù)服務(wù)器;所述用戶微服務(wù)服務(wù)器處理所述用戶的注冊(cè)事務(wù)事件,將所述用戶的注冊(cè)事務(wù)事件發(fā)送給消息中間件,所述消息中間件將所述用戶的注冊(cè)事務(wù)事件轉(zhuǎn)發(fā)給賬戶微服務(wù)服務(wù)器;所述賬戶微服務(wù)服務(wù)器處理所述用戶的注冊(cè)事務(wù)事件。進(jìn)一步地,所述的用戶微服務(wù)服務(wù)器處理所述用戶的注冊(cè)事務(wù)事件,將所述用戶的注冊(cè)事務(wù)事件發(fā)送給消息中間件,包括:用戶微服務(wù)服務(wù)器接收到所述前端網(wǎng)站服務(wù)器發(fā)送過來的用戶的注冊(cè)請(qǐng)求后,與用戶微服務(wù)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)通信,在所述用戶微服務(wù)數(shù)據(jù)庫(kù)中的用戶信息表中增加所述用戶的記錄,在所述用戶微服務(wù)數(shù)據(jù)庫(kù)中的事務(wù)消息發(fā)送記錄表中保存所述用戶的注冊(cè)事務(wù)消息事件;所述用戶微服務(wù)服務(wù)器將注冊(cè)事務(wù)事件發(fā)送給消息中間件,所述消息中間件將注冊(cè)事務(wù)事件轉(zhuǎn)發(fā)給所述賬戶微服務(wù)服務(wù)器;所述用戶微服務(wù)服務(wù)器根據(jù)注冊(cè)事務(wù)事件的發(fā)送結(jié)果更新所述事務(wù)消息發(fā)送記錄表對(duì)應(yīng)的該消息的發(fā)送結(jié)果狀態(tài),該發(fā)送結(jié)果狀態(tài)包括發(fā)送成功或者發(fā)送失??;所述用戶微服務(wù)服務(wù)器將所述用戶的注冊(cè)結(jié)果返回給所述前端網(wǎng)站服務(wù)器,所述前端網(wǎng)站服務(wù)器將所述用戶的注冊(cè)結(jié)果返回給所述用戶客戶端。進(jìn)一步地,所述的用戶微服務(wù)服務(wù)器處理所述用戶的注冊(cè)事務(wù)事件,還包括:所述用戶微服務(wù)服務(wù)器通過機(jī)制檢測(cè)所述用戶微服務(wù)數(shù)據(jù)庫(kù)中的事務(wù)消息發(fā)送記錄表中的消息的發(fā)送結(jié)果狀態(tài)是否為發(fā)送成功,如果發(fā)送結(jié)果狀態(tài)為發(fā)送失敗,則重新將所述用戶的注冊(cè)事務(wù)事件發(fā)送給所述消息中間件。進(jìn)一步地,所述的賬戶微服務(wù)服務(wù)器處理所述用戶的注冊(cè)事務(wù)事件,包括:所述賬戶微服務(wù)服務(wù)器接收到所述消息中間件發(fā)送過來的所述用戶的注冊(cè)事務(wù)事件后,所述賬戶微服務(wù)服務(wù)器與所述賬戶微服務(wù)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)通信,在所述賬戶微服務(wù)數(shù)據(jù)庫(kù)中的事務(wù)消息處理記錄表中保存接收到的事務(wù)消息,在所述賬戶微服務(wù)數(shù)據(jù)庫(kù)中的賬戶信息表中保存用戶賬戶信息,并根據(jù)處理結(jié)果更新所述事務(wù)消息處理記錄表對(duì)應(yīng)記錄的處理結(jié)果狀態(tài),該處理結(jié)果狀態(tài)包括處理成功或者處理失敗。進(jìn)一步地,所述的賬戶微服務(wù)服務(wù)器處理所述用戶的注冊(cè)事務(wù)事件,還包括:所述賬戶微服務(wù)服務(wù)器通過機(jī)制檢測(cè)所述事務(wù)消息處理記錄表中的記錄的處理結(jié)果狀態(tài)是否為處理成功,如果處理結(jié)果狀態(tài)為處理失敗,則會(huì)重新處理對(duì)應(yīng)用戶的注冊(cè)事務(wù)事件。進(jìn)一步地,所述的方法還包括:審計(jì)微服務(wù)服務(wù)器與所述用戶微服務(wù)服務(wù)器、所述賬戶微服務(wù)服務(wù)器通過無(wú)線通信網(wǎng)絡(luò)連接,所述審計(jì)微服務(wù)服務(wù)器按照設(shè)定時(shí)間間隔檢測(cè)用戶微服務(wù)服務(wù)器、賬戶微服務(wù)服務(wù)在事務(wù)發(fā)送、接收和處理完成情況,將檢測(cè)結(jié)果存儲(chǔ)在審計(jì)自愈服務(wù)數(shù)據(jù)庫(kù)中的審計(jì)歷史記錄表和事務(wù)消息路由規(guī)則表中;步驟1、所述審計(jì)微服務(wù)服務(wù)器的審計(jì)自愈服務(wù)為定時(shí)任務(wù),審計(jì)自愈周期開始;步驟2、所述審計(jì)微服務(wù)服務(wù)器檢查審計(jì)歷史記錄表中的歷史事務(wù)消息丟失記錄狀態(tài)為未恢復(fù)的記錄,查看是否已重發(fā)成功,消費(fèi)者微服務(wù)已收到該事務(wù)消息,則執(zhí)行步驟3,否則執(zhí)行步驟4;步驟3、對(duì)應(yīng)的消費(fèi)者微服務(wù)已收到該事務(wù)消息,則表明已經(jīng)自愈,標(biāo)記審計(jì)歷史記錄表中該歷史事務(wù)消息丟失記錄狀態(tài)為已恢復(fù);步驟4、對(duì)應(yīng)的消費(fèi)者微服務(wù)未收到該事務(wù)消息,則調(diào)用對(duì)應(yīng)的該事件的生產(chǎn)者微服務(wù),標(biāo)記事務(wù)消息發(fā)送記錄表對(duì)應(yīng)的記錄為重新發(fā)送;步驟5、遍歷事務(wù)消息路由規(guī)則表,檢查上次審計(jì)時(shí)間點(diǎn)至當(dāng)前時(shí)間的事務(wù)事件是否丟失,未發(fā)現(xiàn)新的丟失記錄則執(zhí)行步驟7,否則執(zhí)行步驟6;步驟6、發(fā)現(xiàn)丟失的事務(wù)消息,則調(diào)用對(duì)應(yīng)的該事件的生產(chǎn)者微服務(wù)的重發(fā)表示接口,標(biāo)記事務(wù)消息發(fā)送記錄表message_send_record對(duì)應(yīng)的記錄為重新發(fā)送,并將該記錄寫入審計(jì)歷史記錄表audit_history_record供下次審計(jì)時(shí)重新檢查;發(fā)現(xiàn)丟失的事務(wù)消息,則調(diào)用對(duì)應(yīng)的該事件的生產(chǎn)者微服務(wù),標(biāo)記事務(wù)消息發(fā)送記錄表對(duì)應(yīng)的記錄為重新發(fā)送;步驟7、歷史記錄和新的審計(jì)周期時(shí)間范圍內(nèi)是否有事件丟失,有丟失則執(zhí)行步驟8,否則執(zhí)行步驟9;步驟8、發(fā)送對(duì)應(yīng)的告警事件到相應(yīng)的監(jiān)控平臺(tái);步驟9、記錄此次審計(jì)的時(shí)間點(diǎn)供下個(gè)周期到來時(shí)作為起始時(shí)間點(diǎn);步驟10、所述審計(jì)微服務(wù)服務(wù)器本次的審計(jì)和自愈處理結(jié)束。由上述本發(fā)明的實(shí)施例提供的技術(shù)方案可以看出,本發(fā)明實(shí)施例通過各微服務(wù)本身的事務(wù)消息重發(fā)機(jī)制和事務(wù)重新處理機(jī)制保證消息的可靠傳遞與最終一致性,使方案的實(shí)現(xiàn)不依賴于第三方的消息中間件的可靠傳遞機(jī)制,從而弱化與某種類型的消息中間件的耦合,消息中間件可隨意替換。本發(fā)明實(shí)施例通過全局審計(jì)和自愈機(jī)制,能夠及時(shí)發(fā)現(xiàn)事務(wù)消息事件的異常丟失并自愈,從而達(dá)到微服務(wù)架構(gòu)下分布式事務(wù)的最終一致性。本發(fā)明附加的方面和優(yōu)點(diǎn)將在下面的描述中部分給出,這些將從下面的描述中變得明顯,或通過本發(fā)明的實(shí)踐了解到。附圖說明為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例提供的一種微服務(wù)架構(gòu)的網(wǎng)絡(luò)拓?fù)鋱D;圖2為本發(fā)明實(shí)施例提供的一種微服務(wù)架構(gòu)的軟件架構(gòu)圖;圖3為本發(fā)明實(shí)施例提供的一種微服務(wù)架構(gòu)場(chǎng)景下的用戶注冊(cè)的事務(wù)流程;圖4為本發(fā)明實(shí)施例提供的一種審計(jì)自愈機(jī)制流程圖。具體實(shí)施方式下面詳細(xì)描述本發(fā)明的實(shí)施方式,所述實(shí)施方式的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實(shí)施方式是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。本
技術(shù)領(lǐng)域
技術(shù)人員可以理解,除非特意聲明,這里使用的單數(shù)形式“一”、“一個(gè)”、“所述”和“該”也可包括復(fù)數(shù)形式。應(yīng)該進(jìn)一步理解的是,本發(fā)明的說明書中使用的措辭“包括”是指存在所述特征、整數(shù)、步驟、操作、元件和/或組件,但是并不排除存在或添加一個(gè)或多個(gè)其他特征、整數(shù)、步驟、操作、元件、組件和/或它們的組。應(yīng)該理解,當(dāng)我們稱元件被“連接”或“耦接”到另一元件時(shí),它可以直接連接或耦接到其他元件,或者也可以存在中間元件。此外,這里使用的“連接”或“耦接”可以包括無(wú)線連接或耦接。這里使用的措辭“和/或”包括一個(gè)或更多個(gè)相關(guān)聯(lián)的列出項(xiàng)的任一單元和全部組合。本
技術(shù)領(lǐng)域
技術(shù)人員可以理解,除非另外定義,這里使用的所有術(shù)語(yǔ)(包括技術(shù)術(shù)語(yǔ)和科學(xué)術(shù)語(yǔ))具有與本發(fā)明所屬領(lǐng)域中的普通技術(shù)人員的一般理解相同的意義。還應(yīng)該理解的是,諸如通用字典中定義的那些術(shù)語(yǔ)應(yīng)該被理解為具有與現(xiàn)有技術(shù)的上下文中的意義一致的意義,并且除非像這里一樣定義,不會(huì)用理想化或過于正式的含義來解釋。為便于對(duì)本發(fā)明實(shí)施例的理解,下面將結(jié)合附圖以幾個(gè)具體實(shí)施例為例做進(jìn)一步的解釋說明,且各個(gè)實(shí)施例并不構(gòu)成對(duì)本發(fā)明實(shí)施例的限定。本發(fā)明實(shí)施例的分布式系統(tǒng)在設(shè)計(jì)和部署時(shí),有3個(gè)核心的系統(tǒng)需求,三個(gè)指標(biāo)同時(shí)最優(yōu)是不可能的,只能根據(jù)實(shí)際需要優(yōu)化組合,這就是cap定理,consistency(一致性)availability(可用性)partitiontolerance(分區(qū)容錯(cuò)性)。在微服務(wù)架構(gòu)下,由于每個(gè)微服務(wù)都有自己的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)已經(jīng)進(jìn)行了拆分,根據(jù)cap定理,這種架構(gòu)下已經(jīng)強(qiáng)制選擇了分區(qū)容錯(cuò)行,因此微服務(wù)架構(gòu)下的分布式事務(wù)只能在一致性和可用性之間進(jìn)行權(quán)衡。本發(fā)明揭示的分布式事務(wù)的解決方案是保證微服務(wù)架構(gòu)下分布式事務(wù)最終一致性的方案,并在系統(tǒng)中采用審計(jì)和自愈機(jī)制,保證數(shù)據(jù)最終達(dá)到一致,從而保證分布式微服務(wù)架構(gòu)下的數(shù)據(jù)的一致性和高可用性。在描述本發(fā)明方案中,我們預(yù)設(shè)這樣的用戶場(chǎng)景:一個(gè)終端用戶訪問前端網(wǎng)站進(jìn)行用戶注冊(cè),用戶提交注冊(cè)請(qǐng)求之后,網(wǎng)站需要在一個(gè)事務(wù)中在用戶微服務(wù)的用戶表中增加用戶記錄,之后在賬戶微服務(wù)的賬戶表中增加該用戶的對(duì)應(yīng)賬戶記錄,而用戶微服務(wù)和賬戶微服務(wù)部署于網(wǎng)絡(luò)中不同的節(jié)點(diǎn),且各自有自己的私有數(shù)據(jù)庫(kù)。圖1為本發(fā)明實(shí)施例提供的一種微服務(wù)架構(gòu)下一個(gè)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)示意圖,該網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)下各個(gè)單元的主要功能包括:①用戶客戶端,用戶在客戶端發(fā)起注冊(cè)請(qǐng)求;②前端網(wǎng)站服務(wù)器,用戶通過訪問前端網(wǎng)站服務(wù)器提交注冊(cè)請(qǐng)求,前端網(wǎng)站服務(wù)器收到用戶的注冊(cè)請(qǐng)求后,網(wǎng)站應(yīng)用會(huì)訪問后臺(tái)的微服務(wù)節(jié)點(diǎn)實(shí)現(xiàn)業(yè)務(wù)邏輯和數(shù)據(jù)持久化;③用戶微服務(wù)服務(wù)器,將用戶的注冊(cè)信息保存到用戶微服務(wù)服務(wù)器對(duì)應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn);④用戶微服務(wù)數(shù)據(jù)庫(kù),即用戶微服務(wù)服務(wù)器對(duì)應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn),只有用戶微服務(wù)服務(wù)器能夠訪問;⑤賬戶微服務(wù)服務(wù)器,將用戶的賬戶信息保存到賬戶微服務(wù)服務(wù)器對(duì)應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn);⑥賬戶微服務(wù)數(shù)據(jù)庫(kù),即賬戶微服務(wù)服務(wù)器對(duì)應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn),只有賬戶微服務(wù)服務(wù)器能夠訪問。⑦審計(jì)自愈服務(wù),負(fù)責(zé)微服務(wù)架構(gòu)下的事務(wù)一致性的最終審計(jì)及自愈。⑧審計(jì)自愈服務(wù)數(shù)據(jù)庫(kù),即審計(jì)自愈服務(wù)器對(duì)應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn),只有審計(jì)自愈服務(wù)器能夠訪問。圖2為本發(fā)明實(shí)施例提供的一種微服務(wù)架構(gòu)的軟件架構(gòu)圖,包括如下的內(nèi)容:①用戶微服務(wù),包含事務(wù)事件監(jiān)聽機(jī)制、事務(wù)消息事件重發(fā)機(jī)制、事務(wù)消息事件重新處理機(jī)制;②用戶微服務(wù)數(shù)據(jù)庫(kù),包含用戶信息表(user_info)保存用戶注冊(cè)信息,用戶信息表中包括下述表1所示的具體字段。表1字段名類型備注uidvarchar2(40)用戶唯一標(biāo)識(shí)mobilevarchar2(20)用戶電話號(hào)碼usernamevarchar2(100)用戶名passwordvarchar2(100)用戶密碼emailvarchar2(100)用戶郵箱地址事務(wù)消息發(fā)送記錄表(message_send_record)保存已發(fā)的事務(wù)消息事件及發(fā)送狀態(tài),以及接收到的事務(wù)消息及處理結(jié)果狀態(tài);事務(wù)消息發(fā)送記錄表中包括下述表2所示的具體字段表2③消息中間件,一個(gè)消息隊(duì)列負(fù)責(zé)在微服務(wù)之間轉(zhuǎn)發(fā)事務(wù)消息事件;④賬戶微服務(wù),包含事務(wù)事件監(jiān)聽機(jī)制、事務(wù)消息事件重發(fā)機(jī)制、事務(wù)消息事件重新處理機(jī)制;⑤賬戶微服務(wù)數(shù)據(jù)庫(kù),包含賬戶信息表(account_info)保存用戶賬戶信息,賬戶信息表中包括下述表3所示的具體字段。表3字段名類型備注aidvarchar2(40)賬戶唯一標(biāo)識(shí)uidvarchar2(40)用戶唯一標(biāo)識(shí)usablebalancenumber(18,2)可用余額frozenbalancenumber(18,2)凍結(jié)金額事務(wù)消息處理記錄表(message_process_record)保存接收到的事務(wù)消息及處理結(jié)果狀態(tài);事務(wù)消息處理記錄表中包括下述表4所示的具體字段。表4⑥審計(jì)自愈服務(wù),由于事務(wù)消息事件在某些極端情況下(如網(wǎng)絡(luò)故障)有可能丟失,本服務(wù)負(fù)責(zé)審計(jì)發(fā)現(xiàn)丟失的事務(wù)消息并標(biāo)記重發(fā),從而保證極端情況下的事務(wù)最終一致性。⑦審計(jì)自愈服務(wù)數(shù)據(jù)庫(kù),包含事務(wù)消息路由規(guī)則表(audit_route_rule),該表至少包含事務(wù)消息的生產(chǎn)者(事務(wù)消息由哪個(gè)微服務(wù)發(fā)出)及消費(fèi)者(事務(wù)消息由哪個(gè)微服務(wù)服務(wù)器接收并處理)等信息從而使審計(jì)自愈服務(wù)能夠發(fā)現(xiàn)丟失的事務(wù)消息并對(duì)對(duì)應(yīng)丟失的事務(wù)事件進(jìn)行標(biāo)記重發(fā),審計(jì)歷史記錄表(audit_history_record)保存發(fā)現(xiàn)的丟失事務(wù)消息記錄和狀態(tài)供下一次審計(jì)周期重復(fù)檢測(cè)及狀態(tài)更新。事務(wù)消息路由規(guī)則表中包括下述表5所示的字段。表5審計(jì)歷史記錄表包括下述表6所示的字段表6audit_route_rule路由表需要根據(jù)實(shí)際的業(yè)務(wù)需求增加對(duì)應(yīng)路由,如以用戶注冊(cè)業(yè)務(wù)為例,則路由表中需要增加如下條目:ruleidmessageproducermessageconsumermessagetype00010102reg注:“01”代表微服務(wù)系統(tǒng)中定義的用戶微服務(wù)標(biāo)識(shí)id,“02”代表微服務(wù)系統(tǒng)中定義的賬戶微服務(wù)標(biāo)識(shí)id,“reg”代表事務(wù)消息的類型為用戶注冊(cè),這些值根據(jù)微服務(wù)實(shí)際業(yè)務(wù)系統(tǒng)規(guī)則自行定義,確保在審計(jì)時(shí)能夠正確找到微服務(wù)架構(gòu)中對(duì)應(yīng)的微服務(wù)并獲取相應(yīng)的事務(wù)消息。審計(jì)自愈服務(wù)會(huì)根據(jù)audit_route_rule路由表的路由規(guī)則去查詢事務(wù)消息發(fā)送微服務(wù)(messageproducer)的message_send_record表中的發(fā)送的事務(wù)消息并審計(jì)對(duì)應(yīng)的事務(wù)消息接收微服務(wù)(messageconsumer)的message_process_record中是否都已接收,如有不一致,則消息丟失觸發(fā)重發(fā)等自愈流程。圖3為本發(fā)明實(shí)施例提供的一種微服務(wù)架構(gòu)場(chǎng)景下的用戶注冊(cè)的事務(wù)流程,包括如下的處理過程:1、用戶在客戶端向前端網(wǎng)站服務(wù)器發(fā)起注冊(cè)請(qǐng)求;2、前端網(wǎng)站服務(wù)器收到用戶的注冊(cè)請(qǐng)求后,向用戶微服務(wù)服務(wù)器發(fā)起用戶注冊(cè);3、用戶微服務(wù)服務(wù)器接收到上述用戶注冊(cè)請(qǐng)求后,與用戶微服務(wù)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)通信,在用戶微服務(wù)數(shù)據(jù)庫(kù)中的用戶信息表(user_info)中增加所述用戶的記錄,在所述用戶微服務(wù)數(shù)據(jù)庫(kù)中的事務(wù)消息發(fā)送記錄表(message_send_record)保存注冊(cè)事務(wù)消息事件;4、用戶微服務(wù)服務(wù)器將注冊(cè)事務(wù)事件發(fā)送給消息中間件,消息中間件將注冊(cè)事務(wù)事件轉(zhuǎn)發(fā)給賬戶微服務(wù)服務(wù)器;5、用戶微服務(wù)服務(wù)器根據(jù)注冊(cè)事務(wù)事件的發(fā)送結(jié)果更新事務(wù)消息發(fā)送記錄表(message_send_record)對(duì)應(yīng)的該消息的發(fā)送結(jié)果狀態(tài),該發(fā)送結(jié)果狀態(tài)包括發(fā)送成功或者發(fā)送失??;6、用戶微服務(wù)服務(wù)器注冊(cè)結(jié)果返回給前端網(wǎng)站服務(wù)器;7、前端網(wǎng)站服務(wù)器將注冊(cè)結(jié)果返回給終端用戶;9、用戶微服務(wù)服務(wù)器通過機(jī)制檢測(cè)事務(wù)消息發(fā)送記錄表(message_send_record)中的消息是否發(fā)送成功,如果發(fā)送狀態(tài)為失敗,則會(huì)重新發(fā)送;此時(shí)終端用戶雖然看到了注冊(cè)完成,但實(shí)際上,注冊(cè)事務(wù)只完成了一半,剩下的一半將在后續(xù)步驟中完成。9、賬戶微服務(wù)服務(wù)器通過消息中間件異步接收到用戶注冊(cè)事務(wù)消息;10、賬戶微服務(wù)服務(wù)器與賬戶微服務(wù)數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)通信,在賬戶微服務(wù)數(shù)據(jù)庫(kù)中的事務(wù)消息處理記錄表(message_process_record)中保存接收到的事務(wù)消息,在賬戶微服務(wù)數(shù)據(jù)庫(kù)中的賬戶信息表(account_info)中保存用戶賬戶信息,并根據(jù)處理結(jié)果更新所述事務(wù)消息處理記錄表對(duì)應(yīng)記錄的處理結(jié)果狀態(tài),該處理結(jié)果狀態(tài)包括處理成功或者處理失敗。11、賬戶微服務(wù)服務(wù)器通過機(jī)制檢測(cè)所述事務(wù)消息處理記錄表中的記錄的處理結(jié)果狀態(tài)是否為處理成功,如果處理結(jié)果狀態(tài)為處理失敗,則會(huì)重新處理對(duì)應(yīng)用戶的注冊(cè)事務(wù)事件。審計(jì)微服務(wù)服務(wù)器與用戶微服務(wù)服務(wù)器、賬戶微服務(wù)服務(wù)器通過通信網(wǎng)絡(luò)連接,審計(jì)微服務(wù)服務(wù)器按照設(shè)定時(shí)間間隔檢測(cè)用戶微服務(wù)服務(wù)器、賬戶微服務(wù)服務(wù)在事務(wù)發(fā)送、接收和處理完成情況,將檢測(cè)異常結(jié)果存儲(chǔ)在審計(jì)自愈服務(wù)數(shù)據(jù)庫(kù)中的審計(jì)歷史記錄表中,同時(shí)會(huì)主動(dòng)觸發(fā)事務(wù)異常的流程重啟,達(dá)到無(wú)需人工干預(yù)的自愈。圖4為本發(fā)明實(shí)施例提供的一種審計(jì)微服務(wù)服務(wù)器執(zhí)行的審計(jì)自愈機(jī)制流程圖,包括如下的處理過程:步驟1、審計(jì)自愈服務(wù)為定時(shí)任務(wù),審計(jì)自愈周期開始;步驟2、首先檢查審計(jì)歷史記錄表(audit_history_record)中的歷史事務(wù)消息丟失記錄狀態(tài)為未恢復(fù)的記錄,查看是否已重發(fā)成功,消費(fèi)者微服務(wù)已收到該事務(wù)消息,則執(zhí)行步驟3,否則執(zhí)行步驟4;步驟3、對(duì)應(yīng)的消費(fèi)者微服務(wù)已收到該事務(wù)消息,則表明已經(jīng)自愈,標(biāo)記審計(jì)歷史記錄表中該歷史事務(wù)消息丟失記錄狀態(tài)為已恢復(fù);步驟4、對(duì)應(yīng)的消費(fèi)者微服務(wù)未收到該事務(wù)消息,則調(diào)用對(duì)應(yīng)的該事件的生產(chǎn)者微服務(wù),標(biāo)記事務(wù)消息發(fā)送記錄表(message_send_record)對(duì)應(yīng)的記錄為重新發(fā)送;步驟5、遍歷事務(wù)消息路由規(guī)則表(audit_route_rule),檢查上次審計(jì)時(shí)間點(diǎn)至當(dāng)前時(shí)間的事務(wù)事件是否丟失,未發(fā)現(xiàn)新的丟失記錄則執(zhí)行步驟7,否則執(zhí)行步驟6;步驟6、發(fā)現(xiàn)丟失的事務(wù)消息,則調(diào)用對(duì)應(yīng)的該事件的生產(chǎn)者微服務(wù)的重發(fā)表示接口,標(biāo)記事務(wù)消息發(fā)送記錄表(message_send_record)對(duì)應(yīng)的記錄為重新發(fā)送,并將該記錄寫入audit_history_record歷史記錄表供下次審計(jì)時(shí)重新檢查;步驟7、歷史記錄和新的審計(jì)周期時(shí)間范圍內(nèi)是否有事件丟失,有丟失則執(zhí)行步驟8,否則執(zhí)行步驟9;步驟8、發(fā)送對(duì)應(yīng)的告警事件到相應(yīng)的監(jiān)控平臺(tái),必要時(shí)需人工介入處理;步驟9、記錄此次審計(jì)的時(shí)間點(diǎn)供下個(gè)周期到來時(shí)作為起始時(shí)間點(diǎn);步驟10、本次的審計(jì)和自愈處理結(jié)束。綜上所述,本發(fā)明實(shí)施例通過各微服務(wù)本身的事務(wù)消息重發(fā)機(jī)制和事務(wù)重新處理機(jī)制保證消息的可靠傳遞與最終一致性,使方案的實(shí)現(xiàn)不依賴于第三方的消息中間件的可靠傳遞機(jī)制,從而弱化與某種類型的消息中間件的耦合,消息中間件可隨意替換。本發(fā)明實(shí)施例通過全局審計(jì)和自愈機(jī)制,能夠及時(shí)發(fā)現(xiàn)事務(wù)消息事件的異常丟失并自愈,即使在極端條件下(網(wǎng)絡(luò)中斷,服務(wù)重啟)依然能夠在網(wǎng)絡(luò)和服務(wù)恢復(fù)之后自動(dòng)完成處于部分完成狀態(tài)的分布式事務(wù)的后續(xù)處理,從而達(dá)到微服務(wù)架構(gòu)下分布式事務(wù)的最終一致性。本領(lǐng)域普通技術(shù)人員可以理解:附圖只是一個(gè)實(shí)施例的示意圖,附圖中的模塊或流程并不一定是實(shí)施本發(fā)明所必須的。通過以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺(tái)的方式來實(shí)現(xiàn)?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。本說明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于裝置或系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。以上所描述的裝置及系統(tǒng)實(shí)施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本
技術(shù)領(lǐng)域
的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。當(dāng)前第1頁(yè)12
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1