欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

分布式統(tǒng)計分析系統(tǒng)的配置方法及分布式統(tǒng)計分析系統(tǒng)與流程

文檔序號:12829290閱讀:353來源:國知局
分布式統(tǒng)計分析系統(tǒng)的配置方法及分布式統(tǒng)計分析系統(tǒng)與流程

本發(fā)明涉及一種分布式統(tǒng)計分析系統(tǒng)的配置方法,特別是一種配置集群管理、數(shù)據(jù)存儲及遷移、統(tǒng)計分析查詢和統(tǒng)計任務(wù)負(fù)載分擔(dān)功能的配置方法,以及由該配置方法得到的分布式統(tǒng)計分析系統(tǒng)。



背景技術(shù):

分布式系統(tǒng)是一種由多個處理資源相互連接在一起的計算機(jī)系統(tǒng)。這些處理資源又可以稱為節(jié)點(diǎn)設(shè)備,在統(tǒng)一的控制下來執(zhí)行同一人物。如中國專利cn102497280就公開了一種分布式系統(tǒng),其能夠?qū)崿F(xiàn)多個設(shè)備節(jié)點(diǎn)之間的相互感知。提高了管理效率。但是其并沒有公開對各設(shè)備節(jié)點(diǎn)具體執(zhí)行任務(wù)的管理和配置。

分布式系統(tǒng)通常需要具備統(tǒng)計分析的功能。但是目前的分布式統(tǒng)計系統(tǒng)中并沒有根據(jù)處理資源的實(shí)際運(yùn)行情況來在設(shè)備節(jié)點(diǎn)之間分配統(tǒng)計分析任務(wù)。因此會發(fā)生處理資源沒有被充分利用的情況。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明提供一種分布式統(tǒng)計分析系統(tǒng)的配置方法和由該配置方法得到的分布式統(tǒng)計分析系統(tǒng)。保證系統(tǒng)的高可用性和高可擴(kuò)展性,并實(shí)現(xiàn)統(tǒng)計分析任務(wù)的負(fù)載分擔(dān)。

為解決上述問題,第一方面,本發(fā)明提供一種分布式統(tǒng)計分析系統(tǒng)的配置方法,所述分布式統(tǒng)計分析系統(tǒng)包括zookeeper集群,服務(wù)節(jié)點(diǎn)和計算節(jié)點(diǎn)集群,所述方法包括:

選舉計算節(jié)點(diǎn)集群中的領(lǐng)導(dǎo)節(jié)點(diǎn),根據(jù)數(shù)據(jù)分片原則在各計算節(jié)點(diǎn)中分片數(shù)據(jù),并在數(shù)據(jù)分片的副本中選舉領(lǐng)導(dǎo)分片;

服務(wù)節(jié)點(diǎn)收到統(tǒng)計分析請求后,向領(lǐng)導(dǎo)節(jié)點(diǎn)申請計算節(jié)點(diǎn),領(lǐng)導(dǎo)節(jié)點(diǎn)將任務(wù)量最小的計算節(jié)點(diǎn)反饋給服務(wù)節(jié)點(diǎn);

服務(wù)節(jié)點(diǎn)獲得反饋的計算節(jié)點(diǎn)后,將統(tǒng)計請求發(fā)送給該計算節(jié)點(diǎn);

計算節(jié)點(diǎn)查找領(lǐng)導(dǎo)分片并向領(lǐng)導(dǎo)分片申請得到空閑的數(shù)據(jù)分片副本,并將統(tǒng)計任務(wù)分配給該數(shù)據(jù)片副本執(zhí)行統(tǒng)計任務(wù)。

可選地或優(yōu)選地,所述方法還包括:

服務(wù)節(jié)點(diǎn)將更新的數(shù)據(jù)發(fā)送給領(lǐng)導(dǎo)節(jié)點(diǎn),領(lǐng)導(dǎo)節(jié)點(diǎn)查找到對應(yīng)的數(shù)據(jù)分片的所有副本并將數(shù)據(jù)同步到該數(shù)據(jù)分片的各個副本。

可選地或優(yōu)選地,所述數(shù)據(jù)同步采用兩階段提交協(xié)議,若全部成功,則返回成功,若任一個副本失敗,則回退并返回失敗。

可選地或優(yōu)選地,所述方法還包括:在調(diào)整數(shù)據(jù)分片個數(shù)或分片規(guī)則的情況下,重新映射數(shù)據(jù)和數(shù)據(jù)分片的關(guān)系。

可選地或優(yōu)選地,所述方法還包括在設(shè)備狀態(tài)發(fā)生變化時,對分布式統(tǒng)計系統(tǒng)進(jìn)行調(diào)整的步驟,所述調(diào)整包括以下至少一種:

當(dāng)檢測到設(shè)備故障時,檢查各shard副本的個數(shù)及分布情況,若各shard副本的個數(shù)差別較大,則對shard進(jìn)行分布調(diào)整和遷移,以保證各shard副本的個數(shù)的基本相同;以及

當(dāng)檢測到新設(shè)備加入時,檢查各shard副本的個數(shù)和分布情況,若shard的副本的個數(shù)有差異,則將副本個數(shù)少的shard復(fù)制到新設(shè)備,若個數(shù)相同,則重新進(jìn)行分片。

可選地或優(yōu)選地,所述計算節(jié)點(diǎn)查找領(lǐng)導(dǎo)分片并向領(lǐng)導(dǎo)分片申請得到空閑的數(shù)據(jù)分片副本,并將統(tǒng)計任務(wù)分配給該數(shù)據(jù)片副本執(zhí)行統(tǒng)計任務(wù)包括:

執(zhí)行計算任務(wù)的所述計算節(jié)點(diǎn)將統(tǒng)計作業(yè)拆分成多個任務(wù),并根據(jù)分片規(guī)則將需要統(tǒng)計的id列表進(jìn)行分組,計算節(jié)點(diǎn)將任務(wù)和id組發(fā)送給對應(yīng)的領(lǐng)導(dǎo)分片,由領(lǐng)導(dǎo)分片負(fù)責(zé)選擇交由負(fù)載較少的數(shù)據(jù)分片副本執(zhí)行任務(wù),在所有的任務(wù)執(zhí)行完畢后,執(zhí)行節(jié)點(diǎn)收集所有計算結(jié)果并對結(jié)果進(jìn)行合并,繼而返回給服務(wù)節(jié)點(diǎn)。

可選地或優(yōu)選地,如果統(tǒng)計作業(yè)需要多次訪問數(shù)據(jù),則由執(zhí)行節(jié)點(diǎn)在收集合并結(jié)果后,根據(jù)統(tǒng)計作業(yè)需求再次進(jìn)行任務(wù)拆分和結(jié)果合并,直到統(tǒng)計作業(yè)運(yùn)行完畢為止。

第二方面,本發(fā)明提供一種分布式統(tǒng)計分析系統(tǒng),包括zookeeper集群,服務(wù)節(jié)點(diǎn)和計算節(jié)點(diǎn)集群。還包括:

集群管理模塊,用于選舉計算節(jié)點(diǎn)集群中的領(lǐng)導(dǎo)節(jié)點(diǎn),根據(jù)數(shù)據(jù)分片原則在各計算節(jié)點(diǎn)中分片數(shù)據(jù),并在數(shù)據(jù)分片的副本中選舉領(lǐng)導(dǎo)分片;

統(tǒng)計分析模塊,用于服務(wù)節(jié)點(diǎn)收到統(tǒng)計分析請求后,向領(lǐng)導(dǎo)節(jié)點(diǎn)申請計算節(jié)點(diǎn),領(lǐng)導(dǎo)節(jié)點(diǎn)將任務(wù)量最小的計算節(jié)點(diǎn)反饋給服務(wù)節(jié)點(diǎn);服務(wù)節(jié)點(diǎn)獲得反饋的計算節(jié)點(diǎn)后,將統(tǒng)計請求發(fā)送給該計算節(jié)點(diǎn);計算節(jié)點(diǎn)查找領(lǐng)導(dǎo)分片并向領(lǐng)導(dǎo)分片申請得到空閑的數(shù)據(jù)分片副本,并將統(tǒng)計任務(wù)分配給該數(shù)據(jù)片副本執(zhí)行統(tǒng)計任務(wù)。

可選地或優(yōu)選地,還包括:

數(shù)據(jù)存儲模塊,用于服務(wù)節(jié)點(diǎn)將更新的數(shù)據(jù)發(fā)送給領(lǐng)導(dǎo)節(jié)點(diǎn),領(lǐng)導(dǎo)節(jié)點(diǎn)查找到對應(yīng)的數(shù)據(jù)分片的所有副本并將數(shù)據(jù)同步到該數(shù)據(jù)分片的各個副本。

可選地或優(yōu)選地,所述數(shù)據(jù)同步采用兩階段提交協(xié)議,若全部成功,則返回成功,若任一個副本失敗,則回退并返回失敗。

本發(fā)明提供的分布式統(tǒng)計系統(tǒng)的配置方法和分布式統(tǒng)計分析系統(tǒng),可以將任務(wù)分擔(dān),并優(yōu)先分配給負(fù)載較小的計算節(jié)點(diǎn)和數(shù)據(jù)分片運(yùn)行,使得相對空閑的處理資源能夠自動得到充分利用,提高了統(tǒng)計效率,并保證系統(tǒng)具有高擴(kuò)展性和高穩(wěn)定性。

附圖說明

圖1為本發(fā)明實(shí)施例一所提供的分布式統(tǒng)計分析系統(tǒng)的架構(gòu)圖;

圖2為本發(fā)明實(shí)施例一所提供的分布式統(tǒng)計分析系統(tǒng)的配置方法流程圖;

圖3為本發(fā)明實(shí)施例一所提供的分布式統(tǒng)計分析系統(tǒng)的配置方法的另一個流程圖;

圖4為本發(fā)明實(shí)施例一所提供的分布式統(tǒng)計分析系統(tǒng)的配置方法的另一個流程圖;

圖5為本發(fā)明實(shí)施例一所提供的分布式統(tǒng)計分析系統(tǒng)的配置方法的另一個流程圖;

圖6為本發(fā)明實(shí)施例二所提供的分布式統(tǒng)計分析系統(tǒng)的結(jié)構(gòu)示意圖。

具體實(shí)施方式

為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明作進(jìn)一步的詳細(xì)說明。

實(shí)施例一

本實(shí)施例提供了一種分布式統(tǒng)計分析系統(tǒng)的配置方法,其中,如圖1所示,該分布式統(tǒng)計分析系統(tǒng)主要由三部分組成:zookeeper集群,服務(wù)節(jié)點(diǎn)和計算節(jié)點(diǎn)集群。zookeeper集群用于計算節(jié)點(diǎn)集群的狀態(tài)管理。服務(wù)節(jié)點(diǎn)負(fù)責(zé)統(tǒng)計服務(wù)的分解和整合以及數(shù)據(jù)的更新控制等工作。服務(wù)節(jié)點(diǎn)接收前端的統(tǒng)計分析請求,并解析為內(nèi)容搜索和統(tǒng)計分析兩部分,內(nèi)容搜索部分的任務(wù)交由內(nèi)容搜索引擎運(yùn)行,統(tǒng)計分析部分的任務(wù)交由計算節(jié)點(diǎn)集群運(yùn)行。計算節(jié)點(diǎn)集群用于數(shù)據(jù)的分片和備份、計算任務(wù)的拆分和結(jié)果合并、計算任務(wù)的負(fù)載等工作。

術(shù)語解釋:如無特別說明,在本發(fā)明中涉及的有關(guān)術(shù)語具有如下的含義:

術(shù)語解釋:

zookeeper:zookeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是google的chubby一個開源的實(shí)現(xiàn),是hadoop和hbase的重要組件。它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。zookeeper包含一個簡單的原語集,提供java和c的接口。在本發(fā)明中,zookeeper集群用于計算節(jié)點(diǎn)集群的狀態(tài)管理。

solr:solr是用java編寫、運(yùn)行在servlet容器(如apachetomcat或jetty)的一個獨(dú)立的全文搜索服務(wù)器。其主要功能包括全文檢索、命中標(biāo)示、分面搜索、動態(tài)聚類、數(shù)據(jù)庫集成,以及富文本(如word、pdf)的處理。solr是高度可擴(kuò)展的,并提供了分布式搜索和索引復(fù)制。

shard:數(shù)據(jù)分片;

shard副本:數(shù)據(jù)分片副本(shard-1replica、shard-2replica、shard-3replica……);

core:管理shard副本和針對副本數(shù)據(jù)進(jìn)行統(tǒng)計分析工作的功能集合(圖1中的core1、core2……);core包括兩部分內(nèi)容:統(tǒng)計分析和數(shù)據(jù)存儲。針對數(shù)據(jù)存儲,core作為兩階段提交協(xié)議的participant參與數(shù)據(jù)的更新操作。core內(nèi)shard的各個副本采用實(shí)例方式存儲,本地的直接調(diào)用實(shí)例,遠(yuǎn)端的綁定遠(yuǎn)端服務(wù)。

overseer:計算節(jié)點(diǎn)中的領(lǐng)導(dǎo)節(jié)點(diǎn)。

基于上述分布式統(tǒng)計分析系統(tǒng),如圖2-5所示,其配置方法包括如下的步驟:

s1:選舉計算節(jié)點(diǎn)集群中的領(lǐng)導(dǎo)節(jié)點(diǎn),根據(jù)數(shù)據(jù)分片原則在各計算節(jié)點(diǎn)中分片數(shù)據(jù),并在數(shù)據(jù)分片的副本中選舉領(lǐng)導(dǎo)分片。

在步驟s1中,主要的目的是為了對各個計算節(jié)點(diǎn)集群按照預(yù)定的策略進(jìn)行管理。這部分功能可以由zookeeper集群來完成。

集群的初始狀態(tài)和終止?fàn)顟B(tài)如下:

1)初始狀態(tài)

zookeeper集群;

各獨(dú)立的計算節(jié)點(diǎn),core已經(jīng)初始化,指定core所屬的shard;

2)終止?fàn)顟B(tài)

計算節(jié)點(diǎn)選舉出overseer,每個節(jié)點(diǎn)均知曉overseer及其他計算節(jié)點(diǎn);

各core分配一個shard,同一shard的副本不能出現(xiàn)在同一個計算節(jié)點(diǎn)上;

每個shard的多個副本之間選舉出一個shardleader,同一個shard的各副本知曉該shard的leader和其他成員.

下面具體說明在初始狀態(tài)和終止?fàn)顟B(tài)之間,集群管理步驟的各個子步驟:

s101:overseer選舉

基于zookeeper集群,眾多計算節(jié)點(diǎn)可以輕松的選舉出overseer。步驟如下:

1)啟機(jī),各計算節(jié)點(diǎn)向zookeeper注冊各計算節(jié)點(diǎn)的ip;

路徑:statsanalysis/live_nodes/

2)各計算節(jié)點(diǎn)監(jiān)聽statsanalysis/live_nodes/,獲得并保存所有的計算節(jié)點(diǎn)的ip信息;

3)在獲取各計算節(jié)點(diǎn)ip后,各計算節(jié)點(diǎn)向zookeeper注冊爭奪overseer;

路徑:statsanalysis/overseer/

4)各計算節(jié)點(diǎn)監(jiān)聽statsanalysis/overseer/,獲得并保存overseer的ip信息;

s102:數(shù)據(jù)分片

在數(shù)據(jù)分片的過程中,由配置文件指定core所屬的shard,需保證同一shard的副本不能處于同一個計算節(jié)點(diǎn)上。

數(shù)據(jù)分片的具體步驟如下:

1)啟機(jī),各計算節(jié)點(diǎn)根據(jù)配置的core的數(shù)目初始化core,并向zookeeper注冊各core;路徑為:statsanalysis/cores/;

2)overseer根據(jù)各core所屬的shard確定數(shù)據(jù)分片規(guī)則,并同步到其他計算節(jié)點(diǎn),具體見數(shù)據(jù)存儲部分(下文敘述);路徑:statsanalysis/shard/barrel2shard;

s103:shardleader選舉

在shard分配完成后,各shard內(nèi)副本進(jìn)行l(wèi)eader的選舉。步驟如下:

1)core監(jiān)聽statsanalysis/cores/,獲取所屬shard;

2)shard各副本向zookeeper集群注冊爭奪shardleader;

路徑為:statsanalysis/shardleader/1,statsanalysis/shardleader/2,…;

3)各副本監(jiān)聽各自所屬shardleader在zookeeper中的路徑,獲取并保存各自shardleader的信息;

綜上,集群管理模塊的整體配置流程可歸納成如下步驟:

1)配置zookeeper集群;

2)計算節(jié)點(diǎn)啟機(jī),與控制頁面建立聯(lián)系,配置shard數(shù)目、單個shard副本數(shù)目,觸發(fā)加入集群動作;

3)各計算節(jié)點(diǎn)創(chuàng)建自己的cores(個數(shù)由配置參數(shù)決定),向zookeeper注冊,注冊路徑為statsanalysis/cores/;

4)各計算節(jié)點(diǎn)向zookeeper注冊,注冊路徑為statsanalysis/live_nodes/;

5)各計算節(jié)點(diǎn)向zookeeper爭奪overseer,路徑為statsanalysis/overseer/;

6)overseer監(jiān)聽statsanalysis/live_nodes/獲取所有的計算節(jié)點(diǎn);

7)overseer向zookeeper創(chuàng)建路徑statsanalysis/shardleader/{shard編號},用于shard副本之間爭奪shardleader;

8)overseer監(jiān)聽statsanalysis/cores/獲取各core,根據(jù)cores、副本數(shù)、shard數(shù)進(jìn)行shard副本分配,并將shard編號寫入各core;

9)各core監(jiān)聽各自對應(yīng)的節(jié)點(diǎn),讀取節(jié)點(diǎn)值獲得分配的shard編號;

10)各core向zookeeper注冊爭奪shardleader,路徑為statsanalysis/shardleader/{shard編號};

11)shardleader監(jiān)視statsanalysis/cores/獲取本shard的各個副本。

s2:服務(wù)節(jié)點(diǎn)收到統(tǒng)計分析請求后,向領(lǐng)導(dǎo)節(jié)點(diǎn)申請計算節(jié)點(diǎn),領(lǐng)導(dǎo)節(jié)點(diǎn)將任務(wù)量最小的計算節(jié)點(diǎn)反饋給服務(wù)節(jié)點(diǎn);服務(wù)節(jié)點(diǎn)獲得反饋的計算節(jié)點(diǎn)后,將統(tǒng)計請求發(fā)送給該計算節(jié)點(diǎn);計算節(jié)點(diǎn)查找領(lǐng)導(dǎo)分片并向領(lǐng)導(dǎo)分片申請得到空閑的數(shù)據(jù)分片副本,并將統(tǒng)計任務(wù)分配給該數(shù)據(jù)分片副本執(zhí)行統(tǒng)計任務(wù)。

在步驟s2中,服務(wù)節(jié)點(diǎn)收到客戶端的統(tǒng)計分析請求后,將請求分解為查詢語句和統(tǒng)計語句,首先持查詢語句從solr獲取匹配的企業(yè)id列表,然后從overseer獲取空閑的計算節(jié)點(diǎn)并將企業(yè)id列表和統(tǒng)計語句發(fā)送給該計算節(jié)點(diǎn)進(jìn)行統(tǒng)計分析。

統(tǒng)計分析大致可以劃分為三個步驟:統(tǒng)計語句分析,任務(wù)拆分和結(jié)果合并。統(tǒng)計語句分析負(fù)責(zé)解析統(tǒng)計語句。當(dāng)統(tǒng)計分析作業(yè)經(jīng)overseer轉(zhuǎn)交給執(zhí)行節(jié)點(diǎn)時,執(zhí)行節(jié)點(diǎn)將作業(yè)拆分成多個任務(wù),并根據(jù)分片規(guī)則將需要統(tǒng)計的企業(yè)id列表進(jìn)行分組,執(zhí)行節(jié)點(diǎn)負(fù)責(zé)將任務(wù)和企業(yè)id組發(fā)送給對應(yīng)shard的leader,由shardleader負(fù)責(zé)選擇交由負(fù)載較少的副本執(zhí)行任務(wù)。在所有的任務(wù)執(zhí)行完畢后,執(zhí)行節(jié)點(diǎn)收集所有計算結(jié)果并對結(jié)果進(jìn)行合并,繼而返回給服務(wù)節(jié)點(diǎn)。任務(wù)拆分是的單個子任務(wù)只占用較小的處理資源,并且能快速完成,有利于子任務(wù)的重新分配,避免因任務(wù)執(zhí)行時間過程造成出現(xiàn)空閑資源浪費(fèi)的情況。在一些實(shí)施例中,如果作業(yè)需要多次訪問數(shù)據(jù),作為進(jìn)一步改進(jìn),則由執(zhí)行節(jié)點(diǎn)在收集合并結(jié)果后,根據(jù)作業(yè)需求再次進(jìn)行任務(wù)拆分和結(jié)果合并,直到作業(yè)運(yùn)行完畢為止。這樣即使多次訪問數(shù)據(jù)也能夠保持統(tǒng)計結(jié)果的一致性。

在統(tǒng)計分析的三個步驟中:

統(tǒng)計分析語句的格式可以按照現(xiàn)有的dp數(shù)據(jù)平臺的圖標(biāo)分析規(guī)則設(shè)定。解析代碼取自單機(jī)版統(tǒng)計分析代碼。

任務(wù)的拆分具體為將統(tǒng)計分析作業(yè)相關(guān)的企業(yè)id列表根據(jù)分片規(guī)則進(jìn)行分組,組的個數(shù)為shard的個數(shù)。每個任務(wù)負(fù)責(zé)一個組的數(shù)據(jù)的統(tǒng)計工作。具體統(tǒng)計分析的代碼由單機(jī)版統(tǒng)計分析代碼修改實(shí)現(xiàn)。

結(jié)果合并步驟包括收集各個任務(wù)的統(tǒng)計結(jié)果,并根據(jù)統(tǒng)計分析需求進(jìn)行后處理。具體合并的代碼由單機(jī)版統(tǒng)計分析代碼修改實(shí)現(xiàn)。

綜上,統(tǒng)計分析查詢模塊執(zhí)行的具體流程可以歸納為:

1)服務(wù)節(jié)點(diǎn)收到統(tǒng)計分析請求,將請求拆分為兩部分:搜索請求和統(tǒng)計請求;

2)服務(wù)節(jié)點(diǎn)調(diào)用solr服務(wù)查詢相關(guān)企業(yè)id列表;

3)服務(wù)節(jié)點(diǎn)監(jiān)聽目錄statsanalysis/overseer/獲取當(dāng)前的overseer,并向overseer申請計算節(jié)點(diǎn),overseer將任務(wù)量最小的計算節(jié)點(diǎn)反饋給服務(wù)節(jié)點(diǎn)(完成計算節(jié)點(diǎn)之間的負(fù)載分擔(dān));

4)服務(wù)節(jié)點(diǎn)獲得任務(wù)運(yùn)行的計算節(jié)點(diǎn),并將統(tǒng)計請求和相關(guān)企業(yè)id列表發(fā)送給該計算節(jié)點(diǎn);

5)計算節(jié)點(diǎn)根據(jù)分片規(guī)則,將企業(yè)id列表進(jìn)行分組;

6)計算節(jié)點(diǎn)查找到各shardleader的位置并向其申請空閑的shard副本(完成shard副本之間的負(fù)載分擔(dān));

7)計算節(jié)點(diǎn)將統(tǒng)計語句和相關(guān)的企業(yè)id發(fā)送給個shard副本,由它們完成統(tǒng)計,如果一次交互無法得到結(jié)果,由計算節(jié)點(diǎn)負(fù)責(zé)多次交互;

統(tǒng)計分析的子任務(wù)的統(tǒng)計工作中,可以根據(jù)輸入的企業(yè)id列表從本地shard副本中獲取相應(yīng)的企業(yè)信息,并根據(jù)統(tǒng)計規(guī)則進(jìn)行分析。

8)計算節(jié)點(diǎn)匯總各shard副本的統(tǒng)計結(jié)果,并返回給服務(wù)節(jié)點(diǎn)進(jìn)行結(jié)果緩存。

s3:服務(wù)節(jié)點(diǎn)將更新的數(shù)據(jù)發(fā)送給領(lǐng)導(dǎo)節(jié)點(diǎn),領(lǐng)導(dǎo)節(jié)點(diǎn)查找到對應(yīng)的數(shù)據(jù)分片的所有副本并將數(shù)據(jù)同步到該數(shù)據(jù)分片的各個副本。

步驟s3主要為了完成數(shù)據(jù)的存儲工作。數(shù)據(jù)同步采用兩階段提交協(xié)議,若全部成功,則返回成功,若任一個副本失敗,則回退并返回失敗。

確定數(shù)據(jù)分片規(guī)則包括:

1)獲取企業(yè)id的低10位,按值分組獲得1024個桶(即barrel);

2)使用表存儲barrel到shard的映射關(guān)系。

barrelid到shardid的映射關(guān)系在zookeeper集群中的存儲位置為statsanalysis/shard/,znode名稱為barrel2shard,值為映射關(guān)系的json字符串。

綜上,數(shù)據(jù)存儲的整體流程可以歸納如下:

1)服務(wù)節(jié)點(diǎn)監(jiān)聽statsanalysis/overseer/,獲取當(dāng)前的overseer,并將更新數(shù)據(jù)發(fā)送給overseer;

2)overseer根據(jù)分片規(guī)則計算獲得shardid,并查找到該shard的leader,將更新的數(shù)據(jù)發(fā)送給shardleader;

3)shardleader將數(shù)據(jù)一致更新到該shard的所有副本。

s4:在調(diào)整數(shù)據(jù)分片個數(shù)或分片規(guī)則的情況下,重新映射數(shù)據(jù)和數(shù)據(jù)分片的關(guān)系。

步驟s4為數(shù)據(jù)的遷移工作。數(shù)據(jù)遷移分為兩種情況:復(fù)制shard的單個副本和修改shard個數(shù)重新分片。在數(shù)據(jù)遷移的過程中,不允許數(shù)據(jù)的更新操作。

在復(fù)制副本時,如果遇到設(shè)備故障或添加新設(shè)備的情況,可能需要從shardleader同步數(shù)據(jù),此時可以采用復(fù)制整個副本的策略。

重新分片中,在更改shard數(shù)目時,對數(shù)據(jù)重新進(jìn)行分片,修改barrel到shard的映射關(guān)系并更新到zookeeper,將變更映射關(guān)系的barrel的數(shù)據(jù)從原shard復(fù)制到新shard,并從原shard中刪除。

s5:在設(shè)備狀態(tài)發(fā)生變化時,對分布式統(tǒng)計系統(tǒng)進(jìn)行調(diào)整,所述調(diào)整包括以下至少一種:

當(dāng)檢測到設(shè)備故障時,檢查各shard副本的個數(shù)及分布情況,若各shard副本的個數(shù)差別較大,則對shard進(jìn)行分布調(diào)整和遷移,以保證各shard副本的個數(shù)的基本相同;以及

當(dāng)檢測到新設(shè)備加入時,檢查各shard副本的個數(shù)和分布情況,若shard的副本的個數(shù)有差異,則將副本個數(shù)少的shard復(fù)制到新設(shè)備,若個數(shù)相同,則重新進(jìn)行分片。

這樣,當(dāng)設(shè)備發(fā)生故障或有新設(shè)備被添加時,系統(tǒng)能夠自動地及時調(diào)整資源的分配,保證了系統(tǒng)的擴(kuò)展性。

實(shí)施例二

本實(shí)施例提供了一種分布式統(tǒng)計分析系統(tǒng),該系統(tǒng)由實(shí)施一中的配置方法配置,并得到執(zhí)行該配置方法的相應(yīng)模塊。具體包括:集群管理模塊、數(shù)據(jù)存儲及遷移模塊、統(tǒng)計分析查詢模塊和統(tǒng)計任務(wù)負(fù)載分擔(dān)模塊(如圖6所示)。

集群管理模塊用于各計算節(jié)點(diǎn)與zookeeper集群的連接的建立與維持,具體用于選舉計算節(jié)點(diǎn)集群中的overseer節(jié)點(diǎn)(即領(lǐng)導(dǎo)節(jié)點(diǎn)),根據(jù)數(shù)據(jù)分片原則在各計算節(jié)點(diǎn)中分片數(shù)據(jù),以及在數(shù)據(jù)分片的副本中選舉領(lǐng)導(dǎo)分片(即shardleader)。

在設(shè)備狀態(tài)變化時,需要調(diào)整shard副本的分布。設(shè)備狀態(tài)變化主要包括設(shè)備故障和新設(shè)備加入兩種情況。

當(dāng)檢測到設(shè)備故障時,集群管理模塊檢查各shard副本的個數(shù)及分布情況,若各shard副本的個數(shù)差別較大,則對shard進(jìn)行分布調(diào)整和遷移,以保證各shard副本的個數(shù)的基本相同,增強(qiáng)集群的健壯性。

當(dāng)檢測到新設(shè)備加入時,檢查各shard副本的個數(shù)和分布情況,若shard的副本的個數(shù)有差異,則將副本個數(shù)少的shard復(fù)制到新設(shè)備,若個數(shù)相同,則可以重新進(jìn)行分片。

此處,shard編號可以在配置文件中指定,不采用集群自動指定分片狀況。

調(diào)整shard副本的分布可以由集群管理模塊和數(shù)據(jù)遷移模塊(下文敘述)配合完成。

集群的初始狀態(tài)和終止?fàn)顟B(tài)如下:

1)初始狀態(tài)

zookeeper集群;

各獨(dú)立的計算節(jié)點(diǎn),core已經(jīng)初始化,指定core所屬的shard;

2)終止?fàn)顟B(tài)

計算節(jié)點(diǎn)選舉出overseer,每個節(jié)點(diǎn)均知曉overseer及其他計算節(jié)點(diǎn);

各core分配一個shard,同一shard的副本不能出現(xiàn)在同一個計算節(jié)點(diǎn)上;

每個shard的多個副本之間選舉出一個shardleader,同一個shard的各副本知曉該shard的leader和其他成員。

在初始狀態(tài)和終止?fàn)顟B(tài)之間,集群管理模塊的配置過程對應(yīng)于實(shí)施例一中步驟s101-s103的內(nèi)容。在此不再贅述。

數(shù)據(jù)存儲及遷移模塊,用于服務(wù)節(jié)點(diǎn)將更新的數(shù)據(jù)發(fā)送給overseer,overseer查找到對應(yīng)的shard的所有副本并將數(shù)據(jù)同步到該shard的各個副本。數(shù)據(jù)同步采用兩階段提交協(xié)議,若全部成功,則返回成功,若任一個副本失敗,則回退并返回失敗。當(dāng)設(shè)備故障或加入新設(shè)備時,集群的狀態(tài)會發(fā)生變化,待集群狀態(tài)穩(wěn)定后,根據(jù)集群中的shard狀況,由overseer支持?jǐn)?shù)據(jù)遷移的工作。

按照上述的配置方法,數(shù)據(jù)存儲及遷移模塊具體包括數(shù)據(jù)存儲模塊和數(shù)據(jù)遷移模塊(分別對應(yīng)于實(shí)施一中s3和s4步驟的內(nèi)容)。

數(shù)據(jù)存儲模塊用于將數(shù)據(jù)更新到各shard的各副本處,并保證shard內(nèi)數(shù)據(jù)一致性。更進(jìn)一步地,數(shù)據(jù)存儲模塊還用于確定分片規(guī)則和一致性協(xié)議,確定分片規(guī)則包括:

1)獲取企業(yè)id的低10位,按值分組獲得1024個桶;

2)使用表存儲barrel到shard的映射關(guān)系。

一致性協(xié)議包括:shard內(nèi)各副本之間采用兩階段提交協(xié)議保證數(shù)據(jù)更新的原子性。

兩階段提交協(xié)議由兩階段提交協(xié)議模塊,并具體由兩部分組成:協(xié)調(diào)者(coordinator)和參與者(participant)。協(xié)調(diào)者起到管理協(xié)調(diào)作用,參與者為數(shù)據(jù)存取的實(shí)際操作者。

數(shù)據(jù)遷移模塊用于調(diào)整shard分布,在shard個數(shù)及分片規(guī)則不變的情況下,僅用于復(fù)制和刪除shard副本內(nèi)容,在調(diào)整shard個數(shù)或分片規(guī)則的情況下,用于重新映射數(shù)據(jù)關(guān)系。

數(shù)據(jù)遷移分為兩種情況:復(fù)制shard的單個副本和修改shard個數(shù)重新分片。在數(shù)據(jù)遷移的過程中,不允許數(shù)據(jù)的更新操作。具體過程可以參考實(shí)施一中步驟s4的實(shí)現(xiàn)方式。

統(tǒng)計分析查詢模塊,用于服務(wù)節(jié)點(diǎn)收到客戶端的統(tǒng)計分析請求并將請求分解為查詢語句和統(tǒng)計語句后,首先持查詢語句從solr獲取匹配的企業(yè)id列表,然后從overseer獲取空閑的計算節(jié)點(diǎn)并將企業(yè)id列表和統(tǒng)計語句發(fā)送給該計算節(jié)點(diǎn)進(jìn)行統(tǒng)計分析。計算節(jié)點(diǎn)重寫統(tǒng)計語句,然后訪問各shardleader獲取各shard內(nèi)負(fù)載較小的副本,并將運(yùn)行任務(wù)發(fā)送到該副本所在節(jié)點(diǎn)執(zhí)行。在計算節(jié)點(diǎn)收到各shard返回的計算結(jié)果后進(jìn)行匯總并返回統(tǒng)計結(jié)果。

當(dāng)任務(wù)長時間未執(zhí)行完畢時,計算節(jié)點(diǎn)殺死超時任務(wù)并重新選擇一個shard副本運(yùn)行任務(wù)。代碼中采用rmi同步調(diào)用時,則不實(shí)現(xiàn)殺死超時任務(wù)的功能。

統(tǒng)計分析查詢模塊具體被配置為執(zhí)行以下流程:

統(tǒng)計分析大致可以劃分為三個步驟:統(tǒng)計語句分析,任務(wù)拆分和結(jié)果合并。統(tǒng)計語句分析負(fù)責(zé)解析統(tǒng)計語句。當(dāng)統(tǒng)計分析作業(yè)經(jīng)overseer轉(zhuǎn)交給執(zhí)行節(jié)點(diǎn)時,執(zhí)行節(jié)點(diǎn)將作業(yè)拆分成多個任務(wù),并根據(jù)分片規(guī)則將需要統(tǒng)計的企業(yè)id列表進(jìn)行分組,執(zhí)行節(jié)點(diǎn)負(fù)責(zé)將任務(wù)和企業(yè)id組發(fā)送給對應(yīng)shard的leader,由shardleader負(fù)責(zé)選擇交由負(fù)載較少的副本執(zhí)行任務(wù)。在所有的任務(wù)執(zhí)行完畢后,執(zhí)行節(jié)點(diǎn)收集所有計算結(jié)果并對結(jié)果進(jìn)行合并,繼而返回給服務(wù)節(jié)點(diǎn)。如果作業(yè)需要多次訪問數(shù)據(jù),則由執(zhí)行節(jié)點(diǎn)在收集合并結(jié)果后,根據(jù)作業(yè)需求再次進(jìn)行任務(wù)拆分和結(jié)果合并,直到作業(yè)運(yùn)行完畢為止。查找負(fù)載較少的計算節(jié)點(diǎn)或shard副本的任務(wù)交由負(fù)載分擔(dān)模塊(下文敘述)執(zhí)行。

統(tǒng)計分析的三個步驟的具體實(shí)現(xiàn)方式可以參考實(shí)施例一中s2的對應(yīng)內(nèi)容來實(shí)現(xiàn)。

統(tǒng)計任務(wù)負(fù)載分擔(dān)模塊,用于和集群管理模塊以及統(tǒng)計分析查詢模塊配合使用。在一些實(shí)施例中,也可以作為統(tǒng)計分析查詢模塊的一部分,在統(tǒng)計分析的過程中執(zhí)行有關(guān)負(fù)載分擔(dān)的任務(wù)。負(fù)載分擔(dān)分為兩種情況:基于作業(yè)的負(fù)載分擔(dān)和基于任務(wù)的負(fù)載分擔(dān),基于作業(yè)的負(fù)載分擔(dān)負(fù)責(zé)選擇運(yùn)行統(tǒng)計分析作業(yè)的計算節(jié)點(diǎn),基于任務(wù)的負(fù)載分擔(dān)負(fù)責(zé)選擇運(yùn)行計算任務(wù)的shard的副本。

負(fù)載分擔(dān)在提高設(shè)備利用率方面起著重要作用,主要工作內(nèi)容是監(jiān)視有效的運(yùn)算資源及任務(wù)分配情況,為申請運(yùn)算資源的任務(wù)選取較為空閑的運(yùn)算資源。

在統(tǒng)計分析查詢模塊的執(zhí)行過程中,如上文敘述,主要包括以下兩種負(fù)載分擔(dān)子步驟:

第一種為選取執(zhí)行節(jié)點(diǎn)和任務(wù)運(yùn)行副本。這部分可以單獨(dú)集成為一個選取子模塊,獨(dú)立使用,是為了提高代碼復(fù)用。

第二種為由overseer向各個計算節(jié)點(diǎn)提取計算節(jié)點(diǎn)的任務(wù)量,由shardleader向各個副本提取shard各副本的任務(wù)量。最終按照選取任務(wù)量最小的運(yùn)算資源的選取策略選擇運(yùn)算資源。

作為進(jìn)一步改進(jìn),本系統(tǒng)還可以包括以下的模塊:

設(shè)備故障調(diào)節(jié)模塊。設(shè)備故障的影響可以分為三方面:對集群狀態(tài)的影響,對統(tǒng)計分析的影響和對數(shù)據(jù)存儲的影響。因此設(shè)備故障調(diào)節(jié)模塊可以用于執(zhí)行以下三種步驟:

1、對集群狀態(tài)的影響

當(dāng)計算節(jié)點(diǎn)和cores丟失,重新選舉overseer和shardleader的。選舉方式為自動選舉,不需要再編寫代碼;

2、對統(tǒng)計分析的影響

如果統(tǒng)計分析作業(yè)所在計算節(jié)點(diǎn)故障,則服務(wù)節(jié)點(diǎn)重新觸發(fā)統(tǒng)計分析過程;

如果子任務(wù)所在計算節(jié)點(diǎn)故障,則由作業(yè)所在計算節(jié)點(diǎn)重新觸發(fā)該任務(wù);

3、對數(shù)據(jù)存儲的影響

對數(shù)據(jù)存儲不做任何響應(yīng)。

設(shè)備添加調(diào)節(jié)模塊。添加設(shè)備存在兩種情況:閃斷和新設(shè)備加入。對于閃斷的情況,設(shè)備添加調(diào)節(jié)模塊用于添加超時限制,僅當(dāng)集群狀態(tài)變化超時后,集群狀態(tài)變化(不包括overseer和shardleader)才觸發(fā)數(shù)據(jù)存儲的改變(重連的設(shè)備當(dāng)作新設(shè)備加入,原有數(shù)據(jù)刪除),如果在超時時間內(nèi)集群狀態(tài)恢復(fù)(不包括overseer和shardleader),則不做數(shù)據(jù)存儲的改變。在超時計算期間,不允許數(shù)據(jù)的更新操作。

新設(shè)備的加入可能引起兩方面的后果:shard副本的復(fù)制與遷移,重新分片。兩種情況均以桶為單位,采用json字符串格式,由目標(biāo)從源拉取的方式進(jìn)行遷移。在數(shù)據(jù)變更期間,不允許數(shù)據(jù)的更新操作,但不能影響正常的統(tǒng)計分析功能。數(shù)據(jù)的遷移工作(包括復(fù)制和重新分片)均有overseer主持。

shard副本的復(fù)制:以桶為單位進(jìn)行復(fù)制,僅當(dāng)整個副本全部遷移完畢才算完成,為了防止源在復(fù)制或轉(zhuǎn)移的過程中故障。

重新分片:以桶為單位進(jìn)行轉(zhuǎn)移,轉(zhuǎn)移完畢一個桶,則修改桶到shard的映射信息,標(biāo)志一個桶的信息重新分片成功。重新分片僅當(dāng)shard副本數(shù)目均滿足指定副本數(shù)目且剩余足夠core數(shù)目的時候才會進(jìn)行,且不能與shard副本的復(fù)制與遷移同時進(jìn)行。

在各個模塊的接口設(shè)計過程中,本發(fā)明實(shí)施例考慮到了分布式系統(tǒng)的層次。計算節(jié)點(diǎn)集群包含三個不同的層次:計算節(jié)點(diǎn)層、core層、statistics和datastore層。計算節(jié)點(diǎn)層負(fù)責(zé)集群拓?fù)涞木S護(hù),分片規(guī)則的維護(hù),數(shù)據(jù)的分片,數(shù)據(jù)的復(fù)制及遷移,重新分片、統(tǒng)計分析作業(yè)的分解與結(jié)果匯總等工作。core層負(fù)責(zé)各shard的數(shù)據(jù)更新的一致性。statistics負(fù)責(zé)單個shard副本的統(tǒng)計分析,而datastore負(fù)責(zé)shard副本數(shù)據(jù)的存儲。

負(fù)載分擔(dān)分為兩個層次:計算節(jié)點(diǎn)層的負(fù)載分擔(dān)和core層的負(fù)載分擔(dān),兩個負(fù)載分擔(dān)僅處理的內(nèi)容不同。core層同一shard的多個副本之間的一致性采用兩階段提交協(xié)議,保證數(shù)據(jù)操作的原子性,shardleader的core充當(dāng)協(xié)調(diào)器,而shard副本的各個core充當(dāng)參與單元。整個集群的狀態(tài)管理及領(lǐng)導(dǎo)者選舉等基于zookeeper集群實(shí)現(xiàn)。

因此,在設(shè)計接口時,按照上述的層次,并參考各個模塊之間的數(shù)據(jù)交換關(guān)系設(shè)計即可。

以上對本發(fā)明所提供的分布式統(tǒng)計分析系統(tǒng)的配置方法和分布式統(tǒng)計分析系統(tǒng)進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
吴江市| 永春县| 宁阳县| 和平县| 寿宁县| 长乐市| 利津县| 霍山县| 石楼县| 花莲县| 丹巴县| 平利县| 德化县| 青浦区| 喀喇沁旗| 伊金霍洛旗| 同德县| 扎鲁特旗| 顺昌县| 永丰县| 讷河市| 神农架林区| 大渡口区| 永昌县| 积石山| 长葛市| 尉氏县| 工布江达县| 威远县| 万宁市| 梓潼县| 鹿邑县| 宝兴县| 桐庐县| 湘阴县| 正蓝旗| 南汇区| 吴桥县| 循化| 台东县| 合水县|