本申請涉及計算機技術領域,尤其涉及一種保證數(shù)據(jù)一致性和可用性的方法及裝置。
背景技術:
互聯(lián)網(wǎng)中的網(wǎng)站或者應用服務器為了避免機房故障導致不可用的情況發(fā)生,通常會建設多個機房。這樣在一個機房因為網(wǎng)絡、供電、火災等意外導致整個機房不可用時可以將進行中的服務切換到另一個機房,從而繼續(xù)為用戶提供服務。
在機房切換后,通常數(shù)據(jù)會產(chǎn)生分區(qū),即兩個機房中的數(shù)據(jù)不同步,正常情況下兩個機房中的數(shù)據(jù)都是相同并且是最新的,此時會遇到如何保證數(shù)據(jù)一致性和可用性的問題。
目前的分布式數(shù)據(jù)庫(如oceanbase)可以做到機房切換時同時保證數(shù)據(jù)一致性和可用性,但是前提是需要多數(shù)派達成一致。為了滿足這一前提條件,通常需要3個及以上的機房。例如,有3個機房,當其中一個機房發(fā)生火災導致機房不可用時,由于剩余可用機房的數(shù)量2大于不可用機房的數(shù)量1,所以可以滿足多數(shù)派達成一致的條件。但是由于機房建設以及維護的成本較高,很多情況下可能僅會采用雙機房。
當只有2個機房的情況下,為了滿足上述前提條件,在現(xiàn)有技術中,會將一個機房設置多數(shù)派節(jié)點,另一個機房設置少數(shù)派節(jié)點,這樣在少數(shù)派節(jié)點機房發(fā)生故障不可用時,僅通過多數(shù)派節(jié)點機房自身就可以滿足多數(shù)派達成一致的條件。例如,一個機房設置有2個節(jié)點設備,一個機房設置有1個節(jié)點設備;當1個節(jié)點設備的機房不可用時,剩余的機房由于具有2個節(jié)點設備大于不可用機房的1個節(jié)點設備,依然可以達成了多數(shù)派一致的條件。然而,在多數(shù)派節(jié)點機房不可用時,僅通過少數(shù)派節(jié)點機房無法滿足多數(shù)派一致的條件,也就無法保證數(shù)據(jù)一致性和可用性。
綜上所述,現(xiàn)有技術中存在雙機房環(huán)境下,無法保證數(shù)據(jù)一致性和可用性的問題。
技術實現(xiàn)要素:
本申請?zhí)峁┑囊环N保證數(shù)據(jù)一致性和可用性的方法及裝置,以解決現(xiàn)有技術中雙機房環(huán)境下,無法保證數(shù)據(jù)一致性和可用性的問題。
根據(jù)本申請實施例提供的一種保證數(shù)據(jù)一致性和可用性的方法,所述方法包括:
在任意一個節(jié)點設備不可用的情況下,判斷可用節(jié)點設備數(shù)量是否超過所有節(jié)點設備數(shù)量的一半;
在可用節(jié)點設備數(shù)量不超過所有節(jié)點設備數(shù)量的一半的情況下,修改可用的節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備;
在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向所述可用的節(jié)點設備發(fā)起針對該事務的提交操作;
判斷成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
在成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,則確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
根據(jù)本申請實施例提供的一種保證數(shù)據(jù)一致性和可用性的方法,所述方法應用于雙機房,所述方法包括:
在第一機房中所有節(jié)點設備不可用的情況下,修改另一個可用的第二機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得所述第二機房中節(jié)點設備不再識別所述第一機房中節(jié)點設備;
在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向所述第二機房中節(jié)點設備發(fā)起針對該事務的提交操作;
判斷所述第二機房中成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
在所述第二機房中成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
根據(jù)本申請實施例提供的一種保證數(shù)據(jù)一致性和可用性的方法,所述方法應用于雙機房,所述方法包括:
在雙機房之間通信鏈路中斷的情況下,修改主機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得主機房中節(jié)點設備不再識別備用機房中節(jié)點設備;
在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向主機房中節(jié)點設備發(fā)起針對該事務的提交操作;
判斷所述主機房中成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
在所述主機房中成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
根據(jù)本申請實施例提供的一種保證數(shù)據(jù)一致性和可用性的裝置,所述裝置包括:
第一判斷單元,在任意一個節(jié)點設備不可用的情況下,判斷可用節(jié)點設備數(shù)量是否超過所有節(jié)點設備數(shù)量的一半;
修改單元,在可用節(jié)點設備數(shù)量不超過所有節(jié)點設備數(shù)量的一半的情況下,修改可用的節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備;
發(fā)起單元,在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向所述可用的節(jié)點設備發(fā)起針對該事務的提交操作;
第二判斷單元,判斷成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
確定單元,在成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,則確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
根據(jù)本申請實施例提供的一種保證數(shù)據(jù)一致性和可用性的裝置,所述裝置應用于雙機房,所述裝置包括:
修改單元,在第一機房中所有節(jié)點設備不可用的情況下,修改另一個可用的第二機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得所述第二機房中節(jié)點設備不再識別所述第一機房中節(jié)點設備;
發(fā)起單元,在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向所述第二機房中節(jié)點設備發(fā)起針對該事務的提交操作;
判斷單元,判斷所述第二機房中成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
確定單元,在所述第二機房中成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
根據(jù)本申請實施例提供的一種保證數(shù)據(jù)一致性和可用性的裝置,所述裝置應用于雙機房,所述裝置包括:
修改單元,在雙機房之間通信鏈路中斷的情況下,修改主機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得主機房中節(jié)點設備不再識別備用機房中節(jié)點設備;
發(fā)起單元,在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向主機房中節(jié)點設備發(fā)起針對該事務的提交操作;
判斷單元,判斷所述主機房中成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
確定單元,在所述主機房中成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
本申請實施例中,在任意節(jié)點設備發(fā)生不可用的情況下,通過自動地修改其它可用的節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),從而使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備。如此,在進行事務提交時,在剩余可用的節(jié)點設備中超過半數(shù)成功提交時,才可以滿足多數(shù)派一致的條件,從而保證數(shù)據(jù)一致性和可用性。
針對雙機房在容災切換后,通過自動修改可用機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),從而使得所述可用機房中節(jié)點設備不再識別不可用機房中節(jié)點設備。如此,在進行事務提交時,僅需所述可用機房中成功提交該事務的節(jié)點設備數(shù)量超過半數(shù)(修改后節(jié)點設備總數(shù))時,就可以滿足多數(shù)派一致的條件,從而保證數(shù)據(jù)一致性和可用性。例如,機房a和機房b各2個節(jié)點設備,在機房a中2個節(jié)點設備都不可用時,修改機房b中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),在進行事務提交時,由于修改后的節(jié)點設備總數(shù)為2,此時多數(shù)派的數(shù)量為2,所以在所述機房b中2個節(jié)點設備均成功提交該事務的情況下,就可以滿足多數(shù)派一致的條件,從而可以成功該事務提交,保證數(shù)據(jù)一致性和可用性,解決了雙機房下無法保證數(shù)據(jù)一致性和可用性的問題。對于雙機房之間通信鏈路中斷的情況下與次相同,可以將主機房視為可用機房,備用機房視為不可用機房。
附圖說明
圖1是本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的方法的流程圖;
圖2是本申請一實施例提供的節(jié)點設備集群示意圖;
圖3a、3b是本申請一實施例提供的雙機房示意圖;
圖4是本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的方法的流程圖;
圖5是本申請一實施例提供的雙機房的示意圖;
圖6是本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的方法的流程圖;
圖7是本申請?zhí)峁┑谋WC數(shù)據(jù)一致性和可用性的裝置所在設備的一種硬件結構圖;
圖8是本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的裝置的模塊示意圖;
圖9是本申請?zhí)峁┑谋WC數(shù)據(jù)一致性和可用性的裝置所在設備的一種硬件結構圖;
圖10是本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的裝置的模塊示意圖;
圖11是本申請?zhí)峁┑谋WC數(shù)據(jù)一致性和可用性的裝置所在設備的一種硬件結構圖;
圖12是本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的裝置的模塊示意圖。
具體實施方式
這里將詳細地對示例性實施例進行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本申請相一致的所有實施方式。相反,它們僅是與如所附權利要求書中所詳述的、本申請的一些方面相一致的裝置和方法的例子。
在本申請使用的術語是僅僅出于描述特定實施例的目的,而非旨在限制本申請。在本申請和所附權利要求書中所使用的單數(shù)形式的“一種”、“所述”和“該”也旨在包括多數(shù)形式,除非上下文清楚地表示其他含義。還應當理解,本文中使用的術語“和/或”是指并包含一個或多個相關聯(lián)的列出項目的任何或所有可能組合。
應當理解,盡管在本申請可能采用術語第一、第二、第三等來描述各種信息,但這些信息不應限于這些術語。這些術語僅用來將同一類型的信息彼此區(qū)分開。例如,在不脫離本申請范圍的情況下,第一信息也可以被稱為第二信息,類似地,第二信息也可以被稱為第一信息。取決于語境,如在此所使用的詞語“如果”可以被解釋成為“在……時”或“當……時”或“響應于確定”。
相關技術中,數(shù)據(jù)一致性表示,所有節(jié)點設備中的數(shù)據(jù)都是最新且相同的。
舉例說明,對于用戶賬戶余額來說,數(shù)據(jù)一致性非常重要。假設存在兩個記錄用戶賬戶余額的節(jié)點設備,某用戶賬戶余額為100元,在某一時刻通過節(jié)點設備1轉入了100元,則節(jié)點設備1中該用戶賬戶余額變?yōu)?00元;為了保證數(shù)據(jù)一致性,節(jié)點設備1還需要將數(shù)據(jù)同步到另一個節(jié)點設備2,使節(jié)點設備2中該用戶賬戶余額也為200元。如果節(jié)點設備1沒有同步該用戶賬戶余額,那么在該用戶通過節(jié)點設備2查詢余額或者進行支付時,賬戶余額僅為100元。因此,數(shù)據(jù)一致性非常重要。
可用性表示,數(shù)據(jù)具有高可用性。例如,當某個節(jié)點設備發(fā)生故障,則該節(jié)點設備提供的服務需要切換到其它可用的節(jié)點設備上,從而保證可用性。再例如,當某個機房發(fā)生故障,使得該機房中所有節(jié)點設備都不可用,則需要切換到別的機房中的節(jié)點設備繼續(xù)提供服務。
一般的,每個機房的節(jié)點設備都會設置有一個配置文件,所述配置文件中記錄有本機房以及其它機房中的節(jié)點設備信息,以及節(jié)點設備總數(shù)(包括本機房中節(jié)點設備數(shù)量和其它機房中節(jié)點設備數(shù)量)。
請參見圖1,為本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的方法的流程圖,所述方法包括以下步驟:
步驟110:在任意一個節(jié)點設備不可用的情況下,判斷可用節(jié)點設備數(shù)量是否超過所有節(jié)點設備數(shù)量的一半。
步驟120:在可用節(jié)點設備數(shù)量不超過所有節(jié)點設備數(shù)量的一半的情況下,修改可用的節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備。
本實施例中,所述節(jié)點設備信息可以包括節(jié)點設備的ip地址。
在可用節(jié)點設備數(shù)量不超過所有節(jié)點設備數(shù)量的一半的情況下,說明僅根據(jù)剩余可用節(jié)點設備無法達成多數(shù)派的條件。因此,需要進行處理,即修改可用的節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備。所述修改可用的節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),具體包括:
將可用的節(jié)點設備的配置文件中記錄的所述不可用的節(jié)點設備的ip地址刪除,并將記錄的節(jié)點設備總數(shù)減1。這樣,就可以使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備。
步驟130:在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向所述可用的節(jié)點設備發(fā)起針對該事務的提交操作。
本實施例中,由于修改后的配置文件中已經(jīng)刪除了不可用的節(jié)點設備的ip地址,因此,在接收到事務提交請求后,只需向配置文件中剩余的節(jié)點設備,即可用的節(jié)點設備發(fā)起針對該事務的提交操作即可。一般的,遞交操作可以為寫操作。
步驟140:判斷成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半。
步驟150:在成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,則確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
舉例說明,如圖2所示的節(jié)點設備集群示意圖中:
所述節(jié)點設備集群可以是若干節(jié)點設備組成的節(jié)點設備集群,所述集群中的節(jié)點設備可以分屬不同的機房。如圖2中,機房a中具有節(jié)點設備1和2,機房b具有節(jié)點設備3和4,機房c具有節(jié)點設備5和6。正常情況下,每個機房中節(jié)點設備的配置文件中節(jié)點設備信息為節(jié)點設備1、2、3、4、5、6的ip地址,并且節(jié)點設備總數(shù)為6。假設節(jié)點設備1、2、3不可用,則可用節(jié)點設備數(shù)量為3,而所有節(jié)點設備數(shù)量的一半也為3;此時由于可用節(jié)點設備數(shù)量是否少于所有節(jié)點設備數(shù)量的一半,則自動修改可用的節(jié)點設備4、5、6的配置文件。具體地,將配置文件中記錄的節(jié)點設備1、2、3的ip地址刪除,并將節(jié)點設備總數(shù)修改為3。在接收到事務發(fā)起方發(fā)起的事務提交請求后,根據(jù)修改后的配置文件,可以向可用節(jié)點設備4、5、6發(fā)起針對該事務的提交操作。由于修改后配置文件中節(jié)點設備總數(shù)為3,因此多數(shù)派的數(shù)量為2(節(jié)點設備總數(shù)的一半),即在至少2個節(jié)點設備達成一致的情況下,才可以滿足多數(shù)派一致的條件?;谶@種情況,只有在成功提交該事務的節(jié)點設備的數(shù)量超過2個的情況下,可以確定該事務提交成功,并可以向事務提交方返回提交成功的信息。
本申請實施例,在可用節(jié)點設備數(shù)量是否少于所有節(jié)點設備數(shù)量的一半的情況下,通過自動地修改其它可用的節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),從而使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備。如此,在進行事務提交時,在剩余可用的節(jié)點設備中超過半數(shù)成功提交時,才可以滿足多數(shù)派一致的條件,從而保證數(shù)據(jù)一致性和可用性。
依然基于圖1所述實施例的基礎上,該方法實施例還可以包括如下步驟:
在任意不可用的節(jié)點設備x恢復正常后,將其它可用的節(jié)點設備的配置文件中添加所述節(jié)點設備x的ip地址,并將節(jié)點設備總數(shù)加1,使得其它可用的節(jié)點設備重新識別所述節(jié)點設備x;
將其它所有可用的節(jié)點設備的數(shù)據(jù)同步到所述節(jié)點設備x,直至所述節(jié)點設備x與其它所有可用的節(jié)點設備中數(shù)據(jù)相同。
本實施例中,對于不可用的節(jié)點設備x恢復正常后,由于在該節(jié)點設備x不可用期間,其它節(jié)點設備中數(shù)據(jù)可能發(fā)生變化,為了保證數(shù)據(jù)一致性,需要同步該節(jié)點設備x中數(shù)據(jù),使得所有可用的節(jié)點設備(包括節(jié)點設備x和其它所有可用的節(jié)點設備)中數(shù)據(jù)相同。
沿用圖2,假設節(jié)點設備1恢復正常后,則可以將其它可用的節(jié)點設備的配置文件中添加該節(jié)點設備1的ip地址,并將節(jié)點設備總數(shù)由于3修改為6,從而使得其它可用的節(jié)點設備4、5、6重新可以識別該節(jié)點設備1。之后,將節(jié)點設備1從其它所有可用的節(jié)點設備4、5、6處進行數(shù)據(jù)追加寫操作,直至節(jié)點設備1與節(jié)點設備4、5、6中數(shù)據(jù)相同,從而保證了數(shù)據(jù)一致性。同樣的,如果節(jié)點設備2或3也恢復正常,處理過程與上述節(jié)點設備1的處理過程相同。
在圖3a所示的雙機房示意圖中,具有機房a和機房b。其中,機房a中具有2個節(jié)點設備,機房b中具有1個節(jié)點設備。由于節(jié)點設備總數(shù)為3,因此多數(shù)派的數(shù)量為2,即在至少2個節(jié)點設備達成一致時,滿足多數(shù)派一致的條件。
如果少數(shù)派機房即機房b中節(jié)點設備不可用,事務提交方如app服務器向機房a中節(jié)點設備發(fā)起事務提交請求,假設節(jié)點設備1負責處理該事務提交請求。此時,節(jié)點設備1除了進行事務的寫操作外,還需要根據(jù)配置文件中的節(jié)點設備信息,如圖3a中的虛線所示向節(jié)點設備2和機房b中的節(jié)點設備3同步寫入的數(shù)據(jù);由于多數(shù)派的數(shù)量為2,因此只要機房a中節(jié)點設備1和2都成功提交事務,即使機房b因為不可用導致節(jié)點設備3未成功提交事務,也可以滿足多數(shù)派一致的條件,該app服務器提交事務才算成功,保證了數(shù)據(jù)一致性和可用性。
然而,如圖3b所示如果多數(shù)派機房即機房a中節(jié)點設備1、2都不可用,app服務器向機房b中節(jié)點設備發(fā)起事務提交請求,假設節(jié)點設備3負責處理該事務提交請求。此時,節(jié)點設備3除了進行事務的寫操作外,還需要根據(jù)配置文件中的節(jié)點設備信息,如圖3b中的虛線所示向機房a中的節(jié)點設備1和2同步寫入的數(shù)據(jù);由于多數(shù)派的數(shù)量為2,以及機房a中節(jié)點設備1、2不可用導致都未成功提交事務,因此即使節(jié)點設備3成功提交事務,也無法滿足多數(shù)派一致的條件,也就無法保證數(shù)據(jù)一致性和可用性。
本實施例中,所述雙機房之間的通信可以基于分布式一致性協(xié)議。例如paxos協(xié)議或者所述paxos協(xié)議的改進協(xié)議。
所述paxos協(xié)議提出只要中2f+1個節(jié)點中的f+1個節(jié)點可用(超過一半以上的節(jié)點,即多數(shù)派),那么就可以保證數(shù)據(jù)一致性和可用性。這里的可用性并不是代表100%的可用,一般意義上可用性的值域可以定義為0到100%(即1)的連續(xù)區(qū)域。因為,分布式系統(tǒng)達不到100%的可用性,例如雙機房中,一個機房故障需要進行機房切換,此時,故障機房已經(jīng)不可用,而還沒有切換到正常機房的這段時間內(nèi),整個系統(tǒng)都是處于不可用狀態(tài)的。
假設單節(jié)點的可用性是p,那么2f+1個節(jié)點中任意組合的f+1以上個節(jié)點正常的可用性
為了解決上述問題,請參見圖4,為本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的方法的流程圖,所述方法可以應用于雙機房,所述方法包括以下步驟:
步驟210:在任意一個機房a中所有節(jié)點設備不可用的情況下,修改另一個可用的機房b中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得所述機房b中節(jié)點設備不再識別所述機房a中節(jié)點設備。
本實施例中,所述節(jié)點設備信息可以包括節(jié)點設備的ip地址。
所述不可用的情況,可以包括例如任意一個機房a中所有節(jié)點設備故障。
本實施例中,所述修改另一個可用的機房b中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),具體包括:
將另一個可用的機房b中節(jié)點設備的配置文件中記錄的機房a中所有節(jié)點設備的ip地址刪除,并將節(jié)點設備總數(shù)修改為所述機房b中節(jié)點設備的數(shù)量。
舉例說明,假設機房a和機房b的節(jié)點設備數(shù)量都是2個,在機房a中節(jié)點設備都不可用的情況下,可以將機房b中節(jié)點設備的配置文件中記錄的機房a中所有節(jié)點設備信息刪除,并將節(jié)點設備總數(shù)由于原來的4個修改為2個。
步驟220:在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向所述機房b中節(jié)點設備發(fā)起針對該事務的提交操作。
本實施例中,在接收到事務提交請求的情況下,由于修改后的配置文件僅剩機房b中的節(jié)點設備信息,使得機房b中節(jié)點設備不再識別機房a中節(jié)點設備,因此,僅向所述機房b中節(jié)點設備發(fā)起針對該事務的提交操作。
步驟230:判斷所述機房b中成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半。
步驟240:在所述機房b中成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
針對上述圖3b,由于機房a中節(jié)點設備1、2不可用,修改機房b中節(jié)點設備的配置文件,即將配置文件中記錄的節(jié)點設備1、2的ip地址刪除,并將節(jié)點設備總數(shù)由3修改為1。如此,只要機房b中節(jié)點設備3成功提交事務,就可以滿足多數(shù)派一致性的條件,進而保證數(shù)據(jù)一致性和可用性。
值得一提的是,通常雙機房中每一個機房可以具有相同數(shù)量的節(jié)點設備,節(jié)點設備總數(shù)即為所述雙機房中節(jié)點設備的總數(shù)。
舉例說明,如圖5所示的雙機房示意圖中,具有機房a和機房b。其中,機房a具有2個節(jié)點設備,機房b具有2個節(jié)點設備。節(jié)點設備總數(shù)為2+2=4個,因此多數(shù)派的數(shù)量為3,即在3個節(jié)點設備達成一致時,滿足多數(shù)派一致的條件。
在機房a中節(jié)點設備3、4不可用的情況下,可以切換機房b繼續(xù)提供服務,此時可以修改機房b中節(jié)點設備的配置文件,即將機房b中節(jié)點設備的配置文件中記錄的節(jié)點設備1、2、3、4,修改為僅剩所述機房b的節(jié)點設備1、2(刪除了機房a中節(jié)點設備3、4),并且將節(jié)點設備總數(shù)從4個修改為2個。在切換成機房b后,app服務器如果需要進行事務提交,可以向機房b中節(jié)點設備發(fā)起事務提交請求,根據(jù)修改后的配置文件中記錄的節(jié)點設備信息,向節(jié)點設備1和節(jié)點設備2發(fā)起針對該事務的提交操作。如果節(jié)點設備1和節(jié)點設備2都成功提交該事務,由于現(xiàn)在的多數(shù)派為2個(節(jié)點設備總數(shù)的一半),可以滿足多數(shù)派一致的條件。這樣,就保證了數(shù)據(jù)一致性和可用性。
本申請實施例中,針對雙機房在容災切換后,通過自動修改可用機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),從而使得所述可用機房b中節(jié)點設備不再識別不可用機房a中節(jié)點設備。如此,在進行事務提交時,僅需所述機房b中成功提交該事務的節(jié)點設備數(shù)量超過半數(shù)(修改后節(jié)點設備總數(shù))時,就可以滿足多數(shù)派一致的條件,從而保證數(shù)據(jù)一致性和可用性。例如,機房a和機房b各2個節(jié)點設備,在機房a中2個節(jié)點設備都不可用時,修改機房b中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),在進行事務提交時,由于修改后的節(jié)點設備總數(shù)為2,此時多數(shù)派的數(shù)量為2,所以在所述機房b中2個節(jié)點設備均成功提交該事務的情況下,就可以滿足多數(shù)派一致的條件,從而可以成功該事務提交,保證數(shù)據(jù)一致性和可用性,解決了雙機房下無法保證數(shù)據(jù)一致性和可用性的問題。
在實際應用中,假設機房a中任意一個節(jié)點設備恢復正常了,由于機房a不可用期間,機房b中節(jié)點設備中可能新增了很多數(shù)據(jù),因此,機房a和機房b中存在節(jié)點設備中數(shù)據(jù)不一致的情況下,為了保證數(shù)據(jù)一致性,需要同步機房a中恢復正常的節(jié)點設備的數(shù)據(jù),使得所有可用的節(jié)點設備中數(shù)據(jù)相同。因此,在圖4所示實施例的基礎上,還包括如下步驟:
在所述機房a中所有的節(jié)點設備恢復正常后,逐一將所述機房a中節(jié)點設備中數(shù)據(jù)與機房b中節(jié)點設備數(shù)據(jù)進行同步,具體包括:
a1:從所恢復正常的節(jié)點設備中選取一個節(jié)點設備為待同步節(jié)點設備;
a2:將所述機房b中節(jié)點設備的配置文件中添加所述待同步節(jié)點設備的ip地址,并將節(jié)點設備總數(shù)加1;
a3:將可用節(jié)點設備的數(shù)據(jù)同步到所述待同步節(jié)點設備;
a4:在所述待同步節(jié)點設備與可用節(jié)點設備中數(shù)據(jù)相同的情況下,重復執(zhí)行a1,直至所述機房a中所有節(jié)點設備與可用節(jié)點設備中數(shù)據(jù)相同
依然以圖5所示的示意圖加以說明,在機房a中所有節(jié)點設備恢復正常后,假設為選取了節(jié)點設備3為待同步節(jié)點設備;此時,將所述機房b中節(jié)點設備的配置文件中添加所述節(jié)點設備3的ip地址,并將節(jié)點設備總數(shù)加1。
接著,將所述節(jié)點設備3從所述機房b中節(jié)點設備1、2處進行數(shù)據(jù)追加寫操作,直至該節(jié)點設備3與機房b中所有節(jié)點設備的數(shù)據(jù)相同。
當節(jié)點設備3同步數(shù)據(jù)完成后,將節(jié)點設備4選取為待同步節(jié)點設備;再修改機房b中節(jié)點設備的配置信息,將記錄的節(jié)點設備1、2、3的ip地址修改為節(jié)點設備1、2、3、4的ip地址,使得節(jié)點設備1、2、3可以識別節(jié)點設備4。并且節(jié)點設備總數(shù)也從3個修改為4個。
接著,將節(jié)點設備4從節(jié)點設備1、2、3出進行數(shù)據(jù)追加寫操作即可。
在實際應用中,除了機房中所有節(jié)點設備不可用之外,還可能發(fā)生雙機房之間通信鏈路中斷的情況。一般的,設置雙機房時會將一個機房設置為主機房,另一個設置為備用機房。對于雙機房之間通信鏈路中斷的情況,可以提供服務的就只有主機房,而備用機房中節(jié)點設備雖然是正常的,但由于通信鏈路中斷,對于主機房來說,其實備用機房相當于不可用。因此,這種情況也需要保證數(shù)據(jù)一致性和可用性。為此請參見圖6,為本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的方法的流程圖,所述方法可以應用于雙機房,所述方法包括以下步驟:
步驟310:在雙機房之間通信鏈路中斷的情況下,修改主機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得主機房中節(jié)點設備不再識別備用機房中節(jié)點設備。
本實施例中,所述節(jié)點設備信息可以包括節(jié)點設備的ip地址。
需要說明的是,所述主機房可以是人為預先定義的一個機房;或者,是事務提交方例如app服務器確定的一個機房。
由于雙機房中一個是主機房,一個是備用機房。如前所述,雙機房之間通信鏈路中斷可以提供服務的就只有主機房;因此,需要修改主機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),具體包括:
將主機房中節(jié)點設備的配置文件中記錄的備用機房中所有節(jié)點設備的ip地址刪除,并將節(jié)點設備總數(shù)修改為所述主機房中節(jié)點設備的數(shù)量。
此步驟與上述實施例類似,此處不再贅述。
步驟320:在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向主機房中節(jié)點設備發(fā)起針對該事務的提交操作。
此步驟與上述實施例類似,此處不再贅述。
步驟330:判斷所述主機房中成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半。
此步驟與上述實施例類似,此處不再贅述。
步驟340:在所述主機房中成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
此步驟與上述實施例類似,此處不再贅述。
類似的,通常雙機房中每一個機房可以具有相同數(shù)量的節(jié)點設備。
類似的,在圖6所示實施例的基礎上,還可以包括:
在雙機房之間通信鏈路恢復正常后,逐一將所述備用機房中節(jié)點設備數(shù)據(jù)與主機房中節(jié)點設備數(shù)據(jù)進行同步,具體包括:
b1:從所述備用機房中選取一個節(jié)點設備為待同步節(jié)點設備;
b2:將所述主機房中節(jié)點設備的配置文件中添加所述待同步節(jié)點設備的ip地址,并將節(jié)點設備總數(shù)加1;
b3:將可用節(jié)點設備的數(shù)據(jù)同步到所述待同步節(jié)點設備;
b4:在所述待同步節(jié)點設備與可用節(jié)點設備中數(shù)據(jù)相同的情況下,重復執(zhí)行b1,直至所述備用機房中所有節(jié)點設備與可用節(jié)點設備中數(shù)據(jù)相同。
本實施例與前述實施例類似,此處不再贅述。
與前述圖1所述保證數(shù)據(jù)一致性和可用性的方法實施例相對應,本申請還提供了一種保證數(shù)據(jù)一致性和可用性的裝置的實施例。所述裝置實施例可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內(nèi)存中運行形成的。從硬件層面而言,如圖7所示,為本申請保證數(shù)據(jù)一致性和可用性的裝置所在設備的一種硬件結構圖,除了圖7所示的處理器、網(wǎng)絡接口、內(nèi)存以及非易失性存儲器之外,實施例中裝置所在的設備通常根據(jù)該保證數(shù)據(jù)一致性和可用性的實際功能,還可以包括其他硬件,對此不再贅述。
參見圖8,為本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的裝置的模塊圖,所述裝置包括:第一判斷單元410、修改單元420、發(fā)起單元430、第二判斷成單元440和確定單元450。
其中,第一判斷單元410,在任意一個節(jié)點設備不可用的情況下,判斷可用節(jié)點設備數(shù)量是否超過所有節(jié)點設備數(shù)量的一半;
修改單元420,在可用節(jié)點設備數(shù)量不超過所有節(jié)點設備數(shù)量的一半的情況下,修改可用的節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備;
發(fā)起單元430,在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向所述可用的節(jié)點設備發(fā)起針對該事務的提交操作;
第二判斷單元440,判斷成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
確定單元450,在成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,則確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
在一個可選的實施例中:
所述節(jié)點設備信息包括節(jié)點設備的ip地址。
在一個可選的實施例中:
所述修改單元420,具體包括:
在可用節(jié)點設備數(shù)量不超過所有節(jié)點設備數(shù)量的一半的情況下,將可用的節(jié)點設備的配置文件中記錄的所述不可用的節(jié)點設備的ip地址刪除,并將記錄的節(jié)點設備總數(shù)修改為可用的節(jié)點設備數(shù)量,使得可用的節(jié)點設備不再識別所述不可用的節(jié)點設備。
在一個可選的實施例中:
所述裝置還包括:
恢復處理單元,在任意不可用的節(jié)點設備x恢復正常后,將其它可用的節(jié)點設備的配置文件中添加所述節(jié)點設備x的ip地址,并將節(jié)點設備總數(shù)加1,使得其它可用的節(jié)點設備重新識別所述節(jié)點設備x;
同步數(shù)據(jù)單元,將其它所有可用的節(jié)點設備的數(shù)據(jù)同步到所述節(jié)點設備x。
與前述圖4所述保證數(shù)據(jù)一致性和可用性的方法實施例相對應,本申請還提供了一種保證數(shù)據(jù)一致性和可用性的裝置的實施例,應用于雙機房。所述裝置實施例可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內(nèi)存中運行形成的。從硬件層面而言,如圖9所示,為本申請保證數(shù)據(jù)一致性和可用性的裝置所在設備的一種硬件結構圖,除了圖9所示的處理器、網(wǎng)絡接口、內(nèi)存以及非易失性存儲器之外,實施例中裝置所在的設備通常根據(jù)該保證數(shù)據(jù)一致性和可用性的實際功能,還可以包括其他硬件,對此不再贅述。
參見圖10,為本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的裝置的模塊圖,所述裝置包括:修改單元510、發(fā)起單元520、判斷成單元530和確定單元540。
其中,修改單元510,在第一機房中所有節(jié)點設備不可用的情況下,修改另一個可用的第二機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得所述第二機房中節(jié)點設備不再識別所述第一機房中節(jié)點設備;
發(fā)起單元520,在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向所述第二機房中節(jié)點設備發(fā)起針對該事務的提交操作;
判斷單元530,判斷所述第二機房中成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
確定單元540,在所述第二機房中成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
在一個可選的實施例中:
所述節(jié)點設備信息包括節(jié)點設備的ip地址。
在一個可選的實施例中:
所述修改單元510,具體包括:
在第一機房中所有節(jié)點設備不可用的情況下,將另一個可用的第二機房中節(jié)點設備的配置文件中記錄的第一機房a中所有節(jié)點設備的ip地址刪除,并將節(jié)點設備總數(shù)修改為所述機房b中節(jié)點設備的數(shù)量,使得所述第二機房中節(jié)點設備不再識別所述第一機房中節(jié)點設備。
在一個可選的實施例中:
所述雙機房中每一個機房中具有相同數(shù)量的節(jié)點設備。
在一個可選的實施例中:
所述裝置還包括:
恢復處理單元,在所述第一機房中所有的節(jié)點設備恢復正常后,逐一將所述第一機房中節(jié)點設備數(shù)據(jù)與第二機房中節(jié)點設備數(shù)據(jù)進行同步。
在一個可選的實施例中:
所述恢復處理單元,具體包括:
選取子單元,從所恢復正常的節(jié)點設備中選取一個節(jié)點設備為待同步節(jié)點設備;
添加子單元,將所述第二機房中節(jié)點設備的配置文件中添加所述待同步節(jié)點設備的ip地址,并將節(jié)點設備總數(shù)加1;
同步子單元,將可用節(jié)點設備的數(shù)據(jù)同步到所述待同步節(jié)點設備;
控制子單元,在所述待同步節(jié)點設備與可用節(jié)點設備中數(shù)據(jù)相同的情況下,重復執(zhí)行所述選取子單元,直至所述第一機房中所有節(jié)點設備與可用節(jié)點設備中數(shù)據(jù)相同。
在一個可選的實施例中:
所述雙機房之間的通信基于分布式一致性協(xié)議。
與前述圖6所述保證數(shù)據(jù)一致性和可用性的方法實施例相對應,本申請還提供了一種保證數(shù)據(jù)一致性和可用性的裝置的實施例,應用于雙機房。所述裝置實施例可以通過軟件實現(xiàn),也可以通過硬件或者軟硬件結合的方式實現(xiàn)。以軟件實現(xiàn)為例,作為一個邏輯意義上的裝置,是通過其所在設備的處理器將非易失性存儲器中對應的計算機程序指令讀取到內(nèi)存中運行形成的。從硬件層面而言,如圖11所示,為本申請保證數(shù)據(jù)一致性和可用性的裝置所在設備的一種硬件結構圖,除了圖11所示的處理器、網(wǎng)絡接口、內(nèi)存以及非易失性存儲器之外,實施例中裝置所在的設備通常根據(jù)該保證數(shù)據(jù)一致性和可用性的實際功能,還可以包括其他硬件,對此不再贅述。
參見圖12,為本申請一實施例提供的保證數(shù)據(jù)一致性和可用性的裝置的模塊圖,所述裝置包括:修改單元610、發(fā)起單元620、判斷成單元630和確定單元640。
修改單元610,在雙機房之間通信鏈路中斷的情況下,修改主機房中節(jié)點設備的配置文件中節(jié)點設備信息以及節(jié)點設備總數(shù),使得主機房中節(jié)點設備不再識別備用機房中節(jié)點設備;
發(fā)起單元620,在接收到事務提交請求的情況下,根據(jù)所述修改后的配置文件,向主機房中節(jié)點設備發(fā)起針對該事務的提交操作;
判斷單元630,判斷所述主機房中成功提交該事務的節(jié)點設備的數(shù)量是否超過修改后節(jié)點設備總數(shù)的一半;
確定單元640,在所述主機房中成功提交該事務的節(jié)點設備的數(shù)量超過修改后節(jié)點設備總數(shù)的一半的情況下,確定該事務提交成功,并向所述事務提交方返回提交成功的信息。
在一個可選的實施例中:
所述節(jié)點設備信息包括節(jié)點設備的ip地址。
在一個可選的實施例中:
所述修改單元610,具體包括:
在雙機房之間通信鏈路中斷的情況下,將主機房中節(jié)點設備的配置文件中記錄的備用機房中所有節(jié)點設備的ip地址刪除,并將節(jié)點設備總數(shù)修改為所述主機房中節(jié)點設備的數(shù)量,使得主機房中節(jié)點設備不再識別備用機房中節(jié)點設備。
在一個可選的實施例中:
所述雙機房中每一個機房中具有相同數(shù)量的節(jié)點設備。
在一個可選的實施例中:
所述裝置還包括:
恢復處理單元,在雙機房之間通信鏈路恢復正常后,逐一將所述備用機房中節(jié)點設備數(shù)據(jù)與主機房中節(jié)點設備數(shù)據(jù)進行同步。
在一個可選的實施例中:
所述恢復處理單元,具體包括:
選取子單元,從所述備用機房中選取一個節(jié)點設備為待同步節(jié)點設備;
添加子單元,將所述主機房中節(jié)點設備的配置文件中添加所述待同步節(jié)點設備的ip地址,并將節(jié)點設備總數(shù)加1;
同步子單元,將可用節(jié)點設備的數(shù)據(jù)同步到所述待同步節(jié)點設備;
控制子單元,在所述待同步節(jié)點設備與可用節(jié)點設備中數(shù)據(jù)相同的情況下,重復執(zhí)行所述選取子單元,直至所述備用機房中所有節(jié)點設備與可用節(jié)點設備中數(shù)據(jù)相同。
在一個可選的實施例中:
所述雙機房之間的通信基于分布式一致性協(xié)議。
上述實施例闡明的系統(tǒng)、裝置、模塊或單元,具體可以由計算機芯片或實體實現(xiàn),或者由具有某種功能的產(chǎn)品來實現(xiàn)。一種典型的實現(xiàn)設備為計算機,計算機的具體形式可以是個人計算機、膝上型計算機、蜂窩電話、相機電話、智能電話、個人數(shù)字助理、媒體播放器、導航設備、電子郵件收發(fā)設備、游戲控制臺、平板計算機、可穿戴設備或者這些設備中的任意幾種設備的組合。
上述裝置中各個單元的功能和作用的實現(xiàn)過程具體詳見上述方法中對應步驟的實現(xiàn)過程,在此不再贅述。
對于裝置實施例而言,由于其基本對應于方法實施例,所以相關之處參見方法實施例的部分說明即可。以上所描述的裝置實施例僅僅是示意性的,其中所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本申請方案的目的。本領域普通技術人員在不付出創(chuàng)造性勞動的情況下,即可以理解并實施。
本領域技術人員在考慮說明書及實踐這里公開的發(fā)明后,將容易想到本申請的其它實施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應性變化,這些變型、用途或者適應性變化遵循本申請的一般性原理并包括本申請未公開的本技術領域中的公知常識或慣用技術手段。說明書和實施例僅被視為示例性的,本申請的真正范圍和精神由下面的權利要求指出。
應當理解的是,本申請并不局限于上面已經(jīng)描述并在附圖中示出的精確結構,并且可以在不脫離其范圍進行各種修改和改變。本申請的范圍僅由所附的權利要求來限制。