本發(fā)明涉及數(shù)據(jù)處理技術,特別涉及數(shù)據(jù)管理方法、設備和系統(tǒng)。
背景技術:
目前,基于openstack的開源云計算平臺得到了廣泛應用,其中使用的是傳統(tǒng)的mysql開源數(shù)據(jù)庫,采用無中心數(shù)據(jù)(元信息)管理方式,穩(wěn)定性和可擴展性均較差。
技術實現(xiàn)要素:
本發(fā)明提供了數(shù)據(jù)管理方法、設備和系統(tǒng),能夠提高系統(tǒng)的穩(wěn)定性和可擴展性。
具體技術方案如下:
一種數(shù)據(jù)管理方法,包括:
主設備獲取更新信息,以Log的方式寫入網(wǎng)絡文件系統(tǒng)NFS,以便在寫入成功后,從設備通過tail日志的方式,根據(jù)所述更新信息更新本地內(nèi)存;
寫入成功,所述主設備根據(jù)所述更新信息更新本地內(nèi)存。
根據(jù)本發(fā)明一優(yōu)選實施例,該方法進一步包括:
當所述主設備出現(xiàn)故障時,執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到本地硬盤;
當checkpoint完成之后,執(zhí)行主從切換。
根據(jù)本發(fā)明一優(yōu)選實施例,所述NFS中的數(shù)據(jù)為進行序列化處理后的數(shù)據(jù);
所述更新信息的數(shù)據(jù)存儲格式包括:每個表中依次包括uid字段、方法名字段和參數(shù)列表字段,所述參數(shù)列表字段中進一步包括至少一個參數(shù)子字段,每個參數(shù)子字段中分別存儲有對應參數(shù)的取值。
根據(jù)本發(fā)明一優(yōu)選實施例,所述更新本地內(nèi)存包括:利用內(nèi)存表的管理接口類Manager,對需要更新的表進行更新。
一種數(shù)據(jù)管理方法,包括:
當主設備獲取更新信息,以Log的方式寫入網(wǎng)絡文件系統(tǒng)NFS之后,從設備通過tail日志的方式,根據(jù)所述更新信息更新本地內(nèi)存。
根據(jù)本發(fā)明一優(yōu)選實施例,該方法進一步包括:
所述從設備周期性地執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到所述NFS中;
并且,當所述從設備出現(xiàn)故障時,在進程退出之前,執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到所述NFS中。
根據(jù)本發(fā)明一優(yōu)選實施例,所述NFS中的數(shù)據(jù)為進行序列化處理后的數(shù)據(jù);
其中,內(nèi)存數(shù)據(jù)快照的數(shù)據(jù)存儲格式包括:每個表中依次包括表名字段和數(shù)據(jù)數(shù)據(jù),所述數(shù)據(jù)字段中進一步包括至少一個item子字段,每個item子字段中分別采用key-value的形式對數(shù)據(jù)進行存儲;
所述更新信息的數(shù)據(jù)存儲格式包括:每個表中依次包括uid字段、方法名字段和參數(shù)列表字段,所述參數(shù)列表字段中進一步包括至少一個參數(shù)子字段,每個參數(shù)子字段中分別存儲有對應參數(shù)的取值。
根據(jù)本發(fā)明一優(yōu)選實施例,所述根據(jù)所述更新信息更新本地內(nèi)存包括:
所述從設備對獲取到的序列化后的更新信息進行反序列化,根據(jù)反序列化結(jié)果更新本地內(nèi)存。
一種主設備,包括:獲取單元和第一更新單元;
所述獲取單元,用于獲取更新信息,并發(fā)送給所述第一更新單元;
所述第一更新單元,用于將所述更新信息以Log的方式寫入網(wǎng)絡文件系統(tǒng)NFS,以便在寫入成功后,從設備通過tail日志的方式,根據(jù)所述更新信息更新本地內(nèi)存,并且,寫入成功后,所述第一更新單元根據(jù)所述更新信息更新本地內(nèi)存。
根據(jù)本發(fā)明一優(yōu)選實施例,所述主設備中進一步包括:第一備份單元;
所述第一備份單元,用于當所述主設備出現(xiàn)故障時,執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到本地硬盤,當checkpoint完成之后,執(zhí)行主從切換。
根據(jù)本發(fā)明一優(yōu)選實施例,所述NFS中的數(shù)據(jù)為進行序列化處理后的數(shù)據(jù);
所述更新信息的數(shù)據(jù)存儲格式包括:每個表中依次包括uid字段、方法名字段和參數(shù)列表字段,所述參數(shù)列表字段中進一步包括至少一個參數(shù)子字段,每個參數(shù)子字段中分別存儲有對應參數(shù)的取值。
根據(jù)本發(fā)明一優(yōu)選實施例,所述第一更新單元利用內(nèi)存表的管理接口類Manager,對本地內(nèi)存中需要更新的表進行更新。
一種從設備,包括:第二更新單元;
所述第二更新單元,用于當主設備獲取更新信息,以Log的方式寫入網(wǎng)絡文件系統(tǒng)NFS之后,通過tail日志的方式,根據(jù)所述更新信息更新本地內(nèi)存。
根據(jù)本發(fā)明一優(yōu)選實施例,所述從設備中進一步包括:第二備份單元;
所述第二備份單元,用于周期性地執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到所述NFS中;并且,當所述從設備出現(xiàn)故障時,在進程退出之前,執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到所述NFS中。
根據(jù)本發(fā)明一優(yōu)選實施例,所述NFS中的數(shù)據(jù)為進行序列化處理后的數(shù)據(jù);
其中,內(nèi)存數(shù)據(jù)快照的數(shù)據(jù)存儲格式包括:每個表中依次包括表名字段和數(shù)據(jù)數(shù)據(jù),所述數(shù)據(jù)字段中進一步包括至少一個item子字段,每個item子字段中分別采用key-value的形式對數(shù)據(jù)進行存儲;
所述更新信息的數(shù)據(jù)存儲格式包括:每個表中依次包括uid字段、方法名字段和參數(shù)列表字段,所述參數(shù)列表字段中進一步包括至少一個參數(shù)子字段,每個參數(shù)子字段中分別存儲有對應參數(shù)的取值。
根據(jù)本發(fā)明一優(yōu)選實施例,所述第二更新單元對獲取到的序列化后的更新信息進行反序列化,根據(jù)反序列化結(jié)果更新本地內(nèi)存。
一種數(shù)據(jù)管理系統(tǒng),包括:
如以上所述的主設備,以及,如以上所述的從設備。
基于上述介紹可以看出,采用本發(fā)明所述方案,采用主從方式來實現(xiàn)數(shù)據(jù)同步,底層文件系統(tǒng)采用NFS,從而相比于現(xiàn)有技術提高了系統(tǒng)的穩(wěn)定性和可擴展性,且文件存儲速度快,提升了數(shù)據(jù)處理效率等。
【附圖說明】
圖1為本發(fā)明所述數(shù)據(jù)管理方法實施例的流程圖。
圖2為本發(fā)明所述內(nèi)存數(shù)據(jù)快照的數(shù)據(jù)存儲格式示意圖。
圖3為本發(fā)明所述更新信息的數(shù)據(jù)存儲格式示意圖。
圖4為本發(fā)明所述主設備實施例的組成結(jié)構(gòu)示意圖。
圖5為本發(fā)明所述從設備實施例的組成結(jié)構(gòu)示意圖。
圖6為本發(fā)明所述數(shù)據(jù)管理系統(tǒng)實施例的組成結(jié)構(gòu)示意圖。
【具體實施方式】
針對現(xiàn)有技術中存在的問題,本發(fā)明中提出一種基于ds-common分布式網(wǎng)絡文件系統(tǒng)(NFS,Network File System)存儲架構(gòu)的內(nèi)存數(shù)據(jù)庫系統(tǒng)nova-master。
為了使本發(fā)明的技術方案更加清楚、明白,以下參照附圖并舉實施例,對本發(fā)明所述方案作進一步地詳細說明。
實施例一
圖1為本發(fā)明所述數(shù)據(jù)管理方法實施例的流程圖,如圖1所示,包括以下具體實現(xiàn)方式:
在11中,主設備獲取更新信息,以日志(Log)的方式寫入NFS;
在12中,寫入成功,主設備根據(jù)更新信息更新本地內(nèi)存,并且,從設備通過跟蹤(tail)日志的方式,根據(jù)更新信息更新本地內(nèi)存。
在實際應用中,主設備的個數(shù)通常為一個,從設備的個數(shù)可以為一個,也可以為多個。
以下對本實施例中涉及到的各部分內(nèi)容分別進行詳細說明。
1)選主
初始,各設備之間是對等的,并無主從之分,當nova-master系統(tǒng)啟動后,需要進行選主操作,即從各設備中選出一個作為主設備,其它的作為從設備。
各設備的啟動加載邏輯可包括:
RestoreMeta先恢復checkpoint的數(shù)據(jù),結(jié)束后調(diào)用OnLoadBaseFinished;
ApplyLog恢復checkpoint后的Log數(shù)據(jù),結(jié)束后調(diào)用OnLoadLogFinished,OnLoadFinished,啟動加載邏輯結(jié)束。
各設備之間可競爭指定的鎖的鑰匙,誰先拿到鑰匙,則為主設備,否則,為從設備。
if主設備:
啟動RpcServer,consumer消息;
else:#從設備
定期做checkpoint。
如果上述加載接口出現(xiàn)失敗,則報警,進程退出。
2)主設備
主設備啟動時,需要啟動本地的RpcServer,可通過RpcServer來獲取來自外部的更新信息等。
當獲取到更新信息后,主設備可將其以Log的方式寫入NFS,并在寫入成功后,更新(update)本地內(nèi)存。
如果主設備出現(xiàn)故障,可報警、資源回收、進程退出、觸發(fā)主從切換。
另外,在進行主從切換之前,主設備可執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到本地硬盤。
checkpoint完成之后,即可執(zhí)行主從切換,如前所述,主設備啟動時,需要啟動本地的RpcServer,那么相應地,當主設備Dead時,需要關閉本地的RpcServer。
3)從設備
主設備將更新信息以Log的方式寫入NFS,寫入成功后,從設備可通過tail日志的方式,更新本地內(nèi)存,實現(xiàn)與主設備之間的準實時的數(shù)據(jù)同步。
即從設備可從NFS中讀取Log,根據(jù)讀取到的信息更新本地內(nèi)存,涉及的接口可包括日志回放接口和讀錯誤回調(diào)接口等。
如果讀取失敗,且連續(xù)失敗次數(shù)達到N次,N為正整數(shù),通常大于1,則可認為從設備出現(xiàn)故障,執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到NFS中,之后報警、進程退出。
另外,當從設備處于正常狀態(tài)時,還需要定期執(zhí)行checkpoint,即周期性地執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到NFS中。
所述周期的具體時長以及N的具體取值均可根據(jù)實際需要而定。
當主設備出現(xiàn)故障時,從設備可迅速tail完日志并切換成主設備,并啟動本地的RpcServer等。
4)資源定位
可在上游配置nova-master系統(tǒng)的域名,主設備和從設備均可提供查詢主設備的信息如IP的功能,上游定時或在發(fā)送失敗時均可以去主設備或從設備上查詢主設備的信息。
5)checkpoint流程
本實施例中所述的checkpoint可稱為內(nèi)存全量數(shù)據(jù)的持久化,以從設備為例,其可在獲取到全局寫鎖即寫優(yōu)先的讀寫鎖后,fork出子進程完成當前內(nèi)存完整數(shù)據(jù)的快照,即獲取內(nèi)存數(shù)據(jù)快照,對于多線程進程fork后可僅復制當前線程到子進程,進而在子進程中遍歷內(nèi)存數(shù)據(jù)快照中的所有表(數(shù)據(jù)表),對表進行分片序列化和持久化。
初始階段即初始化過程,可由Manager在內(nèi)存中創(chuàng)建所需的表,再從NFS中逐條加載Metadata更新對應的表。
內(nèi)存表可分為兩級,Manager和Info,Manager為內(nèi)存表的管理接口類,可提供所有的內(nèi)存表訪問接口及索引結(jié)構(gòu),Info可對應到每個具體的表或者是多個表。
6)主從同步流程
本實施例中,可利用Manager,對需要更新的表進行更新,即內(nèi)存更新操作由Manager發(fā)起,可以是對Manager所維護的多個表的多個更新,所有需要一次完成的內(nèi)存更新均可封裝在一個更新行為內(nèi)完成,對這一更新行為進行序列化和持久化。
主設備的持久化阻塞在等待NFS寫入成功的事件,NFS寫入成功后將觸發(fā)applylog過程以標記該事件發(fā)生,之后繼續(xù)執(zhí)行實際的Manager更新行為。
NFS寫入成功后,也將觸發(fā)從設備執(zhí)行applylog過程,從設備對從NFS中獲取到的序列化后的更新信息進行反序列化,根據(jù)反序列化結(jié)果更新本地內(nèi)存,即進行反序列化后得到實際的Manager更新行為,并執(zhí)行更新,更新過程需要獲取全局讀鎖。
7)數(shù)據(jù)存儲格式
對于存儲到NFS中的數(shù)據(jù),可進行序列化處理,并針對不同類型的數(shù)據(jù),可分別采用不同的存儲格式。
比如,圖2為本發(fā)明所述內(nèi)存數(shù)據(jù)快照的數(shù)據(jù)存儲格式示意圖,如圖2所示,每個表中可依次包括表名字段和數(shù)據(jù)數(shù)據(jù),數(shù)據(jù)字段中可進一步包括至少一個項目(item)子字段,每個item子字段中可分別采用鍵值(key-value)的形式對數(shù)據(jù)進行存儲。
圖3為本發(fā)明所述更新信息(即主從同步數(shù)據(jù))的數(shù)據(jù)存儲格式示意圖,如圖3所示,每個表中可依次包括用戶標識(uid)字段、方法名字段和參數(shù)列表字段,參數(shù)列表字段中可進一步包括至少一個參數(shù)(param)子字段,每個參數(shù)子字段中可分別存儲有對應參數(shù)的取值(value)。
以上是關于本發(fā)明方法實施例的介紹,以下通過設備實施例,對本發(fā)明所述方案進行進一步說明。
實施例二
圖4為本發(fā)明所述主設備實施例的組成結(jié)構(gòu)示意圖,如圖4所示,包括:獲取單元41和第一更新單元42。
獲取單元41,用于獲取更新信息,并發(fā)送給第一更新單元42。
第一更新單元42,用于將更新信息以Log的方式寫入NFS,以便在寫入成功后,從設備通過tail日志的方式,根據(jù)更新信息更新本地內(nèi)存,并且,寫入成功后,第一更新單元42根據(jù)更新信息更新本地內(nèi)存。
主設備啟動時,獲取單元41可啟動本地的RpcServer,通過RpcServer來獲取來自外部的更新信息等。
當獲取到更新信息后,獲取單元41可將其發(fā)送給第一更新單元42,進而由第一更新單元42將更新信息以Log的方式寫入NFS,并在寫入成功后,更新本地內(nèi)存。
具體地,第一更新單元42可利用Manager,對本地內(nèi)存中需要更新的表進行更新,即內(nèi)存更新操作由Manager發(fā)起,可以是對Manager所維護的多個表的多個更新,所有需要一次完成的內(nèi)存更新均可封裝在一個更新行為內(nèi)完成。
另外,如圖4所示,主設備中還可進一步包括:第一備份單元43。
第一備份單元43,用于當主設備出現(xiàn)故障時,執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到本地硬盤,當checkpoint完成之后,執(zhí)行主從切換。
NFS中的數(shù)據(jù)可為進行序列化處理后的數(shù)據(jù)。
更新信息的數(shù)據(jù)存儲格式可包括:每個表中依次包括uid字段、方法名字段和參數(shù)列表字段,參數(shù)列表字段中進一步包括至少一個參數(shù)子字段,每個參數(shù)子字段中分別存儲有對應參數(shù)的取值。
實施例三
圖5為本發(fā)明所述從設備實施例的組成結(jié)構(gòu)示意圖,如圖5所示,包括:第二更新單元51。
第二更新單元51,用于當主設備獲取更新信息,以Log的方式寫入NFS之后,通過tail日志的方式,根據(jù)更新信息更新本地內(nèi)存。
主設備將更新信息以Log的方式寫入NFS,寫入成功后,從設備可通過tail日志的方式,更新本地內(nèi)存,實現(xiàn)與主設備之間的準實時的數(shù)據(jù)同步。
第二更新單元51可從NFS中讀取Log,根據(jù)讀取到的信息更新本地內(nèi)存。
另外,如圖5所示,從設備中還可進一步包括:第二備份單元52。
第二備份單元52,用于周期性地執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到NFS中;并且,當從設備出現(xiàn)故障時,在進程退出之前,執(zhí)行checkpoint,將當前的內(nèi)存數(shù)據(jù)快照備份到NFS中。
其中,NFS中的數(shù)據(jù)可為進行序列化處理后的數(shù)據(jù)。
具體地,內(nèi)存數(shù)據(jù)快照的數(shù)據(jù)存儲格式可包括:每個表中依次包括表名字段和數(shù)據(jù)數(shù)據(jù),數(shù)據(jù)字段中進一步包括至少一個item子字段,每個item子字段中分別采用key-value的形式對數(shù)據(jù)進行存儲。
更新信息的數(shù)據(jù)存儲格式可包括:每個表中依次包括uid字段、方法名字段和參數(shù)列表字段,參數(shù)列表字段中進一步包括至少一個參數(shù)子字段,每個參數(shù)子字段中分別存儲有對應參數(shù)的取值。
相應地,第二更新單元51可對從NFS中獲取到的序列化后的更新信息進行反序列化,根據(jù)反序列化結(jié)果更新本地內(nèi)存。
實施例四
圖6為本發(fā)明所述數(shù)據(jù)管理系統(tǒng)實施例的組成結(jié)構(gòu)示意圖,如圖6所示,包括:如實施例二中所述的主設備,以及,如實施例三中所述的從設備,主設備和從設備均需要與NFS進行交互,圖6所述系統(tǒng)實施例的具體工作流程請參照前述各實施例中的相應說明,此處不再贅述。
總之,采用本發(fā)明所述方案,采用主從方式來實現(xiàn)數(shù)據(jù)同步,底層文件系統(tǒng)采用NFS,從而相比于現(xiàn)有技術提高了系統(tǒng)的穩(wěn)定性和可擴展性,且文件存儲速度快,提升了數(shù)據(jù)處理效率;而且,現(xiàn)有的表結(jié)構(gòu)多存在冗余,而本發(fā)明所述方案中重新構(gòu)造了表結(jié)構(gòu),去除了冗余,從而提升了訪問速度;另外,采用本發(fā)明所述方案,可通過遠程過程調(diào)用(RPC,Remote Procedure Call)協(xié)議來直接訪問內(nèi)存等,從而相比于現(xiàn)有技術能夠提供更高的每秒請求數(shù),進而提高了系統(tǒng)的處理效率等。
在本發(fā)明所提供的幾個實施例中,應該理解到,所揭露的裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡單元上。可以根據(jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用硬件加軟件功能單元的形式實現(xiàn)。
上述以軟件功能單元的形式實現(xiàn)的集成的單元,可以存儲在一個計算機可讀取存儲介質(zhì)中。上述軟件功能單元存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)或處理器(processor)執(zhí)行本發(fā)明各個實施例所述方法的部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內(nèi)。