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

一種分布式事務處理方法及裝置與流程

文檔序號:12612155閱讀:249來源:國知局
一種分布式事務處理方法及裝置與流程

本申請涉及事務處理技術領域,尤其涉及一種分布式事務處理方法及裝置。



背景技術:

隨著信息技術的發(fā)展,某些事務的處理變得越來越復雜。比如,一個事務需要由網絡系統中多個節(jié)點的共同配合才能完成,這類事務可以稱為分布式事務。完成分布式事務處理的節(jié)點可以體現為各種類型,比如,在一種情況下,處理分布式事務的節(jié)點可以包括面向用戶的上層服務器、向上層服務器提供業(yè)務支持并對數據庫中的業(yè)務參數進行操作的下層服務器。在實際進行分布式事務處理過程中,在接收到用戶針對數據庫中某個業(yè)務參數(指定參數)進行有關操作的應用請求后,便會發(fā)起分布式事務的處理。該分布式事務隨后將進行兩個階段的執(zhí)行過程:第一階段,分布式事務涉及的有關節(jié)點針對指定參數準備數據;第二階段,各相關節(jié)點提交準備的數據,根據提交的準備數據對指定參數進行更新。

以上述上層服務器、下層服務器為分布式事務處理節(jié)點為例,在第一階段,可以由下層服務器根據上層服務器發(fā)送的針對數據庫中指定參數的更新請求,生成與該更新請求相關的準備數據,(此時尚未對該指定參數進行變更);在第二階段,下層服務器提交準備的數據,利用下層服務器準備的數據對該指定參數進行最終更新。

上述過程是分布式事務處理的一般過程,但是,在實際應用中,可能存在如下的場景:上層服務器可能針對同一個指定參數向下層服務器發(fā)送不止一個更新請求,且針對后一個更新請求可能要依賴于前一個更新請求對應的更新結 果(可以稱為中間結果)。在這種場景下,由于一般采用串行讀的方式執(zhí)行分布式事務中的各步驟,在第一階段,下層服務器根據上層服務器發(fā)送的第一個更新請求尚不未能對指定參數進行變更,第一個更新請求對應的中間結果尚未生成,上層服務器無法正確地向下層服務器發(fā)送下一個更新請求,只有等到第二階段,上層服務器才能獲得第一個更新請求對應的中間結果,因此,上層服務器需要額外地發(fā)起另一個分布式事務,以用于對該指定參數進行最終更新,增大了上層服務器的工作負擔。



技術實現要素:

本申請實施例提供一種分布式事務處理方法及裝置,用以解決現有技術中由于在分布式事務二階段前,中間結果尚未生成,導致上層服務器要發(fā)起額外的分布式事務,增大了上層服務器的工作負擔的問題。

本申請實施例提供的一種分布式事務處理方法,所述分布式事務涉及第一節(jié)點、以及位于第一節(jié)點下層的第二節(jié)點,所述分布式事務為對數據庫中指定參數進行更新的事務,該方法包括:

第二節(jié)點接收第一節(jié)點發(fā)送的攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求;

第二節(jié)點響應于所述更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數;

第二節(jié)點根據所述更新后的中間參數,更新所述指定參數。

本申請實施例提供的一種分布式事務處理裝置,所述分布式事務涉及第一節(jié)點、以及位于第一節(jié)點下層的第二節(jié)點,所述分布式事務為對數據庫中指定參數進行更新的事務,所述裝置位于第二節(jié)點上,該裝置包括:

接收模塊,用于接收第一節(jié)點發(fā)送的攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求;

響應模塊,用于響應于所述更新請求,對與所述分布式事務標識以及所述 指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數;

更新模塊,用于根據所述更新后的中間參數,更新所述指定參數。

本申請實施例還提供另一種分布式事務處理方法及裝置,用以解決現有技術中由于在分布式事務二階段前,中間結果尚未生成,導致上層服務器要發(fā)起額外的分布式事務,增大了上層服務器的工作負擔的問題。

本申請實施例提供的另一種分布式事務處理方法,所述分布式事務涉及第一節(jié)點、以及位于第一節(jié)點下層的第二節(jié)點,所述分布式事務為對數據庫中指定參數進行更新的事務,該方法包括:

第一節(jié)點響應于用戶發(fā)送的應用請求,發(fā)起所述分布式事務,并獲取所述分布式事務標識;

第一節(jié)點向第二節(jié)點發(fā)送攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求,以便于第二節(jié)點響應于所述更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數,根據所述更新后的中間參數,更新所述指定參數;

第一節(jié)點獲取更新后的所述指定參數并返回給所述用戶。

本申請實施例提供的一種分布式事務處理裝置,所述分布式事務涉及第一節(jié)點、以及位于第一節(jié)點下層的第二節(jié)點,所述分布式事務為對數據庫中指定參數進行更新的事務,所述裝置位于第一節(jié)點上,該裝置包括:

發(fā)送模塊,用于響應于用戶發(fā)送的應用請求,發(fā)起所述分布式事務,并獲取所述分布式事務標識;

請求模塊,用于向第二節(jié)點發(fā)送攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求,以便于第二節(jié)點響應于所述更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數,根據所述更新后的中間參數,更新所述指定參數;

獲取模塊,用于獲取更新后的所述指定參數并返回給所述用戶。

本申請實施例通過上述至少一種技術方案,第一節(jié)點可以是上層服務器,第二節(jié)點可以是下層服務器,由于可以利用中間參數保存要針對指定參數執(zhí)行的每次更新后的更新結果,作為中間結果,以用于進行下次更新,進而可以根據多次更新后得到的中間結果更新指定參數,這個過程可以在一次分布式事務中完成,因此,無需上層服務器發(fā)起額外的分布式事務,可以減小工作負擔。

附圖說明

此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:

圖1為本申請實施例提供的分布式事務處理方法的過程;

圖2為本申請實施例提供的另一種分布式事務處理方法的過程;

圖3為本申請實施例提供的與一種實際業(yè)務場景相關的系統結構圖;

圖4為現有技術提供的在圖3中的實際業(yè)務場景下,對一種業(yè)務過程的實施步驟;

圖5為本申請實施例提供的在圖3中的實際業(yè)務場景下,對一種業(yè)務過程的實施步驟;

圖6為本申請實施例提供的對應于圖1的分布式事務處理裝置結構示意圖;

圖7為本申請實施例提供的對應于圖2的分布式事務處理裝置結構示意圖。

具體實施方式

為使本申請的目的、技術方案和優(yōu)點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤? 例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。

針對背景技術中提到的問題,在本申請實施例中,假定要對數據庫中的同一個指定參數依次進行多次更新,雖然,在分布式事務的第一階段(以下簡稱為:第一階段),無法更新該指定參數,但是,可以利用與該分布式事務標識以及該指定參數具有對應關系的中間參數,通過對中間參數執(zhí)行原本要在分布式事務的第二階段(以下簡稱為:第二階段)對指定參數執(zhí)行的多次更新操作,使得中間參數可以反映各次更新后的更新結果(也即,導致該次更新的更新請求對應的中間結果)。需要說明的是,由于中間參數并不是該分布式事務直接針對的參數,因此,可以在該分布式事務的第一階段對中間參數進行更新。

上層服務器在每次發(fā)起更新請求時,可根據該分布式事務標識,獲取上一個更新請求對應的中間結果,以生成下一個更新請求發(fā)送給下層服務器,以便于下層服務器,對中間參數進行本次更新,直至多次更新操作均執(zhí)行完畢后,在第二階段,下層服務器可以直接用多次更新后的中間參數對指定參數進行更新,而不用再對指定參數進行多次更新。因此,上層服務器不必發(fā)起額外的分布式事務,可以減小工作負擔。下面進行具體說明。

圖1為本申請實施例提供的分布式事務處理方法的過程,該過程可以在任一可以用于執(zhí)行分布式事務的環(huán)境中執(zhí)行,該環(huán)境中包含的節(jié)點可以是上層服務器、下層服務器、數據庫、事務管理器、資源管理器,等等。

在圖1中,分布式事務涉及第一節(jié)點、以及位于第一節(jié)點下層的第二節(jié)點,該分布式事務為對數據庫中指定參數進行更新的事務,該數據庫是可以由第二節(jié)點直接操作。第一節(jié)點可以是上層服務器,第二節(jié)點可以是下層服務器。圖1中的過程具體可以包括以下步驟:

S101:第二節(jié)點接收第一節(jié)點發(fā)送的攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求。

在本申請實施例中,用戶可以通過終端上對應于第一節(jié)點的應用,向第一 節(jié)點發(fā)送應用請求,以請求獲得某項服務,則第一節(jié)點可以響應于該應用請求,執(zhí)行為該項服務預設的業(yè)務邏輯;或者,第一節(jié)點也可以自動地執(zhí)行預設的業(yè)務邏輯。進一步地,這些業(yè)務邏輯具體可以在第一節(jié)點發(fā)起的分布式事務內執(zhí)行。

第一節(jié)點發(fā)起分布式事務后,可以從事務管理器獲得對應的分布式事務標識(Identity,id)。分布式事務標識可以用于全局唯一地表示該分布式事務,并且可以用于串聯該分布式事務。事務管理器負責統一管理分布式事務,其可以是分布式環(huán)境中的一個節(jié)點,也可以是其他節(jié)點上的模塊。

第一節(jié)點獲得分布式事務標識后,可以開始向第二節(jié)點發(fā)送攜帶分布式事務標識的、針對數據庫中同一個指定參數的更新請求,指定參數可以是用戶向第一節(jié)點請求的服務對應的參數。相應的,第二節(jié)點可以開始執(zhí)行圖1中的各步驟,其中,步驟S101和S102可以是在分布式事務的第一階段執(zhí)行的,步驟S103可以是在分布式事務的第二階段執(zhí)行的。

在本申請實施例中,第一節(jié)點在第一階段一共可以針對該指定參數,按照預定發(fā)送順序發(fā)送至少兩個更新請求。

進一步地,每個更新請求可以是依賴于前一個更新請求對應的更新結果生成的,第一個更新請求可以是依賴于用戶發(fā)送的應用請求生成的。在這種情況下,第一節(jié)點在發(fā)送任一個更新請求后,第二節(jié)點響應于該更新請求,執(zhí)行相應的更新操作得到該更新請求對應的中間結果后,第一節(jié)點再獲取該中間結果,以生成下一個更新請求,依次類推,直至第二節(jié)點對全部的更新請求都進行了響應。由此可見,第二節(jié)點在執(zhí)行步驟S101的過程中,即可能要相應地多次執(zhí)行步驟S102。本申請實施例主要是基于各更新請求相互依賴的這種場景進行說明的。

當然,在實際應用中,若各更新請求可以不相互依賴,則第二節(jié)點也可以并行地接收各更新請求,和/或并行地響應各更新請求,而第一節(jié)點也可以不用在確定第二節(jié)點對前一個更新請求響應后,再生成及發(fā)送下一個更新請求。 從而,可以提高各節(jié)點的處理效率。

S102:第二節(jié)點響應于所述更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數。

在本申請實施例中,該對應關系可以是在步驟S102之前預先建立的,也可以在執(zhí)行步驟S102的過程中建立的。

在本申請實施例中,由于第一節(jié)點可以發(fā)送多個更新請求,則第二節(jié)點也相應地進行多次響應。為了便于描述,以下以在分布式事務中,第一節(jié)點向第二節(jié)點一共發(fā)送兩個針對同一個指定參數的更新請求為例,對本申請的方案進行說明。下面分別對第一節(jié)點發(fā)送的每個更新請求,以及第二節(jié)點對每個更新請求的響應進行說明。

第一節(jié)點向第二節(jié)點發(fā)送第一個更新請求后,由于此時處于第一階段,因此,第二節(jié)點無法直接對指定參數進行更新。在相關技術中,第二節(jié)點可以根據第一個更新請求,生成可以用于反映第一個更新請求對應的更新操作的特定數據(具體可以是業(yè)務流水數據等)并保存,以便于在第二階段,再根據該特定數據,對指定參數進行更新。舉例進行說明。

例如,假定指定參數為參數A(A等于10),第一個更新請求對應的更新操作具體為如下操作:加5。則第二節(jié)點生成的特定數據可以是“+5”。在第一階段內,A仍然等于10,第一個更新請求對應的中間結果尚未生成,在串行讀的方案下,在中間結果尚未生成前,無法查詢獲得A,這樣的話,第一節(jié)點需要等待在第二階段,根據特定數據生成中間結果后,再通過發(fā)起另一次分布式事務,查詢獲得A(此時的A等于15),進而再生成以及向第二節(jié)點發(fā)送第二個更新請求。

而在本申請實施例中,可以預先針對指定參數設定一個對應的參數,也即,中間參數。第二節(jié)點在接收到第一個更新請求后,可以建立第一操作請求攜帶的分布式事務標識與中間參數的對應關系,以便于用中間參數保存與該分布式事務涉及的中間結果,以及以便于在該分布式事務中,根據分布式事務標識獲 取中間結果。沿用上例進行說明。

例如,將針對參數A設定的對應的中間參數記作參數B。數據庫上已經存在用于保存參數A的字段(稱為第一字段),進一步地,可以預先在數據庫上額外增加用于記錄分布式事務標識的字段(稱為第二字段),以及用于記錄參數B的字段(稱為第三字段)。則第二節(jié)點在接收到第一個更新請求后,可以將第一個更新請求中攜帶的分布式事務標識記錄在第二字段中,并建立第二字段和第三字段的對應關系。

第二節(jié)點在接收到第一個更新請求后,可以將第一個更新請求中攜帶的分布式事務標識寫入第二字段,在這種情況下,參數B可以用于記錄與針對參數A的該分布式事務涉及的中間結果。具體的,可以用參數A對參數B賦值,賦值后,B等于10,然后在對賦值后的參數B執(zhí)行第一操作,執(zhí)行第一操作后,參數B等于15;或者,也可以用對參數A加5后的結果對參數B進行賦值,賦值后,參數B等于15。這樣的話,雖然第一階段參數A尚不能被直接更新,但是可以用參數B記錄假定對參數A進行了更新后的結果,也即,中間結果;進而,可以便于第一節(jié)點在第一階段繼續(xù)根據中間結果,生成及發(fā)送第二個更新請求。

在本申請實施例中,第二個更新請求對應的更新操作可以是需要依賴于第一個更新請求對應的中間結果執(zhí)行的操作。由于中間參數在第一階段是可以被更新的,且中間參數記錄了第一個更新請求對應的中間結果,因此,當第二節(jié)點接收到第一節(jié)點發(fā)送的第二個更新請求后,雖然仍不能對上述的指定參數進行操作,但是,可以對已經更新過一次中間參數進行第二次更新,也即,讓中間參數繼續(xù)為指定參數記錄中間結果。繼續(xù)沿用上例進行說明。

例如,假定第二個更新請求對應的更新操作具體為如下操作:對加5后得到的中間結果再乘以某系數。加5后得到的中間結果即為第一操作后的參數B,等于15,假定對15乘以某系數后等于15.01,則第二次更新后的參數B等于15.01。

S103:第二節(jié)點根據所述更新后的中間參數,更新所述指定參數。

為了便于理解,可以認為,在第一階段,第二節(jié)點由于無法直接對指定參數進行更新,因此,可以將原本要對指定參數進行各更新,一一地對與分布式事務標識以及指定參數具有對應關系的中間參數進行操作,由于中間參數在第一階段可以被更新,以及可以記錄中間結果。因此,在第二階段,可以根據第一階段更新后的中間參數對指定參數進行更新,也即,此時的中間參數可以視為在第一階段準備的、用于在第二階段對指定參數進行更新的更新數據。

具體的,可以用此時的中間參數為指定參數賦值,即可完成對指定參數的更新。繼續(xù)沿用上例進行說明,更新后的指定參數(也即,參數A)等于15.01。

通過圖1中的過程,第一節(jié)點可以是上層服務器,第二節(jié)點可以是下層服務器,由于可以利用中間參數保存要針對指定參數執(zhí)行的每次更新后的更新結果,作為中間結果,以用于進行下次更新,進而可以根據多次更新后得到的中間結果更新指定參數,這個過程可以在一次分布式事務中完成,因此,無需上層服務器發(fā)起額外的分布式事務,可以減小工作負擔。

為了便于理解,下面對圖1中的步驟進一步地進行說明。

在本申請實施例中,對于步驟S102,第二節(jié)點響應于所述更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數,具體可以包括:

第二節(jié)點針對接收到的各所述更新請求中的第一個更新請求,執(zhí)行:根據所述第一個更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到作為本次更新結果的中間結果;

第二節(jié)點針對接收到的各所述更新請求中的其他各個更新請求,執(zhí)行下述操作,直至對接收到的各所述更新請求中的最后一個更新請求執(zhí)行下述操作后,將相應的中間結果作為所述更新后的中間參數:

根據該更新請求,對根據該更新請求的前一個更新請求更新得到的中間結果進行更新,得到作為本次更新結果的中間結果。

在上面已經以各更新請求一共包含兩個更新請求為例進行了詳細說明。當各更新請求包含有更多的更新請求時,對于第二個更新請求后的每個更新請求,第二節(jié)點的響應過程與對上例中第二個更新請求的響應過程類似,只是基于的中間結果不相同,在這里不再贅述。

在本申請實施例中,根據前面的說明,各更新請求是相互依賴的,在這種情況下,第二節(jié)點接收到的各更新請求中,除了第一個更新請求以外的其他各個更新請求,是由第一節(jié)點根據分布式事務標識,向第二節(jié)點獲取該更新請求的前一個更新請求對應的中間結果,并根據獲取的該中間結果生成的;第一個更新請求可以是根據用戶向第一節(jié)點發(fā)送的應用請求生成的。

進一步的,在執(zhí)行步驟S101和S102的過程中,第一節(jié)點可能要多次地從第二節(jié)點獲取對應于不同的更新請求的中間結果。為了防止中間結果被其他分布式事務影響,可以基于分布式標識,限制中間結果的使用范圍。具體的,可以只允許中間結果對應的分布式事務涉及的各節(jié)點獲取該中間結果。

第一節(jié)點可以按照如下方式,獲取中間結果:第一節(jié)點向第二節(jié)點發(fā)送攜帶分布式標識的、針對該中間結果的獲取請求;第二節(jié)點判斷該獲取請求中攜帶的分布式標識是否是該中間結果對應的分布式事務標識,若是,則可以將該中間結果返回給第一節(jié)點,否則,可以拒絕該獲取請求。

在本申請實施例中,對于上述提到的步驟S102對應的子步驟,根據所述第一個更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,具體可以包括:根據所述指定參數,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行賦值;根據所述第一個更新請求,對賦值后的所述中間參數進行更新。通過這個賦值操作可以使中間參數在被更新前與指定參數一致,從而,保證在步驟S103,根據更新后的中間參數,對指定參數進行的更新是正確可靠的。

另外,在實際應用中,也可以不先對中間參數賦值,而是,先根據指定參數,確定若對指定參數執(zhí)行第一個更新請求對應的更新操作的話可得到的結 果,然后再用該結果對中間參數賦值,將用該結果賦值后的中間參數作為第一個更新請求對應的中間結果。

以上為本申請實施例提供的、以第二節(jié)點為執(zhí)行主體的分布式事務處理方法,基于同樣的思路,本申請例還提供了以第一節(jié)點為執(zhí)行主體的另一種分布式事務處理方法。

圖2示出了另一種分布式事務處理方法的過程,該過程具體可以包括以下步驟:

S201:第一節(jié)點響應于用戶發(fā)送的應用請求,發(fā)起所述分布式事務,并獲取所述分布式事務標識。

S202:第一節(jié)點向第二節(jié)點發(fā)送攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求,以便于第二節(jié)點響應于所述更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數,根據所述更新后的中間參數,更新所述指定參數。

S203:第一節(jié)點獲取更新后的所述指定參數并返回給所述用戶。

可以看到,圖2與圖1的過程相互對應的,只是站在不同的節(jié)點進行描述的。則通過圖2中的過程,也可以解決背景技術中提到的問題。

為了便于理解,下面對圖2中的步驟進一步地進行說明。

在本申請實施例中,對于步驟S202,第一節(jié)點向第二節(jié)點發(fā)送攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求,具體可以包括:

第一節(jié)點向第二節(jié)點發(fā)送攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的各所述更新請求中的第一個更新請求,以便于第二節(jié)點針對所述第一個更新請求,執(zhí)行:根據所述第一個更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到作為本次更新結果的中間結果;

第一節(jié)點向第二節(jié)點發(fā)送的各所述更新請求中的其他各個更新請求,以便于第二節(jié)點針對所述其他各個更新請求執(zhí)行下述操作,直至對接收到的各所述更新請求中的最后一個更新請求執(zhí)行下述操作后,將相應的中間結果作為所述更新后的中間參數:

根據該更新請求,對根據該更新請求的前一個更新請求更新得到的中間結果進行更新,得到作為本次更新結果的中間結果。

在本申請實施例中,各所述更新請求中的其他各個更新請求,是由第一節(jié)點根據所述分布式事務標識,向第二節(jié)點獲取該更新請求的前一個更新請求對應的中間結果,并根據獲取的該中間結果生成的。

在本申請實施例中,在步驟S203的執(zhí)行過程,還可以執(zhí)行以下步驟:第一節(jié)點向第二節(jié)點發(fā)送攜帶所述分布式標識的、針對該中間結果的獲取請求;第一節(jié)點接收第二節(jié)點在確定所述獲取請求攜帶有所述分布式事務標識時,向第一節(jié)點返回的該中間結果。

以上對本申請實施例提供的、以第一節(jié)點為執(zhí)行主體的另一種分布式事務處理方法的過程進行了說明。

在實際應用中,圖1和圖2中的分布式事務處理方法可以應用于很多業(yè)務場景中。為了便于理解,下面以一種實際業(yè)務場景為例,對比于現有技術,對將上述的分布式事務處理方法在該實際業(yè)務場景中的應用進行說明。

圖3示出了該實際業(yè)務場景相關的系統結構圖。該系統是一個賬務系統,包含應用服務器、賬務服務器(集群),賬務系統還可以包含數據庫、事務管理器(在圖3中未示出),其中,該數據庫可以位于賬務服務器上,也可以位于除了應用服務器以外,與賬務服務器連接的其他設備上。遠端的用戶可以通過路由器連接至應用服務器,并向應用服務器發(fā)送應用請求。

應用服務器可以為用戶提供與用戶的賬戶相關的服務,如充值、購物、理財、生活繳費等服務,賬務服務器則負責管理用戶的賬戶的具體數據,所述具體數據可以存儲在數據庫中。應用服務器在為用戶提供服務時,需要請求賬務 服務器對所述具體數據進行相應的操作,如查詢操作、更新操作等。

在本申請實施例中,應用服務器可以作為上述的第一節(jié)點,賬務服務器可以作為上述的第二節(jié)點。

假定在該實際業(yè)務場景,某一次業(yè)務過程如下:

用戶的賬戶的余額是10元,用戶通過向應用服務器發(fā)送請求給賬戶充值5元,應用服務器根據該請求生成針對余額的相應更新請求,發(fā)給賬務服務器;

賬務服務器根據該相應更新請求,需要將余額更新為15元,返回給應用服務器;

根據預定的業(yè)務邏輯,應用服務器還要根據更新后的余額15元計算出一筆利息(假定計算出的利息為0.01元),并請求賬務服務器根據該利息,對更新后的余額15元進一步地更新為15.01元,再后將余額15.01元這個結果通過應用服務器返回給用戶。

可以看到,在該業(yè)務過程中,應用服務器要向賬務服務器對指定參數(用于記錄余額的參數,為了便于描述,可以將其簡稱為:余額參數)發(fā)送不止一個更新請求,且后一個更新請求要依賴于前一個更新請求的結果(也即,中間結果),則若基于分布式事務實現該業(yè)務過程,會導致背景技術中提及的問題。

為了便于理解,用圖4、圖5對基于現有技術和基于本申請實施例提供的方法,對該業(yè)務過程的實施步驟。

圖4示出了基于現有技術,對該業(yè)務過程的實施步驟的簡單描述。數據庫中可以用余額字段記錄余額參數(上述的指定參數在該場景下即為余額參數,以下簡稱為:余額)。

可以看到,圖4中的應用服務器一共發(fā)起了兩次分布式事務。第一次分布式事務用于將根據用戶充值的5元,將余額由10元更新為15元;第二次分布式事務用于根據利息計算邏輯,基于第一次分布式事務執(zhí)行完畢后的余額15元,計算出利息0.01元,進而,將再將余額由15元更新為15.01元。

需要發(fā)起第二次分布事務的原因是:第二次分布式事務中對余額的更新需 要依賴于第一次分布式事務中對余額的更新結果(也即,中間結果),而除非在第一次分布式事務二階段后,才能獲得中間結果,因此,第二次分布式事務中對余額的修改無法合并在第一次分布式事務中執(zhí)行,進而需要額外地發(fā)起第二次分布式事務。

圖5示出了基于本申請實施例提供的方法,對該業(yè)務過程的實施步驟的簡單描述。數據庫中除了有余額字段以外,還設置有與余額字段對應的帶事務余額字段(用于記錄帶事務余額參數,上述的中間參數在該場景下即為帶事務余額參數,以下簡稱為:帶事務余額),分布式事務id字段(用于記錄所述的分布式事務標識,以下簡稱為:分布式事務id)。

可以看到,圖4中的應用服務器只發(fā)起了一次分布式事務。

在該次分布式事務的第一階段,根據事務管理器分配的分布式事務id,為分布式事務id字段賦值,并建立分布式事務id字段與余額字段、帶事務余額字段的對應關系,也即,分布式事務id與余額、帶事務余額的對應關系。

建立該對應關系的主要目的是:使得帶事務余額帶有分布式事務id的信息,則可以允許該分布式事務下的應用通過發(fā)送攜帶該分布式事務id的請求,獲得該分布式事務id對應的帶事務余額;而不允許不在該分布式事務下的應用獲得該分布式事務id對應的帶事務余額;從而可以防止不同的分布式事務之間產生干擾。

進一步地,在第一階段,根據用戶充值的5元,尚不能將余額由10元更新為15元(充值的5元實際上是針對余額充的,因此,將余額由10元更新為15元的操作在第一階段只能做準備而不能實際執(zhí)行,只能等待第二階段提交后再執(zhí)行),但是,可以根據余額和用戶充值的5元,將帶事務余額更新為15元(這樣的話,相當于是:在第一階段,帶事務余額代替余額,記錄中間結果);進而,可以根據利息計算邏輯,基于帶事務余額15元,計算出利息0.01元,將再將帶事務余額由15元更新為15.01元(帶事務余額代替余額,繼續(xù)記錄中間結果)。

在該次分布式事務的第二階段,應用服務器可以提交該次分布式事務,則可以用帶事務余額15.01元對余額賦值,賦值后的余額為15.01元。

可以看到,與現有技術中的方式相比,實現了相同的業(yè)務,但是,只需要發(fā)起一次分布式事務即可,可以減小應用服務器的工作負擔。

以上對本申請實施例提供的兩種分布式事務處理方法進行了詳細說明,基于同樣的思路,本申請實施例還提供相應的分布式事務處理裝置,如圖6、圖7所示。

圖6為本申請實施例提供的對應于圖1的分布式事務處理裝置結構示意圖,所述分布式事務涉及第一節(jié)點、以及位于第一節(jié)點下層的第二節(jié)點,所述分布式事務為對數據庫中指定參數進行更新的事務,所述裝置位于第二節(jié)點上,所述裝置具體包括:

接收模塊601,用于接收第一節(jié)點發(fā)送的攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求;

響應模塊602,用于響應于所述更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數;

更新模塊603,用于根據所述更新后的中間參數,更新所述指定參數。

所述響應模塊602具體用于:

針對接收到的各所述更新請求中的第一個更新請求,執(zhí)行:根據所述第一個更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到作為本次更新結果的中間結果;

針對接收到的各所述更新請求中的其他各個更新請求,執(zhí)行下述操作,直至對接收到的各所述更新請求中的最后一個更新請求執(zhí)行下述操作后,將相應的中間結果作為所述更新后的中間參數:

根據該更新請求,對根據該更新請求的前一個更新請求更新得到的中間結果進行更新,得到作為本次更新結果的中間結果。

第二節(jié)點接收到的各所述更新請求中的其他各個更新請求,是由第一節(jié)點 根據所述分布式事務標識,向第二節(jié)點獲取該更新請求的前一個更新請求對應的中間結果,并根據獲取的該中間結果生成的。

所述裝置還可以包括:

返回模塊604,用于當接收到第一節(jié)點發(fā)送的針對該中間結果的獲取請求時,在確定所述獲取請求攜帶有所述分布式事務標識時,向第一節(jié)點返回該中間結果。

所述響應模塊602具體用于:根據所述指定參數,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行賦值;根據所述第一個更新請求,對賦值后的所述中間參數進行更新。

圖7為本申請實施例提供的對應于圖4的分布式事務處理裝置結構示意圖,所述分布式事務涉及第一節(jié)點、以及位于第一節(jié)點下層的第二節(jié)點,所述分布式事務為對數據庫中指定參數進行更新的事務,所述裝置位于第一節(jié)點上,所述裝置具體包括:

發(fā)送模塊701,用于響應于用戶發(fā)送的應用請求,發(fā)起所述分布式事務,并獲取所述分布式事務標識;

請求模塊702,用于向第二節(jié)點發(fā)送攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的至少兩個更新請求,以便于第二節(jié)點響應于所述更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到更新后的中間參數,根據所述更新后的中間參數,更新所述指定參數;

獲取模塊703,用于獲取更新后的所述指定參數并返回給所述用戶。

所述請求模塊702具體用于:

第一節(jié)點向第二節(jié)點發(fā)送攜帶所述分布式事務標識的、針對數據庫中同一個指定參數的各所述更新請求中的第一個更新請求,以便于第二節(jié)點針對所述第一個更新請求,執(zhí)行:根據所述第一個更新請求,對與所述分布式事務標識以及所述指定參數具有對應關系的中間參數進行更新,得到作為本次更新結果 的中間結果;

第一節(jié)點向第二節(jié)點發(fā)送的各所述更新請求中的其他各個更新請求,以便于第二節(jié)點針對所述其他各個更新請求執(zhí)行下述操作,直至對接收到的各所述更新請求中的最后一個更新請求執(zhí)行下述操作后,將相應的中間結果作為所述更新后的中間參數:

根據該更新請求,對根據該更新請求的前一個更新請求更新得到的中間結果進行更新,得到作為本次更新結果的中間結果。

各所述更新請求中的其他各個更新請求,是由第一節(jié)點根據所述分布式事務標識,向第二節(jié)點獲取該更新請求的前一個更新請求對應的中間結果,并根據獲取的該中間結果生成的。

所述裝置還可以包括:

中間獲取模塊704,用于向第二節(jié)點發(fā)送攜帶所述分布式標識的、針對該中間結果的獲取請求;接收第二節(jié)點在確定所述獲取請求攜帶有所述分布式事務標識時,向第一節(jié)點返回的該中間結果。

通過圖6和/或圖7中的裝置,第一節(jié)點可以是上層服務器,第二節(jié)點可以是下層服務器,由于可以利用中間參數保存要針對指定參數執(zhí)行的每次更新后的更新結果,作為中間結果,以用于進行下次更新,進而可以根據多次更新后得到的中間結果更新指定參數,這個過程可以在一次分布式事務中完成,因此,無需上層服務器發(fā)起額外的分布式事務,可以減小工作負擔。

本領域內的技術人員應明白,本發(fā)明的實施例可提供為方法、系統、或計算機程序產品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。

本發(fā)明是參照根據本發(fā)明實施例的方法、設備(系統)、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和 /或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執(zhí)行的指令產生用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產生計算機實現的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網絡接口和內存。

內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質的示例。

計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(CD-ROM)、數字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算 設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitory media),如調制的數據信號和載波。

還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。

本領域技術人員應明白,本申請的實施例可提供為方法、系統或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。

以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求范圍之內。

當前第1頁1 2 3 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1