本申請涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法和設(shè)備。
背景技術(shù):
在分布式數(shù)據(jù)存儲系統(tǒng)中,一臺服務(wù)器作為主服務(wù)器,另一臺服務(wù)器作為從屬服務(wù)器(以下簡稱從服務(wù)器),主服務(wù)器可以對外提供數(shù)據(jù)讀寫服務(wù),從服務(wù)器保持與主服務(wù)器之間的數(shù)據(jù)同步,并在主服務(wù)器出現(xiàn)故障時(shí),從服務(wù)器可以對外提供數(shù)據(jù)讀寫服務(wù)。
通常,主服務(wù)器在接收到數(shù)據(jù)并將數(shù)據(jù)進(jìn)行存儲時(shí),可以將存儲的數(shù)據(jù)同步存儲至從服務(wù)器中,這樣,可以保證主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的一致,但是,在實(shí)際應(yīng)用中,由于主服務(wù)器和從服務(wù)器之間的數(shù)據(jù)同步操作存在延時(shí)性,導(dǎo)致從服務(wù)器中的部分?jǐn)?shù)據(jù)丟失,無法保證與主服務(wù)器中的數(shù)據(jù)一致。
為了保證主服務(wù)器和從服務(wù)器之間數(shù)據(jù)的一致性,現(xiàn)有技術(shù)中,在將主服務(wù)器中存儲的數(shù)據(jù)同步至從服務(wù)器時(shí),可以將主服務(wù)器中的數(shù)據(jù)同步至多臺從服務(wù)器中,也就是說,可以將主服務(wù)器中的數(shù)據(jù)存儲多份數(shù)據(jù)副本,在其中一臺從服務(wù)器中的數(shù)據(jù)丟失時(shí),可以從其他從服務(wù)器獲取丟失的數(shù)據(jù),這樣,在主服務(wù)器出現(xiàn)故障時(shí),多臺從服務(wù)器可以對外提供數(shù)據(jù)讀寫服務(wù)。
但是,由于需要對主服務(wù)器中的數(shù)據(jù)存儲多份數(shù)據(jù)副本,導(dǎo)致數(shù)據(jù)存儲消耗的資源比較多。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請實(shí)施例提供了一種數(shù)據(jù)處理方法和設(shè)備,用于解決在分布式數(shù)據(jù)存儲系統(tǒng)中,由于需要對同一份數(shù)據(jù)存儲多份數(shù)據(jù)副本,導(dǎo)致數(shù)據(jù)存儲消耗的資源比較多的問題。
本申請實(shí)施例提供一種數(shù)據(jù)處理方法,所述方法應(yīng)用于分布式數(shù)據(jù)存儲系統(tǒng),所述分布式數(shù)據(jù)存儲系統(tǒng)中包含主服務(wù)器以及至少兩臺從服務(wù)器,包括:
接收用戶發(fā)送的數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù);
根據(jù)所述數(shù)據(jù)更新請求,分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述主服務(wù)器以及所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作;
在確定所述日志更新操作完成時(shí),分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述主服務(wù)器以及所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
本申請實(shí)施例還提供一種數(shù)據(jù)處理方法,所述方法應(yīng)用于分布式數(shù)據(jù)存儲系統(tǒng),所述分布式數(shù)據(jù)存儲系統(tǒng)中包含主服務(wù)器以及至少兩臺從服務(wù)器,包括:
所述主服務(wù)器接收用戶發(fā)送的數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù);
所述主服務(wù)器根據(jù)所述數(shù)據(jù)更新請求,啟動日志更新操作,并分別向所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作;
所述主服務(wù)器在確定所述日志更新操作完成時(shí),啟動數(shù)據(jù)存儲操作,并向所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
本申請實(shí)施例提供一種數(shù)據(jù)處理設(shè)備,所述設(shè)備應(yīng)用于分布式數(shù)據(jù)存儲系統(tǒng),所述分布式數(shù)據(jù)存儲系統(tǒng)中包含主服務(wù)器以及至少兩臺從服務(wù)器,所述設(shè)備包括:接收單元和發(fā)送單元,其中:
接收單元,接收用戶發(fā)送的數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù);
發(fā)送單元,根據(jù)所述數(shù)據(jù)更新請求,分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述主服務(wù)器以及所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作;
所述發(fā)送單元,在確定所述日志更新操作完成時(shí),分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述主服務(wù)器以及所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
本申請實(shí)施例還提供一種數(shù)據(jù)處理設(shè)備,所述設(shè)備應(yīng)用于分布式數(shù)據(jù)存儲系統(tǒng),所述分布式數(shù)據(jù)存儲系統(tǒng)中包含主服務(wù)器以及至少兩臺從服務(wù)器,所述設(shè)備包括:接收單元和發(fā)送單元,其中:
接收單元,接收用戶發(fā)送的數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù);
發(fā)送單元,根據(jù)所述數(shù)據(jù)更新請求,啟動日志更新操作,并向所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作;
所述發(fā)送單元,在確定所述日志更新操作完成時(shí),啟動數(shù)據(jù)存儲操作,并向所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
本申請實(shí)施例采用的上述至少一個(gè)技術(shù)方案能夠達(dá)到以下有益效果:分布式數(shù)據(jù)存儲系統(tǒng)在接收到數(shù)據(jù)更新請求時(shí),可以分別向主服務(wù)器以及從服務(wù)器發(fā)送日志更新指令,使主服務(wù)器以及從服務(wù)器執(zhí)行日志更新操作,并在確定日志更新操作完成時(shí),向主服務(wù)器以及其中一個(gè)從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,這樣,在從服務(wù)器中的數(shù)據(jù)丟失時(shí),可以通過主服務(wù)器與從服務(wù)器預(yù)先存儲的日志恢復(fù)丟失的數(shù)據(jù),保證主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的一致性,并且,針對待更新數(shù)據(jù),只有主服務(wù)器以及其中一個(gè)從服務(wù)器對其進(jìn)行存儲,可以有效減少數(shù)據(jù)存儲消耗的資源。
附圖說明
此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實(shí)施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:
圖1為本申請實(shí)施例提供的一種數(shù)據(jù)處理方法的流程示意圖;
圖2為本申請實(shí)施例提供的一種數(shù)據(jù)處理方法的流程示意圖;
圖3為本申請實(shí)施例提供的確定主服務(wù)器的流程示意圖;
圖4為本申請實(shí)施例提供的一種服務(wù)器故障處理的結(jié)構(gòu)示意圖;
圖5為本申請實(shí)施例提供的一種服務(wù)器故障處理的結(jié)構(gòu)示意圖;
圖6為本申請實(shí)施例提供的一種服務(wù)器故障處理的結(jié)構(gòu)示意圖;
圖7為本申請實(shí)施例提供的一種本地機(jī)房與異地機(jī)房中的服務(wù)器的結(jié)構(gòu)示意圖;
圖8為本申請實(shí)施例提供的一種數(shù)據(jù)處理設(shè)備的結(jié)構(gòu)示意圖;
圖9為本申請實(shí)施例提供的一種數(shù)據(jù)處理設(shè)備的結(jié)構(gòu)示意圖。
具體實(shí)施方式
通常,在分布式數(shù)據(jù)庫存儲系統(tǒng)中,主服務(wù)器在接收到待更新數(shù)據(jù)并對其進(jìn)行存儲時(shí),可以將待更新數(shù)據(jù)同步存儲至從服務(wù)器中,但是,在實(shí)際應(yīng)用中,由于主服務(wù)器與從服務(wù)器之間的地域或者其他原因,導(dǎo)致主服務(wù)器與從服務(wù)器之間的數(shù)據(jù)同步存在延時(shí)性,也就是說,主服務(wù)器在完成對待更新數(shù)據(jù)的存儲之后,從服務(wù)器可能還未完成對待更新數(shù)據(jù)的存儲,此時(shí),如果主服務(wù)器出現(xiàn)故障,從服務(wù)器將會丟失一部分?jǐn)?shù)據(jù)。
在現(xiàn)有技術(shù)中,為了保證從服務(wù)器不丟失數(shù)據(jù)(即保證主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的一致性),可以將主服務(wù)器中的數(shù)據(jù)同步至多臺(至少2臺)從服務(wù)器中,但是相對于原有的分布式數(shù)據(jù)存儲系統(tǒng)而言,需要存儲的數(shù)據(jù)副本較多,容易造成資源的浪費(fèi)。
在實(shí)際應(yīng)用中,出于系統(tǒng)安全的考慮,主服務(wù)器(或從服務(wù)器)在將待更新數(shù)據(jù)進(jìn)行存儲之前,需要首先執(zhí)行日志更新操作,并在完成日志更新操作后,再對待更新數(shù)據(jù)進(jìn)行存儲,這樣,可以保證主服務(wù)器(或從服務(wù)器)中存儲的數(shù)據(jù)與日志之間的一致性,在主服務(wù)器(或從服務(wù)器)存儲數(shù)據(jù)失敗時(shí),可以通過預(yù)先存儲的日志對數(shù)據(jù)進(jìn)行恢復(fù)。
由此可見,在分布式數(shù)據(jù)存儲系統(tǒng)中,在主服務(wù)器將待更新數(shù)據(jù)同步至從服務(wù)器之前,如果主服務(wù)器和從服務(wù)器首先執(zhí)行日志更新操作,在完成日志更新操作后,再執(zhí)行待更新數(shù)據(jù)的存儲操作,那么,在從服務(wù)器存儲的數(shù)據(jù)丟失時(shí),可以通過預(yù)先存儲的日志將丟失的數(shù)據(jù)恢復(fù),這樣,通過主服務(wù)器與從服務(wù)器之間日志的一致性保證主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的一致性,在對數(shù)據(jù)進(jìn)行存儲時(shí),可以減少對待更新數(shù)據(jù)存儲的數(shù)據(jù)副本。
基于上述思路,本申請實(shí)施例提供的技術(shù)方案,可以在保證主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的一致性的前提下,減少對數(shù)據(jù)存儲的數(shù)據(jù)副本,進(jìn)而減少數(shù)據(jù)存儲時(shí)消耗的資源。
為了實(shí)現(xiàn)本申請的目的,本申請實(shí)施例中提供了一種數(shù)據(jù)處理方法和設(shè)備,所述方法應(yīng)用于分布式數(shù)據(jù)存儲系統(tǒng),所述分布式數(shù)據(jù)存儲系統(tǒng)中包含主服務(wù)器以及至少兩臺從服務(wù)器,接收用戶發(fā)送的數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù);根據(jù)所述數(shù)據(jù)更新請求,分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述主服務(wù)器以及所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作;在確定所述日志更新操作完成時(shí),分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述主服務(wù)器以及所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
分布式數(shù)據(jù)存儲系統(tǒng)在接收到數(shù)據(jù)更新請求時(shí),可以分別向主服務(wù)器以及從服務(wù)器發(fā)送日志更新指令,使主服務(wù)器以及從服務(wù)器執(zhí)行日志更新操作,并在確定日志更新操作完成時(shí),向主服務(wù)器以及其中一個(gè)從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,這樣,在從服務(wù)器中的數(shù)據(jù)丟失時(shí),可以通過主服務(wù)器與從服務(wù)器預(yù)先存儲的日志恢復(fù)丟失的數(shù)據(jù),保證主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的一致性,并且,針對待更新數(shù)據(jù),只有主服務(wù)器以及其中一個(gè)從服務(wù)器對其進(jìn)行存儲,可以有效減少數(shù)據(jù)存儲消耗的資源。
需要說明的是,本申請實(shí)施例提供的技術(shù)方案可以基于分布式一致性協(xié)議,并應(yīng)用在基于分布式一致性協(xié)議的分布式數(shù)據(jù)存儲系統(tǒng)中,所述分布式一致性協(xié)議可以是paxos協(xié)議,也可以是其他一致性協(xié)議,不做具體限定。
在基于分布式一致性協(xié)議的分布式數(shù)據(jù)存儲系統(tǒng)中,可以包含主服務(wù)器以及至少兩臺從服務(wù)器,其中,所述主服務(wù)器可以用于對外提供數(shù)據(jù)讀寫服務(wù),所述至少兩臺從服務(wù)器在所述主服務(wù)器出現(xiàn)故障后,可以對外提供數(shù)據(jù)讀寫服務(wù)。
下面結(jié)合本申請具體實(shí)施例及相應(yīng)的附圖對本申請技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本申請一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾堉械膶?shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。
以下結(jié)合附圖,詳細(xì)說明本申請各實(shí)施例提供的技術(shù)方案。
實(shí)施例1
圖1為本申請實(shí)施例提供的一種數(shù)據(jù)處理方法的流程示意圖。所述方法如下所述。本申請實(shí)施例的執(zhí)行主體可以是基于分布式一致性協(xié)議的分布式數(shù)據(jù)存儲系統(tǒng)(以下簡稱分布式數(shù)據(jù)存儲系統(tǒng))。
步驟101:接收用戶發(fā)送的數(shù)據(jù)更新請求。
其中,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù)。
在步驟101中,用戶在發(fā)起業(yè)務(wù)請求,并接收到響應(yīng)消息后,可以向分布式數(shù)據(jù)存儲系統(tǒng)發(fā)送數(shù)據(jù)更新請求,此時(shí),分布式數(shù)據(jù)存儲系統(tǒng)可以接收用戶發(fā)送的數(shù)據(jù)更新請求。
在本申請實(shí)施例中,所述用戶發(fā)起的業(yè)務(wù)請求可以是支付請求,也可以是添加好友請求,還可以是其他業(yè)務(wù)請求,這里不做具體限定。
所述用戶向所述分布式數(shù)據(jù)存儲系統(tǒng)發(fā)送所述數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中可以包含待更新數(shù)據(jù),所述數(shù)據(jù)更新請求用于請求所述分布式數(shù)據(jù)存儲系統(tǒng)將所述待更新數(shù)據(jù)進(jìn)行存儲。
例如,所述用戶在支付平臺上發(fā)起支付請求,所述支付平臺可以響應(yīng)所述用戶發(fā)送的支付請求,所述用戶在接收到響應(yīng)消息后,可以向所述分布式數(shù)據(jù)存儲系統(tǒng)發(fā)送數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中包含與所述支付請求相關(guān)的待更新數(shù)據(jù),所述數(shù)據(jù)更新請求用于請求所述分布式數(shù)據(jù)存儲系統(tǒng)將與所述支付請求相關(guān)的待更新數(shù)據(jù)進(jìn)行存儲。
步驟102:根據(jù)所述數(shù)據(jù)更新請求,分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述主服務(wù)器以及所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作。
在步驟102中,分布式數(shù)據(jù)存儲系統(tǒng)在接收到用戶發(fā)送的數(shù)據(jù)更新請求時(shí),可以根據(jù)所述數(shù)據(jù)請求,分別向分布式數(shù)據(jù)存儲系統(tǒng)中的主服務(wù)器以及至少兩臺從服務(wù)器發(fā)送日志更新指令,以便于主服務(wù)器、至少兩臺從服務(wù)器根據(jù)日志更新指令執(zhí)行日志更新操作。
需要說明的是,在實(shí)際應(yīng)用中,所述分布式數(shù)據(jù)存儲系統(tǒng)在接收所述數(shù)據(jù)更新請求之前,也就是說,在所述分布式數(shù)據(jù)存儲系統(tǒng)中存儲的數(shù)據(jù)為空時(shí),所述分布式數(shù)據(jù)存儲系統(tǒng)需要確定一個(gè)主服務(wù)器,并由確定的主服務(wù)器對外提供數(shù)據(jù)讀寫服務(wù)。
具體地,可以由所述分布式數(shù)據(jù)存儲系統(tǒng)按照隨機(jī)原則確定所述主服務(wù)器,也可以由所述分布式數(shù)據(jù)存儲系統(tǒng)中包含的多個(gè)服務(wù)器通過選舉的方式確定所述主服務(wù)器(這里的選舉可以是多臺服務(wù)器基于分布式一致性協(xié)議進(jìn)行選舉),還可以根據(jù)實(shí)際情況選擇所述分布式數(shù)據(jù)存儲系統(tǒng)中的其中一個(gè)服務(wù)器作為所述主服務(wù)器,這里對確定所述主服務(wù)器的方法不做具體限定。
在確定所述主服務(wù)器后,可以將分布式數(shù)據(jù)存儲系統(tǒng)中的其他服務(wù)器作為從服務(wù)器,在本申請實(shí)施例中,所述從服務(wù)器的臺數(shù)至少為2臺。
所述分布式數(shù)據(jù)存儲系統(tǒng)在確定所述主服務(wù)器以及所述從服務(wù)器之后,并在接收到所述數(shù)據(jù)更新指令時(shí),可以向所述主服務(wù)器發(fā)送日志更新指令,以便于所述主服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作。
所述分布式數(shù)據(jù)存儲系統(tǒng)在向所述主服務(wù)器發(fā)送日志更新指令時(shí),可以同步向所述至少兩臺從服務(wù)器發(fā)送所述日志更新指令,以便于所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作。
需要說明的是,在向所述至少兩臺從服務(wù)器發(fā)送所述日志更新指令時(shí),可以分別向所述至少兩臺從服務(wù)器中的每一臺從服務(wù)器發(fā)送,也可以選擇其中若干臺(至少兩臺)從服務(wù)器,并向選擇的若干個(gè)從服務(wù)器發(fā)送,不做具體限定。
例如:如果分布式數(shù)據(jù)存儲系統(tǒng)中包含兩臺從服務(wù)器,那么,可以分別向這兩臺從服務(wù)器發(fā)送所述日志更新指令,如果分布式數(shù)據(jù)存儲系統(tǒng)中包含四臺從服務(wù)器,那么,可以向其中兩臺從服務(wù)器發(fā)送所述日志更新指令,也可以向其中任意三臺從服務(wù)器發(fā)送所述日志更新指令,還可以分別向這四臺從服務(wù)器發(fā)送所述日志更新指令,不做具體限定。
在本申請實(shí)施例中,可以以分別向所述至少兩臺從服務(wù)器中的每一臺從服務(wù)器發(fā)送所述日志更新指令為例進(jìn)行說明。
所述主服務(wù)器以及所述至少兩臺從服務(wù)器在接收到所述日志更新指令時(shí),可以根據(jù)所述日志更新指令,執(zhí)行日志更新操作。
步驟103:在確定所述日志更新操作完成時(shí),分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述主服務(wù)器以及所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
在步驟103中,所述分布式數(shù)據(jù)存儲系統(tǒng)在確定日志更新操作完成時(shí),可以選擇所述至少兩臺從服務(wù)器中的其中一臺從服務(wù)器作為第一從服務(wù)器,并分別向所述主服務(wù)器以及所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,以便于所述主服務(wù)器以及所述第一從服務(wù)器對所述待更新數(shù)據(jù)進(jìn)行存儲。
具體地,在本申請實(shí)施例中,至少在以下兩種情形下,可以確定所述日志更新操作完成,包括:
第一種情形:在確定所述主服務(wù)器完成所述日志更新操作時(shí),確定所述日志更新操作完成;
第二種情形:在確定所述主服務(wù)器且所述至少兩臺從服務(wù)器中至少一臺從服務(wù)器完成所述日志更新操作時(shí),確定所述日志更新操作完成。
針對第一種情形:在實(shí)際應(yīng)用中,由于所述主服務(wù)器用于對外提供數(shù)據(jù)讀寫服務(wù),因此,分布式數(shù)據(jù)存儲系統(tǒng)在確定所述日志更新操作是否完成時(shí),需要首先確定所述主服務(wù)器是否完成所述日志更新操作,并在確定所述主服務(wù)器完成所述日志更新操作時(shí),可以確定所述日志更新操作完成。
針對第二種情形:為了保證主服務(wù)器與從服務(wù)器之間日志的一致性,在確定所述主服務(wù)器完成所述日志更新操作后,可以進(jìn)一步確定所述至少兩臺從服務(wù)器是否完成所述日志更新操作,此時(shí),如果所述至少兩臺從服務(wù)器中至少一臺從服務(wù)器完成所述日志更新操作,可以說明主服務(wù)器與從服務(wù)器之間日志達(dá)到一致性,也就是說,可以確定所述日志更新操作完成。
這樣,在確定所述日志更新操作完成后,可以選擇所述至少兩臺從服務(wù)器中的其中一臺從服務(wù)器作為第一從服務(wù)器,并分別向所述主服務(wù)器以及所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,以便于所述主服務(wù)器以及所述第一從服務(wù)器執(zhí)行對待更新數(shù)據(jù)的存儲操作。
在本申請實(shí)施例中,可以分別基于上述兩種情形,分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令。
具體地,針對第一種情形,分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,包括:
在確定所述主服務(wù)器完成所述日志更新操作時(shí),向所述主服務(wù)器發(fā)送數(shù)據(jù)存儲指令,并在向所述主服務(wù)器發(fā)送數(shù)據(jù)存儲指令后且確定所述至少兩臺從服務(wù)器中的至少一臺服務(wù)器完成所述日志更新操作時(shí),向所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令。
在確定所述主服務(wù)器完成日志更新操作時(shí),可以向所述主服務(wù)器發(fā)送數(shù)據(jù)存儲指令,所述主服務(wù)器可以接收所述數(shù)據(jù)存儲指令,并根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行待更新數(shù)據(jù)的存儲操作。
此時(shí),可以進(jìn)一步確定所述至少兩臺從服務(wù)器是否完成所述日志更新操作,如果至少一臺從服務(wù)器完成所述日志更新操作,那么,可以選擇其中一臺從服務(wù)器作為第一從服務(wù)器,并向所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令。
針對第二種情形,分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,包括:
在確定所述主服務(wù)器且所述至少兩臺從服務(wù)器中至少一臺從服務(wù)器完成所述日志更新操作時(shí),分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令。
在確定所述主服務(wù)器完成所述日志更新操作,且確定所述至少兩臺從服務(wù)器中的至少一臺從服務(wù)器完成所述日志更新操作時(shí),可以選擇其中一臺從服務(wù)器作為第一從服務(wù)器,并分別向所述主服務(wù)器以及所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令。
需要說明的是,針對上述記載的兩種情形,在選擇所述至少兩臺從服務(wù)器中的其中一臺從服務(wù)器作為第一從服務(wù)器時(shí),可以在接收到所述日志更新操作指令的從服務(wù)器中隨機(jī)選擇一臺從服務(wù)器作為第一從服務(wù)器,也可以根據(jù)實(shí)際情況選擇其中一臺從服務(wù)器作為第一從服務(wù)器,不做具體限定。
分布式數(shù)據(jù)存儲系統(tǒng)分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令后,所述主服務(wù)器以及所述第一從服務(wù)器可以接收所述數(shù)據(jù)存儲指令,并根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行待更新數(shù)據(jù)的存儲操作。
在實(shí)際應(yīng)用中,可以預(yù)先確定分布式數(shù)據(jù)存儲系統(tǒng)中哪些從服務(wù)器不執(zhí)行對待更新數(shù)據(jù)的存儲操作,這樣,分布式數(shù)據(jù)存儲系統(tǒng)在接收到數(shù)據(jù)更新請求時(shí),可以不向確定的這些從服務(wù)器發(fā)送數(shù)據(jù)存儲指令。
可選地,所述方法還包括:
確定所述至少兩臺從服務(wù)器中的第二從服務(wù)器,并在確定所述第二從服務(wù)器完成所述日志更新操作時(shí),向所述第二從服務(wù)器發(fā)送空操作指令,所述空操作指令用于指示所述第二從服務(wù)器執(zhí)行空操作。
在本申請實(shí)施例中,在發(fā)送所述日志更新指令時(shí),可以分別向所述至少兩臺從服務(wù)器發(fā)送,但是,在確定所述日志更新操作完成時(shí),僅向所述至少兩臺從服務(wù)器中的其中一臺從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,因此,可以在所述至少兩臺從服務(wù)器中確定其中一個(gè)第二從服務(wù)器,并在確定所述第二從服務(wù)器完成所述日志更新操作時(shí),向所述第二從服務(wù)器發(fā)送空操作指令,使所述第二從服務(wù)器執(zhí)行空操作,也就是說,所述第二從服務(wù)器不對待更新數(shù)據(jù)進(jìn)行存儲,這樣,可以減少待更新數(shù)據(jù)存儲的數(shù)據(jù)副本。
需要說明的是,所述第二從服務(wù)器中的“第二”與上述記載的所述第一從服務(wù)器中的“第一”,只是為了便于區(qū)分不同的從服務(wù)器,沒有其他特殊含義。
本申請實(shí)施例在確定所述第二從服務(wù)器時(shí),可以是在確定所述主服務(wù)器時(shí)確定所述第二從服務(wù)器,也可以是在發(fā)送所述日志更新指令時(shí)確定所述第二從服務(wù)器,還可以是在發(fā)送所述數(shù)據(jù)存儲指令時(shí)確定所述第二從服務(wù)器,不做具體限定。
這樣,所述至少兩臺從服務(wù)器中可以包含一臺所述第一從服務(wù)器和至少一臺所述第二從服務(wù)器,例如,如果所述分布式數(shù)據(jù)存儲系統(tǒng)包含兩臺從服務(wù)器,那么,第一從服務(wù)器的臺數(shù)為一臺,第二從服務(wù)器的臺數(shù)為一臺;如果所述分布式數(shù)據(jù)存儲系統(tǒng)包含三臺從服務(wù)器,那么,第一從服務(wù)器的臺數(shù)為一臺,第二從服務(wù)器的臺數(shù)為兩臺。
分布式數(shù)據(jù)存儲系統(tǒng)在發(fā)送所述數(shù)據(jù)存儲指令時(shí),僅向所述主服務(wù)器以及所述第一從服務(wù)器發(fā)送所述數(shù)據(jù)存儲指令,這樣,所述主服務(wù)器以及所述第一從服務(wù)器對待更新數(shù)據(jù)進(jìn)行存儲,所述第二從服務(wù)器不對待更新數(shù)據(jù)進(jìn)行存儲,可以減少數(shù)據(jù)存儲時(shí)消耗的資源。
除此之外,在本申請實(shí)施例中,所述分布式數(shù)據(jù)存儲系統(tǒng)中任何一個(gè)服務(wù)器(主服務(wù)器或從服務(wù)器)出現(xiàn)故障時(shí),分布式數(shù)據(jù)存儲系統(tǒng)都可以在保證主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的一致性的前提下,對外提供數(shù)據(jù)讀寫服務(wù)。
具體地,在所述分布式數(shù)據(jù)存儲系統(tǒng)中,至少存在以下幾種故障情形:
第一種故障情形:所述主服務(wù)器出現(xiàn)故障;
第二種故障情形:所述第一從服務(wù)器出現(xiàn)故障;
第三種故障情形:所述第二從服務(wù)器出現(xiàn)故障。
下面分別針對上述三種故障情形,說明所述分布式數(shù)據(jù)存儲系統(tǒng)如何在保證數(shù)據(jù)一致性的前提下,實(shí)現(xiàn)對外提供數(shù)據(jù)服務(wù)。
針對第一種故障情形以及第二種故障情形:
在確定所述主服務(wù)器或所述第一從服務(wù)器出現(xiàn)故障時(shí),確定第三從服務(wù)器,并向所述第三從服務(wù)器發(fā)送數(shù)據(jù)同步指令,使所述第三從服務(wù)器根據(jù)所述數(shù)據(jù)同步指令完成與未出現(xiàn)故障且存儲有數(shù)據(jù)的服務(wù)器之間的數(shù)據(jù)同步。
具體地,針對第一種故障情形:
在確定所述主服務(wù)器出現(xiàn)故障時(shí),由于所述第一從服務(wù)器中存儲有數(shù)據(jù),因此,可以由所述第一從服務(wù)器作為新的主服務(wù)器,并由所述第一從服務(wù)器對外提供數(shù)據(jù)讀寫服務(wù),此時(shí),如果所述第一從服務(wù)器中的數(shù)據(jù)相比于所述主服務(wù)器而言,存在數(shù)據(jù)丟失的現(xiàn)象,那么,可以通過所述第一從服務(wù)器和/或所述第二從服務(wù)器存儲的日志,恢復(fù)丟失的數(shù)據(jù)。
此外,還需要對所述第一從服務(wù)器中存儲的數(shù)據(jù)進(jìn)行備份,因此,需要確定一臺第三從服務(wù)器,并對所述第一從服務(wù)器中存儲的數(shù)據(jù)進(jìn)行備份。
在確定所述第三從服務(wù)器時(shí),可以從所述至少兩臺從服務(wù)器中包含的其他從服務(wù)器中選擇一臺從服務(wù)器作為所述第三從服務(wù)器,也可以確定一臺新的服務(wù)器作為所述第三從服務(wù)器,不做具體限定。
在確定所述第三服務(wù)器后,可以向所述第三服務(wù)器發(fā)送數(shù)據(jù)同步指令,使所述第三從服務(wù)器根據(jù)所述數(shù)據(jù)同步指令完成與未出現(xiàn)故障且存儲有數(shù)據(jù)的服務(wù)器之間的數(shù)據(jù)同步,這里的未出現(xiàn)故障且存儲有數(shù)據(jù)的服務(wù)器可以是所述第一從服務(wù)器,所述第三從服務(wù)器完成與所述第一從服務(wù)器之間的數(shù)據(jù)同步。
需要說明的是,所述第三從服務(wù)器中的“第三”是為了便于與所述第一從服務(wù)器以及所述第二從服務(wù)器進(jìn)行區(qū)分,沒有其他特殊含義。
可選地,為了保證在分布式一致性協(xié)議下,所述第一從服務(wù)器、所述第二從服務(wù)器以及所述第三從服務(wù)器之間日志的一致性,還可以向所述第三從服務(wù)器發(fā)送日志同步指令,使所述第三從服務(wù)器根據(jù)所述第一從服務(wù)器中存儲的日志,執(zhí)行日志同步操作。
針對第二種故障情形:
在確定所述第一從服務(wù)器出現(xiàn)故障時(shí),所述主服務(wù)器仍然可以對外提供數(shù)據(jù)服務(wù),但是,由于所述第一從服務(wù)器出現(xiàn)故障,因此,需要確定新的從服務(wù)器,并對所述主服務(wù)器中存儲的數(shù)據(jù)進(jìn)行備份。
確定所述新的從服務(wù)器的方法與上述記載的確定所述第三從服務(wù)器的方法相同,這里不做重復(fù)描述。
在確定所述新的服務(wù)器后,可以向所述新的從服務(wù)器發(fā)送數(shù)據(jù)同步指令,使所述新的從服務(wù)器根據(jù)所述數(shù)據(jù)同步指令完成與未出現(xiàn)故障且存儲有數(shù)據(jù)的服務(wù)器之間的數(shù)據(jù)同步,這里的未出現(xiàn)故障且存儲有數(shù)據(jù)的服務(wù)器可以是所述主服務(wù)器,所述新的從服務(wù)器完成與所述主服務(wù)器之間的數(shù)據(jù)同步。
可選地,為了保證在分布式一致性協(xié)議下,所述主服務(wù)器、所述第二從服務(wù)器以及所述新的從服務(wù)器之間日志的一致性,還可以向所述新的從服務(wù)器發(fā)送日志同步指令,使所述新的從服務(wù)器根據(jù)所述主服務(wù)器中存儲的日志,執(zhí)行日志同步操作。
針對第三種故障情形:
在確定所述第二從服務(wù)器出現(xiàn)故障時(shí),確定第四從服務(wù)器,并向所述第四從服務(wù)器發(fā)送日志同步指令,使所述第四從服務(wù)器根據(jù)所述日志同步指令完成與未出現(xiàn)故障的服務(wù)器之間的日志同步。
具體地,在確定所述第二從服務(wù)器出現(xiàn)故障時(shí),所述主服務(wù)器仍然可以對外提供數(shù)據(jù)讀寫服務(wù),所述第一從服務(wù)器可以對所述主服務(wù)器中存儲的數(shù)據(jù)進(jìn)行備份。但是,此時(shí),為了保證在分布式一致性協(xié)議下,所述主服務(wù)器、所述第一從服務(wù)器之間日志的一致性,需要重新確定第四從服務(wù)器。
確定所述第四從服務(wù)器的方法與上述記載的確定所述第三從服務(wù)器的方法相同,這里不做重復(fù)描述。
在確定所述第四服務(wù)器之后,可以向所述第四從服務(wù)器發(fā)送日志同步指令,使所述第四服務(wù)器在接收到所述日志同步指令后,根據(jù)所述日志同步指令完成與未出現(xiàn)故障的服務(wù)器之間的日志同步。
這里的未出現(xiàn)故障的服務(wù)器可以是除所述第二服務(wù)器以外的其他服務(wù)器,可以是所述主服務(wù)器,也可以是所述第一從服務(wù)器,還可以是其他完成日志更新操作的服務(wù)器,不作具體限定。
所述第四從服務(wù)器中的“第四”是為了便于與所述第一從服務(wù)器、所述第二從服務(wù)器以及所述第三從服務(wù)器進(jìn)行區(qū)分,沒有其他特殊含義。
需要說明的是,由于所述第二從服務(wù)器中沒有存儲數(shù)據(jù),因此,在確定所述第四從服務(wù)器之后,不需要向所述第四從服務(wù)器發(fā)送數(shù)據(jù)同步指令。
本申請實(shí)施例提供的技術(shù)方案,在接收到數(shù)據(jù)更新請求時(shí),可以分別向主服務(wù)器以及從服務(wù)器發(fā)送日志更新指令,使主服務(wù)器以及從服務(wù)器執(zhí)行日志更新操作,并在確定日志更新操作完成時(shí),向主服務(wù)器以及其中一個(gè)從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,這樣,在從服務(wù)器中的數(shù)據(jù)丟失時(shí),可以通過主服務(wù)器與從服務(wù)器預(yù)先存儲的日志恢復(fù)丟失的數(shù)據(jù),保證主服務(wù)器與從服務(wù)器之間數(shù)據(jù)的一致性,并且,針對待更新數(shù)據(jù),只有主服務(wù)器以及其中一個(gè)從服務(wù)器對其進(jìn)行存儲,可以有效減少數(shù)據(jù)存儲消耗的資源。
實(shí)施例2
圖2為本申請實(shí)施例提供的一種數(shù)據(jù)處理方法的流程示意圖。所述方法如下所述。本申請實(shí)施例的執(zhí)行主體可以是基于一致性協(xié)議的分布式數(shù)據(jù)存儲系統(tǒng)中的主服務(wù)器。
步驟201:所述主服務(wù)器接收用戶發(fā)送的數(shù)據(jù)更新請求。
其中,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù)。
在步驟201中,用戶在發(fā)起業(yè)務(wù)請求,并接收到響應(yīng)消息后,可以向分布式數(shù)據(jù)存儲系統(tǒng)中的主服務(wù)器發(fā)送數(shù)據(jù)更新請求,此時(shí),分布式數(shù)據(jù)存儲系統(tǒng)中的主服務(wù)器可以接收用戶發(fā)送的數(shù)據(jù)更新請求。
在本申請實(shí)施例中,所述主服務(wù)器是在所述分布式數(shù)據(jù)存儲系統(tǒng)中的存儲的數(shù)據(jù)為空時(shí),確定得到的,確定所述主服務(wù)器的方法和上述實(shí)施例1中記載的方法相同,這里不再重復(fù)描述。
步驟202:所述主服務(wù)器根據(jù)所述數(shù)據(jù)更新請求,啟動日志更新操作,并向所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作。
在步驟202中,主服務(wù)器在接收到用戶發(fā)送的數(shù)據(jù)更新請求時(shí),可以啟動日志更新操作,并根據(jù)所述數(shù)據(jù)請求,向分布式數(shù)據(jù)存儲系統(tǒng)中的至少兩臺從服務(wù)器發(fā)送日志更新指令,以便于所述至少兩臺從服務(wù)器根據(jù)日志更新指令執(zhí)行日志更新操作。
所述主服務(wù)器在接收到所述數(shù)據(jù)更新請求時(shí),可以根據(jù)所述數(shù)據(jù)更新請求,啟動日志更新操作,再根據(jù)所述數(shù)據(jù)更新請求,向所述至少兩臺從服務(wù)器發(fā)送日志更新指令,也可以是在接收到所述數(shù)據(jù)更新請求時(shí),根據(jù)所述數(shù)據(jù)更新請求,向所述至少兩臺從服務(wù)器發(fā)送日志更新指令,再根據(jù)所述數(shù)據(jù)更新請求,啟動日志更新操作,不做具體限定。
所述主服務(wù)器向所述至少兩臺從服務(wù)器發(fā)送所述日志更新指令后,所述至少兩臺從服務(wù)器可以接收所述日志更新指令,并根據(jù)所述日志更新指令執(zhí)行日志更新操作。
步驟203:所述主服務(wù)器在確定所述日志更新操作完成時(shí),啟動數(shù)據(jù)存儲操作,并向所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
在步驟203中,主服務(wù)器在確定日志更新操作完成時(shí),可以啟動數(shù)據(jù)存儲操作,并選擇所述至少兩臺從服務(wù)器中的其中一臺從服務(wù)器作為第一從服務(wù)器,并向所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,以便于所述主服務(wù)器以及所述第一從服務(wù)器對所述待更新數(shù)據(jù)進(jìn)行存儲。
所述主服務(wù)器至少在以下兩種情形下,可以確定所述日志更新操作完成,包括:
第一種情形:在確定所述主服務(wù)器完成所述日志更新操作時(shí),確定所述日志更新操作完成;
第二種情形:在確定所述主服務(wù)器完成所述日志更新操作以及所述至少兩臺從服務(wù)器中至少一臺從服務(wù)器完成所述日志更新操作時(shí),確定所述日志更新操作完成。
所述主服務(wù)器在確定所述日志更新操作完成后,可以啟動數(shù)據(jù)存儲操作,以便于所述主服務(wù)器對外提供數(shù)據(jù)讀寫服務(wù),此時(shí),所述主服務(wù)器還可以選擇所述至少兩臺從服務(wù)器中的其中一臺從服務(wù)器作為第一從服務(wù)器,并向所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行待更新數(shù)據(jù)的數(shù)據(jù)存儲操作。
其中,所述主服務(wù)器可以在發(fā)送所述數(shù)據(jù)存儲之前,啟動數(shù)據(jù)存儲操作,也可以在發(fā)送所述數(shù)據(jù)存儲指令之后,啟動數(shù)據(jù)存儲操作,不做具體限定。
這樣,所述主服務(wù)器在接收到數(shù)據(jù)更新請求后,可以向所述第一從服務(wù)器以及所述第二從服務(wù)器發(fā)送日志更新指令,并在確定日志更新操作完成時(shí),執(zhí)行數(shù)據(jù)存儲操作,并向所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,這樣,在所述第一從服務(wù)器中的數(shù)據(jù)丟失時(shí),可以根據(jù)所述主服務(wù)器和/或所述第一從服務(wù)器和/或所述第二從服務(wù)器預(yù)先存儲的日志,恢復(fù)丟失的數(shù)據(jù),保證所述主服務(wù)器與所述第一從服務(wù)器之間數(shù)據(jù)的一致性,并且,針對待更新數(shù)據(jù),只有主服務(wù)器以及所述第一從服務(wù)器對其進(jìn)行存儲,可以減少數(shù)據(jù)存儲時(shí)消耗的資源。
實(shí)施例3
下面以分布式數(shù)據(jù)存儲系統(tǒng)中包含三臺服務(wù)器(一臺主服務(wù)器,兩臺從服務(wù)器)為例,對本申請實(shí)施例提供的技術(shù)方案進(jìn)行說明,本申請實(shí)施例的執(zhí)行主體可以是主服務(wù)器。
第一步:確定分布式數(shù)據(jù)存儲系統(tǒng)中的主服務(wù)器、第一從服務(wù)器以及第二從服務(wù)器。
在分布式數(shù)據(jù)存儲系統(tǒng)中存儲的數(shù)據(jù)為空時(shí),可以確定分布式數(shù)據(jù)存儲系統(tǒng)中的主服務(wù)器以及兩個(gè)從服務(wù)器,為了便于區(qū)分,可以將兩個(gè)從服務(wù)器分別稱為第一從服務(wù)器以及第二從服務(wù)器。
在本申請實(shí)施例中,所述主服務(wù)器可以對待更新數(shù)據(jù)進(jìn)行存儲,并對外提供數(shù)據(jù)讀寫服務(wù),所述第一從服務(wù)器可以對待更新數(shù)據(jù)進(jìn)行存儲,所述第二從服務(wù)器不對待更新數(shù)據(jù)進(jìn)行存儲。
在本申請實(shí)施例中,對確定所述主服務(wù)器、所述第一從服務(wù)器以及所述第二從服務(wù)器的先后順序不做具體限定。
下面以確定所述第二從服務(wù)器、所述主服務(wù)器以及所述第一從服務(wù)器的先后順序?yàn)槔M(jìn)行說明。
首先:確定第二從服務(wù)器。
在確定所述第二從服務(wù)器時(shí),可以基于分布式一致性協(xié)議—paxos協(xié)議,由分布式數(shù)據(jù)存儲系統(tǒng)中包含的三臺服務(wù)器通過選舉的方式確定得到。
在確定所述第二從服務(wù)器時(shí),還可以隨機(jī)選擇其中一臺服務(wù)器作為所述第二從服務(wù)器,或者按照實(shí)際情況確定所述第二從服務(wù)器,這里對確定所述第二從服務(wù)器的方法不做具體限定。
其次:確定主服務(wù)器。
在確定所述第二從服務(wù)器后,可以基于分布式一致性協(xié)議—paxos協(xié)議,由所述第二從服務(wù)器以及分布式數(shù)據(jù)存儲系統(tǒng)中其余兩臺服務(wù)器,通過選舉的方式確定得到。
需要說明的是,在通過選舉的方式確定所述主服務(wù)器時(shí),所述第二從服務(wù)器不可以選舉自己為主服務(wù)器,其他兩臺服務(wù)器也不可以選舉所述第二從服務(wù)器作為主服務(wù)器。
如圖3所示,為本申請實(shí)施例提供的確定主服務(wù)器的流程示意圖。
從圖3中可以看出,通過選舉的方式確定所述第二從服務(wù)器C之后,可以由服務(wù)器A、服務(wù)器B以及第二從服務(wù)器C通過選舉的方式確定主服務(wù)器,其中,服務(wù)器A可以選舉自己以及服務(wù)器B為主服務(wù)器,不能選舉第二從服務(wù)器C為主服務(wù)器,服務(wù)器B可以選舉自己以及服務(wù)器A為主服務(wù)器,不能選舉第二從服務(wù)器C為主服務(wù)器,第二服務(wù)器C不能選舉自己為主服務(wù)器,可以選舉服務(wù)器A以及服務(wù)器B為主服務(wù)器。
在確定所述主服務(wù)器時(shí),還可以在除所述第二從服務(wù)器之外的其他兩臺服務(wù)器中隨機(jī)選擇其中一臺作為主服務(wù)器,也可以根據(jù)實(shí)際需要選擇其中一臺服務(wù)器作為主服務(wù)器,不做具體限定。
最后:確定第一從服務(wù)器。
在所述分布式數(shù)據(jù)存儲系統(tǒng)中包含的三個(gè)服務(wù)器中,在確定所述第二從服務(wù)器以及所述主服務(wù)器之后,可以將剩余的一臺服務(wù)器作為第一從服務(wù)器。
第二步:所述主服務(wù)器接收用戶發(fā)送的數(shù)據(jù)更新請求。
所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù)。
第三步:所述主服務(wù)器向所述第一從服務(wù)器以及所述第二從服務(wù)器發(fā)送日志更新指令,使所述第一從服務(wù)器以及所述第二從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作。
所述主服務(wù)器在向所述第一從服務(wù)器以及所述第二從服務(wù)器發(fā)送日志更新指令后,所述第一從服務(wù)器以及所述第二從服務(wù)器可以接收所述日志更新指令,此時(shí),所述主服務(wù)器、所述第一從服務(wù)器以及所述第二從服務(wù)器可以基于分布式一致性協(xié)議—paxos協(xié)議執(zhí)行日志更新,并在確定所述主服務(wù)器且所述第一從服務(wù)器和所述第二從服務(wù)器中至少一個(gè)服務(wù)器完成日志更新操作時(shí),確定所述日志更新操作完成。
第四步:所述主服務(wù)向所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲操作,使所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行待更新數(shù)據(jù)的存儲操作。
在確定所述日志更新操作完成時(shí),所述主服務(wù)器可以執(zhí)行待更新數(shù)據(jù)的存儲操作,并向所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,所述第一從服務(wù)器可以接收所述數(shù)據(jù)存儲指令,此時(shí),如果所述第一從服務(wù)器已完成日志更新操作,那么,所述第一從服務(wù)器可以根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行待更新數(shù)據(jù)的存儲操作,如果所述第一從服務(wù)器未完成日志更新操作,那么,所述第一從服務(wù)器需要繼續(xù)執(zhí)行日志更新操作,并在完成日志更新操作時(shí),可以根據(jù)接收到的所述數(shù)據(jù)存儲指令執(zhí)行待更新數(shù)據(jù)的存儲操作。
這樣,主服務(wù)器在接收到數(shù)據(jù)更新請求時(shí),可以向第一從服務(wù)器以及第二從服務(wù)器發(fā)送日志更新指令,并在確定日志更新操作完成時(shí),執(zhí)行數(shù)據(jù)存儲操作,并向所述第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,這樣,針對待更新數(shù)據(jù),只有所述主服務(wù)器以及所述第一從服務(wù)器對其進(jìn)行存儲,可以減少數(shù)據(jù)存儲時(shí)消耗的資源。
在本申請實(shí)施例中,在所述主服務(wù)器、所述第一從服務(wù)器以及所述第二從服務(wù)器中任一個(gè)服務(wù)器出現(xiàn)故障時(shí),分布式數(shù)據(jù)存儲系統(tǒng)都可以在保證數(shù)據(jù)一致性的前提下,實(shí)現(xiàn)對外提供數(shù)據(jù)讀寫服務(wù)。
具體地,在所述主服務(wù)器出現(xiàn)故障時(shí):
如圖4所示,在主服務(wù)器出現(xiàn)故障時(shí),主服務(wù)器不能繼續(xù)對用戶提供讀寫服務(wù),此時(shí),可以確定第一從服務(wù)器B作為新的主服務(wù)器,并確定服務(wù)器D作為新的第一從服務(wù)器,第一從服務(wù)器B可以對用戶(Client)提供數(shù)據(jù)讀寫服務(wù),并保持與第二從服務(wù)器C之間的日志同步,服務(wù)器D從第一從服務(wù)器B復(fù)制數(shù)據(jù)副本,完成與第一從服務(wù)器B之間的數(shù)據(jù)同步,并執(zhí)行日志同步操作,完成與第一從服務(wù)器B之間的日志同步。
在所述第一從服務(wù)器出現(xiàn)故障時(shí):
如圖5所示,在第一從服務(wù)器出現(xiàn)故障時(shí),主服務(wù)器A可以繼續(xù)對用戶(Client)提供數(shù)據(jù)讀寫服務(wù),此時(shí),可以確定服務(wù)器E作為新的第一從服務(wù)器,服務(wù)器E從主服務(wù)器A復(fù)制數(shù)據(jù)副本,完成與主服務(wù)器A之間的數(shù)據(jù)同步,并執(zhí)行日志同步操作,完成與主服務(wù)器A之間的日志同步。
在所述第二從服務(wù)器出現(xiàn)故障時(shí):
如圖6所示,在第二從服務(wù)器出現(xiàn)故障時(shí),主服務(wù)器A可以繼續(xù)對用戶提供數(shù)據(jù)讀寫服務(wù),此時(shí),可以確定服務(wù)器F作為新的第二從服務(wù)器,服務(wù)器F執(zhí)行日志同步操作,并完成與主服務(wù)器A之間的日志同步。
在實(shí)際應(yīng)用中,會存在異地多活的分布式數(shù)據(jù)存儲系統(tǒng),也就是說,針對同一份數(shù)據(jù)而言,在本地存儲數(shù)據(jù)副本之外,還需要在異地存儲數(shù)據(jù)副本,以加強(qiáng)分布式數(shù)據(jù)存儲系統(tǒng)的穩(wěn)定性。針對異地多活的分布式數(shù)據(jù)存儲系統(tǒng),為了減少數(shù)據(jù)存儲時(shí)消耗的資源,可以在本地使用至少三臺服務(wù)器,其中的主服務(wù)器存儲待更新數(shù)據(jù),其余從服務(wù)器只存儲日志(即只執(zhí)行日志更新操作),在異地使用至少三臺服務(wù)器,其中的主服務(wù)器對本地中的主服務(wù)器中的數(shù)據(jù)存儲數(shù)據(jù)副本,其余從服務(wù)器只存儲日志(即只執(zhí)行日志更新操作)。
如圖7所示,在本地機(jī)房,可以使用三臺服務(wù)器A、B、C,其中服務(wù)器A為主服務(wù)器,對待更新數(shù)據(jù)進(jìn)行存儲,服務(wù)器B以及服務(wù)器C為從服務(wù)器僅執(zhí)行日志更新操作,不對待更新數(shù)據(jù)進(jìn)行存儲。在異地機(jī)房,可以使用服務(wù)器D、E、F,其中,服務(wù)器D為主服務(wù)器,對本地機(jī)房中服務(wù)器A中存儲的數(shù)據(jù)存儲數(shù)據(jù)副本,服務(wù)器E以及服務(wù)器F僅執(zhí)行日志更新操作,不對待更新數(shù)據(jù)進(jìn)行存儲。
在服務(wù)器A出現(xiàn)故障時(shí),可以由服務(wù)器D對外提供數(shù)據(jù)讀寫服務(wù)。
在服務(wù)器D出現(xiàn)故障時(shí),服務(wù)器A仍然可以繼續(xù)對外提供數(shù)據(jù)讀寫服務(wù),此時(shí),需要在異地機(jī)房中確定新的主服務(wù)器,新的主服務(wù)器可以完成與服務(wù)器A之間的數(shù)據(jù)同步以及日志同步。
在服務(wù)器B、服務(wù)器C、服務(wù)器E以及服務(wù)器F中任一個(gè)服務(wù)器出現(xiàn)故障時(shí),服務(wù)器A仍然可以繼續(xù)對外提供讀寫服務(wù)。
圖8為本申請實(shí)施例提供的一種數(shù)據(jù)處理設(shè)備的結(jié)構(gòu)示意圖。所述設(shè)備應(yīng)用于分布式數(shù)據(jù)存儲系統(tǒng),所述分布式數(shù)據(jù)存儲系統(tǒng)中包含主服務(wù)器以及至少兩臺從服務(wù)器,所述設(shè)備包括:接收單元81、發(fā)送單元82以及確定單元83,其中:
接收單元81,接收用戶發(fā)送的數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù);
發(fā)送單元82,根據(jù)所述數(shù)據(jù)更新請求,分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述主服務(wù)器以及所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作;
所述發(fā)送單元82,在確定所述日志更新操作完成時(shí),分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述主服務(wù)器以及所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
具體地,所述發(fā)送單元82確定所述日志更新操作完成,包括:
在確定所述主服務(wù)器完成所述日志更新操作時(shí),確定所述日志更新操作完成;
或,
在確定所述主服務(wù)器且所述至少兩臺從服務(wù)器中至少一臺從服務(wù)器完成所述日志更新操作時(shí),確定所述日志更新操作完成。
所述發(fā)送單元82分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,包括:
在確定所述主服務(wù)器完成所述日志更新操作時(shí),向所述主服務(wù)器發(fā)送數(shù)據(jù)存儲指令,并在向所述主服務(wù)器發(fā)送數(shù)據(jù)存儲指令后且確定所述至少兩臺從服務(wù)器中的至少一臺服務(wù)器完成所述日志更新操作時(shí),向所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令;
或,
在確定所述主服務(wù)器且所述至少兩臺從服務(wù)器中至少一臺從服務(wù)器完成所述日志更新操作時(shí),分別向所述主服務(wù)器以及所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令。
可選地,所述數(shù)據(jù)處理設(shè)備還包括:確定單元83,其中:
所述確定單元83,確定所述至少兩臺從服務(wù)器中的第二從服務(wù)器,并在確定所述第二從服務(wù)器完成所述日志更新操作完成時(shí),向所述第二從服務(wù)器發(fā)送空操作指令,所述空操作指令用于指示所述第二從服務(wù)器執(zhí)行空操作。
可選地,所述確定單元83,在確定所述主服務(wù)器或所述第一從服務(wù)器出現(xiàn)故障時(shí),確定第三從服務(wù)器,并向所述第三從服務(wù)器發(fā)送數(shù)據(jù)同步指令,使所述第三從服務(wù)器根據(jù)所述數(shù)據(jù)同步指令完成與未出現(xiàn)故障且存儲有數(shù)據(jù)的服務(wù)器之間的數(shù)據(jù)同步。
可選地,所述確定單元83,在確定所述第二從服務(wù)器出現(xiàn)故障時(shí),確定第四從服務(wù)器,并向所述第四從服務(wù)器發(fā)送日志同步指令,使所述第四從服務(wù)器根據(jù)所述日志同步指令完成與未出現(xiàn)故障的服務(wù)器之間的日志同步。
圖9為本申請實(shí)施例提供的一種數(shù)據(jù)處理設(shè)備的結(jié)構(gòu)示意圖。所述設(shè)備應(yīng)用于分布式數(shù)據(jù)存儲系統(tǒng),所述分布式數(shù)據(jù)存儲系統(tǒng)中包含主服務(wù)器以及至少兩臺從服務(wù)器,所述設(shè)備包括:接收單元91和發(fā)送單元92,其中:
接收單元91,接收用戶發(fā)送的數(shù)據(jù)更新請求,所述數(shù)據(jù)更新請求中包含待更新數(shù)據(jù);
發(fā)送單元92,根據(jù)所述數(shù)據(jù)更新請求,啟動日志更新操作,并向所述至少兩臺從服務(wù)器發(fā)送日志更新指令,使所述至少兩臺從服務(wù)器根據(jù)所述日志更新指令執(zhí)行日志更新操作;
所述發(fā)送單元92,在確定所述日志更新操作完成時(shí),啟動數(shù)據(jù)存儲操作,并向所述至少兩臺從服務(wù)器中的第一從服務(wù)器發(fā)送數(shù)據(jù)存儲指令,使所述第一從服務(wù)器根據(jù)所述數(shù)據(jù)存儲指令執(zhí)行對所述待更新數(shù)據(jù)的存儲操作。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲器(SRAM)、動態(tài)隨機(jī)存取存儲器(DRAM)、其他類型的隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。
本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
以上所述僅為本申請的實(shí)施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。