本申請涉及通信領(lǐng)域,尤其涉及一種基于分布式服務(wù)器集群的數(shù)據(jù)計(jì)算方法及系統(tǒng)。
背景技術(shù):
在一些大規(guī)模數(shù)據(jù)計(jì)算的場景中,需要進(jìn)行計(jì)算的數(shù)據(jù)庫中包含的數(shù)量量通常非常龐大,而單臺物理服務(wù)器的計(jì)算性能通常會存在極限。因此,為了應(yīng)對單臺服務(wù)器計(jì)算性能上的不足,業(yè)界常規(guī)的處理方式是,通過引入服務(wù)器集群參與并行計(jì)算,并對數(shù)據(jù)庫進(jìn)行分庫分表;例如,可以將數(shù)據(jù)庫中存儲的數(shù)據(jù)分拆到不同的數(shù)據(jù)庫和不同的數(shù)據(jù)庫分表中。
然而,這種方式在某種程度上,雖然可以緩解在大規(guī)模數(shù)據(jù)計(jì)算的場景下處理性能上的壓力,但隨著時(shí)間和業(yè)務(wù)的快速發(fā)展,各數(shù)據(jù)庫分表中的數(shù)據(jù)量也會快速累積,因此仍然可能會造成集群在執(zhí)行數(shù)據(jù)計(jì)算時(shí),系統(tǒng)消耗過大,計(jì)算效率低的問題。
技術(shù)實(shí)現(xiàn)要素:
本申請?zhí)岢鲆环N基于分布式服務(wù)器集群的數(shù)據(jù)計(jì)算方法,所述分布式服務(wù)器集群包括任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群;其中,所述分布式服務(wù)器集群中的服務(wù)器均為多線程服務(wù)器,所述方法包括:
任務(wù)劃分子集群中的服務(wù)器在接收到計(jì)算任務(wù)時(shí),分別向數(shù)據(jù)讀取子集群中的服務(wù)器并行發(fā)起調(diào)用;
數(shù)據(jù)讀取子集群中的服務(wù)器響應(yīng)所述任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用,從與所述調(diào)用的發(fā)起方對應(yīng)的數(shù)據(jù)庫分表中并行讀取預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目;
所述數(shù)據(jù)讀取子集群中的服務(wù)器分別向數(shù)據(jù)計(jì)算子集群中的服務(wù)器并行發(fā)起調(diào)用,將讀取到的所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目提交至所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器,以由所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器基于接收到的所述待計(jì)算數(shù)據(jù)條目執(zhí)行多線程的并行計(jì)算。
可選的,所述任務(wù)劃分子集群中的服務(wù)器均在本地維護(hù)了對應(yīng)的數(shù)據(jù)庫分表;所述數(shù)據(jù)庫分表包括待計(jì)算數(shù)據(jù)條目以及與所述待計(jì)算數(shù)據(jù)條目對應(yīng)的計(jì)算狀態(tài);其中,所述計(jì)算狀態(tài)包括初始狀態(tài)、待計(jì)算狀態(tài)、計(jì)算完成狀態(tài)以及重算狀態(tài)。
可選的,所述方法還包括:
所述任務(wù)劃分子集群中的服務(wù)器基于預(yù)設(shè)策略,動態(tài)維護(hù)所述數(shù)據(jù)庫分表中各待計(jì)算數(shù)據(jù)條目的計(jì)算狀態(tài);
其中,所述預(yù)設(shè)策略包括:
定時(shí)將所述數(shù)據(jù)庫分表中的數(shù)據(jù)條目,設(shè)置為初始狀態(tài);
當(dāng)任一數(shù)據(jù)條目計(jì)算完成時(shí),將該數(shù)據(jù)條目設(shè)置為計(jì)算完成狀態(tài);
當(dāng)接收到任一數(shù)據(jù)條目的計(jì)算參數(shù)或者任一數(shù)據(jù)條目的計(jì)算參數(shù)發(fā)生更新時(shí),如果該數(shù)據(jù)條目為初始狀態(tài),將該數(shù)據(jù)條目設(shè)置為待計(jì)算狀態(tài);如果該數(shù)據(jù)條目為計(jì)算完成狀態(tài),將該數(shù)據(jù)條目設(shè)置為重算狀態(tài)。
可選的,所述計(jì)算任務(wù)包括定時(shí)計(jì)算任務(wù)以及實(shí)時(shí)計(jì)算任務(wù);
所述方法還包括:
所述數(shù)據(jù)讀取子集群中的服務(wù)器在從所述數(shù)據(jù)庫分表中讀取待計(jì)算數(shù)據(jù)條目時(shí),如果所述計(jì)算任務(wù)為定時(shí)計(jì)算任務(wù),優(yōu)先讀取所述待計(jì)算狀態(tài)的數(shù)據(jù)條目;
所述數(shù)據(jù)讀取子集群中的服務(wù)器在從所述數(shù)據(jù)庫分表中讀取待計(jì)算數(shù)據(jù)條目時(shí),如果所述計(jì)算任務(wù)為實(shí)時(shí)計(jì)算任務(wù),優(yōu)先讀取重算狀態(tài)的數(shù)據(jù)條目。
可選的,所述任務(wù)劃分子集群中的服務(wù)器提供批量訪問接口,以使數(shù)據(jù)讀取子集群中的服務(wù)器響應(yīng)所述任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用時(shí),從與所述調(diào)用的發(fā)起方對應(yīng)的數(shù)據(jù)庫分表中批量讀取待計(jì)算數(shù)據(jù)條目。
可選的,所述將讀取到的所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目提交至所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器,包括:
將讀取到的所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目進(jìn)行拼接,得到目標(biāo)字符串;
將所述目標(biāo)字符串下發(fā)至所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器,以由所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器針對所述目標(biāo)字符串執(zhí)行拆分,得到所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目。
本申請還提出一種基于分布式服務(wù)器集群的數(shù)據(jù)計(jì)算系統(tǒng),所述分布式服務(wù)器集群中的服務(wù)器均為多線程服務(wù)器;所述分布式服務(wù)器集群包括任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群;其中:
任務(wù)劃分子集群,任務(wù)劃分子集群中的服務(wù)器在接收到計(jì)算任務(wù)時(shí),分別向數(shù)據(jù)讀取子集群中的服務(wù)器并行發(fā)起調(diào)用;
數(shù)據(jù)讀取子集群,數(shù)據(jù)讀取子集群中的服務(wù)器響應(yīng)所述任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用,從與所述調(diào)用的發(fā)起方對應(yīng)的數(shù)據(jù)庫分表中并行讀取預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目;以及,所述數(shù)據(jù)讀取子集群中的服務(wù)器分別向數(shù)據(jù)計(jì)算子集群中的服務(wù)器并行發(fā)起調(diào)用,將讀取到的所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目提交至所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器;
數(shù)據(jù)計(jì)算子集群,基于接收到的所述待計(jì)算數(shù)據(jù)條目執(zhí)行多線程的并行計(jì)算。
可選的,所述任務(wù)劃分子集群:
所述任務(wù)劃分子集群中的服務(wù)器均在本地維護(hù)了對應(yīng)的數(shù)據(jù)庫分表;所述數(shù)據(jù)庫分表包括待計(jì)算數(shù)據(jù)條目以及與所述待計(jì)算數(shù)據(jù)條目對應(yīng)的計(jì)算狀態(tài);其中,所述計(jì)算狀態(tài)包括初始狀態(tài)、待計(jì)算狀態(tài)、計(jì)算完成狀態(tài)以及重算狀態(tài)。
可選的,所述任務(wù)劃分子集群:
所述任務(wù)劃分子集群中的服務(wù)器基于預(yù)設(shè)策略,動態(tài)維護(hù)所述數(shù)據(jù)庫分表中各待計(jì)算數(shù)據(jù)條目的計(jì)算狀態(tài);
其中,所述預(yù)設(shè)策略包括:
定時(shí)將所述數(shù)據(jù)庫分表中的數(shù)據(jù)條目,設(shè)置為初始狀態(tài);
當(dāng)任一數(shù)據(jù)條目計(jì)算完成時(shí),將該數(shù)據(jù)條目設(shè)置為計(jì)算完成狀態(tài);
當(dāng)接收到任一數(shù)據(jù)條目的計(jì)算參數(shù)或者任一數(shù)據(jù)條目的計(jì)算參數(shù)發(fā)生更新時(shí),如果該數(shù)據(jù)條目為初始狀態(tài),將該數(shù)據(jù)條目設(shè)置為待計(jì)算狀態(tài);如果該數(shù)據(jù)條目為計(jì)算完成狀態(tài),將該數(shù)據(jù)條目設(shè)置為重算狀態(tài)。
可選的,所述計(jì)算任務(wù)包括定時(shí)計(jì)算任務(wù)以及實(shí)時(shí)計(jì)算任務(wù);
所述數(shù)據(jù)讀取子集群:
所述數(shù)據(jù)讀取子集群中的服務(wù)器在從所述數(shù)據(jù)庫分表中讀取待計(jì)算數(shù)據(jù)條目時(shí),如果所述計(jì)算任務(wù)為定時(shí)計(jì)算任務(wù),優(yōu)先讀取所述待計(jì)算狀態(tài)的數(shù)據(jù)條目;
所述數(shù)據(jù)讀取子集群中的服務(wù)器在從所述數(shù)據(jù)庫分表中讀取待計(jì)算數(shù)據(jù)條目時(shí),如果所述計(jì)算任務(wù)為實(shí)時(shí)計(jì)算任務(wù),優(yōu)先讀取重算狀態(tài)的數(shù)據(jù)條目。
可選的,所述任務(wù)劃分子集群:
所述任務(wù)劃分子集群中的服務(wù)器提供批量訪問接口,以使數(shù)據(jù)讀取子集群中的服務(wù)器響應(yīng)所述任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用時(shí),從與所述調(diào)用的發(fā)起方對應(yīng)的數(shù)據(jù)庫分表中批量讀取待計(jì)算數(shù)據(jù)條目。
可選的,所述數(shù)據(jù)讀取子集群:
所述數(shù)據(jù)讀取子集群中的服務(wù)器將讀取到的所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目進(jìn)行拼接,得到目標(biāo)字符串,并將所述目標(biāo)字符串下發(fā)至所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器,以由所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器針對所述目標(biāo)字符串執(zhí)行拆分,得到所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目。
本申請中,提出一種用于大規(guī)模數(shù)據(jù)計(jì)算的分布式的服務(wù)器集群架構(gòu),該分布式的服務(wù)器集群架構(gòu)可以包括任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群,任務(wù)劃分子集群中的服務(wù)器在接收到計(jì)算任務(wù)時(shí),分別向數(shù)據(jù)讀取子集群中的服務(wù)器并行發(fā)起調(diào)用;數(shù)據(jù)讀取子集群中的服務(wù)器響應(yīng)任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用,從與所述調(diào)用的發(fā)起方對應(yīng)的數(shù)據(jù)庫分表中并行讀取預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目;數(shù)據(jù)讀取子集群中的服務(wù)器分別向數(shù)據(jù)計(jì)算子集群中的服務(wù)器并行發(fā)起調(diào)用,將讀取到的所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目提交至所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器,以由所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器基于接收到的所述待計(jì)算數(shù)據(jù)條目執(zhí)行多線程的并行計(jì)算;由于在基于該分布式的服務(wù)器集群架構(gòu)進(jìn)行數(shù)據(jù)計(jì)算時(shí),可以將計(jì)算任務(wù)劃分到不同的子集群中進(jìn)行并行計(jì)算,因此可以顯著的提升在進(jìn)行大規(guī)模數(shù)據(jù)計(jì)算時(shí)的計(jì)算性能,以及計(jì)算效率。
附圖說明
圖1是本申請一實(shí)施例提供的一種本例示出的一種現(xiàn)有技術(shù)中在進(jìn)行大規(guī)模數(shù)據(jù)計(jì)算時(shí)的系統(tǒng)架構(gòu)圖;
圖2是本申請一實(shí)施例提供的一種基于分布式服務(wù)器集群的數(shù)據(jù)計(jì)算方法的流程圖;
圖3是本申請一實(shí)施例提供的一種基于分布式服務(wù)器集群的數(shù)據(jù)計(jì)算系統(tǒng)架構(gòu)圖。
具體實(shí)施方式
請參見圖1,圖1為本例示出的一種現(xiàn)有技術(shù)中在進(jìn)行大規(guī)模數(shù)據(jù)計(jì)算時(shí)的系統(tǒng)架構(gòu)圖。
如圖1所示的系統(tǒng)架構(gòu),包括調(diào)度中心、消息中心以及計(jì)算系統(tǒng)。
其中,上述調(diào)度中心,可以對上述計(jì)算系統(tǒng)進(jìn)行任務(wù)調(diào)度,來觸發(fā)計(jì)算系統(tǒng)執(zhí)行相應(yīng)的計(jì)算任務(wù)。上述消息中心,可以將上述調(diào)度中心觸發(fā)的計(jì)算任務(wù),以消息的形式通知給上述計(jì)算系統(tǒng)。而上述計(jì)算系統(tǒng),具體可以是一服務(wù)器集群,包含若干臺作為數(shù)據(jù)計(jì)算執(zhí)行者的物理服務(wù)器。
例如,在實(shí)際應(yīng)用中,上述調(diào)度中心,可以通過定時(shí)任務(wù),觸發(fā)具體的定時(shí)計(jì)算任務(wù),并向消息中心發(fā)送對應(yīng)的定時(shí)觸發(fā)消息。消息中心在收到該定時(shí)觸發(fā)消息后,可以向計(jì)算系統(tǒng)發(fā)送一個(gè)定時(shí)任務(wù)消息,將調(diào)度中心觸發(fā)的定時(shí)計(jì)算任務(wù)通知給計(jì)算系統(tǒng)。而計(jì)算系統(tǒng),則可以向調(diào)度中心申請定時(shí)計(jì)算任務(wù),并訂閱消息中心發(fā)出的定時(shí)任務(wù)消息,來響應(yīng)調(diào)度中心觸發(fā)的定時(shí)計(jì)算任務(wù)。
在圖1示出的上述系統(tǒng)架構(gòu)中,為了應(yīng)對單臺服務(wù)器計(jì)算性能上的不足,通常會對數(shù)據(jù)庫中存儲的待處理的數(shù)據(jù)條目,進(jìn)行分庫分表。
在這種情況下,上述計(jì)算系統(tǒng)中每一個(gè)具體的物理服務(wù)器,均可以在其本地維護(hù)一個(gè)數(shù)據(jù)庫分表。當(dāng)上述計(jì)算系統(tǒng),響應(yīng)了調(diào)度中心觸發(fā)的計(jì)算任務(wù)后,系統(tǒng)中的各臺服務(wù)器可以通過各自訪問其本地的數(shù)據(jù)庫分表,來并行的執(zhí)行計(jì)算任務(wù)。
然而,在以上技術(shù)方案中,雖然通過對數(shù)據(jù)庫進(jìn)行分庫分表,可以在某種程度上緩解處理性能上的壓力,但各服務(wù)器在執(zhí)行計(jì)算任務(wù)時(shí),通常是采用單線程的方式,逐條的訪問本地的數(shù)據(jù)庫分表中的數(shù)據(jù)條目,一次計(jì)算只處理一個(gè)數(shù)據(jù)條目,因此對本地的數(shù)據(jù)庫分表的訪問壓力較大,系統(tǒng)的性能消耗過高,而且計(jì)算效率較低。
有鑒于此,本申請中提出一種用于大規(guī)模數(shù)據(jù)計(jì)算的分布式的服務(wù)器集群架構(gòu),該分布式的服務(wù)器集群架構(gòu)可以包括任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群,任務(wù)劃分子集群中的服務(wù)器在接收到計(jì)算任務(wù)時(shí),分別向數(shù)據(jù)讀取子集群中的服務(wù)器并行發(fā)起調(diào)用;數(shù)據(jù)讀取子集群中的服務(wù)器響應(yīng)任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用,從與所述調(diào)用的發(fā)起方對應(yīng)的數(shù)據(jù)庫分表中并行讀取預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目;數(shù)據(jù)讀取子集群中的服務(wù)器分別向數(shù)據(jù)計(jì)算子集群中的服務(wù)器并行發(fā)起調(diào)用,將讀取到的所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目提交至所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器,以由所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器基于接收到的所述待計(jì)算數(shù)據(jù)條目執(zhí)行多線程的并行計(jì)算;由于在基于該分布式的服務(wù)器集群架構(gòu)進(jìn)行數(shù)據(jù)計(jì)算時(shí),可以將計(jì)算任務(wù)劃分到不同的子集群中進(jìn)行并行計(jì)算,因此可以顯著的提升在進(jìn)行大規(guī)模數(shù)據(jù)計(jì)算時(shí)的計(jì)算性能,以及計(jì)算效率。
下面通過具體實(shí)施例并結(jié)合具體的應(yīng)用場景對本申請進(jìn)行描述。
請參考圖2,圖2是本申請一實(shí)施例提供的基于分布式服務(wù)器集群的數(shù)據(jù)計(jì)算方法,應(yīng)用于分布式服務(wù)器集群,該分布式服務(wù)器集群包括任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群,所述方法執(zhí)行以下步驟:
步驟201,任務(wù)劃分子集群中的服務(wù)器在接收到計(jì)算任務(wù)時(shí),分別向數(shù)據(jù)讀取子集群中的服務(wù)器并行發(fā)起調(diào)用;
步驟202,數(shù)據(jù)讀取子集群中的服務(wù)器響應(yīng)所述任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用,從與所述調(diào)用的發(fā)起方對應(yīng)的數(shù)據(jù)庫分表中并行讀取預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目;
步驟203,數(shù)據(jù)讀取子集群中的服務(wù)器分別向數(shù)據(jù)計(jì)算子集群中的服務(wù)器并行發(fā)起調(diào)用,將讀取到的所述預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目下發(fā)至數(shù)據(jù)計(jì)算子集群中的服務(wù)器,以由所述數(shù)據(jù)計(jì)算子集群中的服務(wù)器基于接收到的所述待計(jì)算數(shù)據(jù)條目執(zhí)行多線程的并行計(jì)算。
上述分布式服務(wù)器集群,包含若干臺多線程服務(wù)器。所謂多線程服務(wù)器,是指可以同時(shí)并行運(yùn)行多個(gè)線程的服務(wù)器,每一個(gè)線程可以執(zhí)行一個(gè)具體的計(jì)算任務(wù)。
為了提升整體的計(jì)算性能和計(jì)算效率,上述分布式服務(wù)器集群,將采用一種分層架構(gòu)。在基于該分布式的服務(wù)器集群的架構(gòu)進(jìn)行數(shù)據(jù)計(jì)算時(shí),可以將計(jì)算任務(wù)劃分到不同的子集群中進(jìn)行并行計(jì)算,以此來提升在進(jìn)行大規(guī)模數(shù)據(jù)計(jì)算時(shí)的計(jì)算性能,以及計(jì)算效率。
請參見圖3,圖3為本例示出的一種基于分布式服務(wù)器集群的數(shù)據(jù)計(jì)算系統(tǒng)架構(gòu)圖。
在圖3所示出的系統(tǒng)架構(gòu)中,仍然可以包括調(diào)度中心、消息中心以及計(jì)算系統(tǒng)。
所述調(diào)度中心以及所述消息中心均可以是一具體的服務(wù)器。作為消息中心的服務(wù)器,可以與作為調(diào)度中心的服務(wù)器保持連接,用以接收調(diào)度中心在觸發(fā)相應(yīng)的計(jì)算任務(wù)時(shí),發(fā)出的觸發(fā)消息。
與現(xiàn)有技術(shù)不同的是,在本例中,圖3所示出的系統(tǒng)機(jī)構(gòu)中,作為上述計(jì)算系統(tǒng)的服務(wù)器集群,具體可以是一分布式服務(wù)器集群。
并且,上述分布式服務(wù)器集群中所包含的服務(wù)器,可以按照功能進(jìn)行細(xì)分,劃分為任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群。在任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群中,均可以各自包含若干臺獨(dú)立的服務(wù)器。
如圖3所示,任務(wù)劃分子集群中的服務(wù)器,可以分別與作為消息中心的服務(wù)器保持連接,用以接收消息中心發(fā)出的任務(wù)消息,來響應(yīng)調(diào)度中心觸發(fā)的計(jì)算任務(wù)。
數(shù)據(jù)讀取子集群中的服務(wù)器,可以分別與任務(wù)劃分子集群中所有的服務(wù)器保持連接;數(shù)據(jù)計(jì)算子集群中的服務(wù)器可以分別與數(shù)據(jù)讀取子集群中所有的服務(wù)器保持連接。
即在本例中,任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群中的服務(wù)器之間的連接,將呈現(xiàn)一種星形的耦合狀態(tài),任務(wù)劃分子集群中的任意一臺服務(wù)器,可以與數(shù)據(jù)讀取子集群中所有的服務(wù)器保持連接,而數(shù)據(jù)讀取子集群中的任意一臺服務(wù)器,也可以與數(shù)據(jù)計(jì)算子集群中所有的服務(wù)器保持連接。
在本例中,上述任務(wù)劃分子集群,可以包含若干臺用于任務(wù)劃分的服務(wù)器。
一方面,任務(wù)劃分子集群中的這些服務(wù)器可以訂閱消息中心發(fā)出的任務(wù)消息,來響應(yīng)調(diào)度中心觸發(fā)的計(jì)算任務(wù),并在響應(yīng)了調(diào)度中心觸發(fā)的計(jì)算任務(wù)后,并行調(diào)用上述數(shù)據(jù)讀取子集群中的服務(wù)器,將該計(jì)算任務(wù)下發(fā)至上述數(shù)據(jù)讀取子集群中的服務(wù)器,由上述數(shù)據(jù)讀取子集群中的服務(wù)器,來并行的讀取與該計(jì)算任務(wù)對應(yīng)的數(shù)據(jù)條目。
另一方面,在初始狀態(tài)下,還可以對數(shù)據(jù)庫中的存儲的待計(jì)算的數(shù)據(jù)條目進(jìn)行分庫分表,并在任務(wù)劃分子集群中的這些服務(wù)器本地,分別維護(hù)一張數(shù)據(jù)庫分表。
其中,在示出的一種實(shí)施方式中,上述數(shù)據(jù)庫分表存儲的具體內(nèi)容包括待計(jì)算的數(shù)據(jù)條目以及與上述待計(jì)算數(shù)據(jù)條目對應(yīng)的計(jì)算狀態(tài);上述計(jì)算狀態(tài)包括初始狀態(tài)、待計(jì)算狀態(tài)、計(jì)算完成狀態(tài)以及重算狀態(tài)。
另外,上述任務(wù)劃分子集群中的服務(wù)器,還可以基于預(yù)設(shè)策略,動態(tài)維護(hù)在其本地?cái)?shù)據(jù)庫分表中各待計(jì)算的數(shù)據(jù)條目的計(jì)算狀態(tài)。
在示出的一種實(shí)施方式中,上述預(yù)設(shè)策略具體可以包括如下策略:
定時(shí)將數(shù)據(jù)庫分表中的數(shù)據(jù)條目,設(shè)置為初始狀態(tài);
當(dāng)數(shù)據(jù)庫分表中任一數(shù)據(jù)條目計(jì)算完成時(shí),將該數(shù)據(jù)條目設(shè)置為計(jì)算完成狀態(tài);當(dāng)接收到任一數(shù)據(jù)條目的計(jì)算參數(shù)或者任一數(shù)據(jù)條目的計(jì)算參數(shù)發(fā)生更新時(shí),如果該數(shù)據(jù)條目為初始狀態(tài),將該數(shù)據(jù)條目設(shè)置為待計(jì)算狀態(tài);如果該數(shù)據(jù)條目為計(jì)算完成狀態(tài),將該數(shù)據(jù)條目設(shè)置為重算狀態(tài)。
其中,需要說明的是,上述計(jì)算參數(shù),是指在針對該數(shù)據(jù)條目進(jìn)行計(jì)算時(shí),必不可少的參數(shù)。
例如,在基金的收益計(jì)算的應(yīng)用場景中,上述數(shù)據(jù)條目可以是一條包含用戶基金賬戶、用戶購買的基金代碼、資產(chǎn)等信息的記錄。由于基金的收益計(jì)算,為需要結(jié)合每日更新的最新凈值,執(zhí)行的一種周期性計(jì)算,而基金凈值通常是基金的收益計(jì)算必不可少的參數(shù),因此在這種場景中,基金凈值則是與該記錄對應(yīng)的計(jì)算參數(shù)。
在維護(hù)該記錄的計(jì)算狀態(tài)時(shí),由于基金收益計(jì)算為每日進(jìn)行的周期性計(jì)算,因此可以在每日0點(diǎn),定時(shí)將上述數(shù)據(jù)庫分表中的數(shù)據(jù)條目設(shè)置為初始狀態(tài),同時(shí)可以通過判斷是否接收到當(dāng)日的基金凈值,或者當(dāng)日的基金凈值是否更新,來確定該記錄是否需要計(jì)算或者重算,以維護(hù)該記錄的計(jì)算狀態(tài)。
當(dāng)然,上述預(yù)設(shè)策略中所包含的策略,并不限于以上示出的具體策略,在實(shí)際應(yīng)用中,也可以在以上示出的具體策略的基礎(chǔ)上進(jìn)行改進(jìn),或者引入其它策略;
例如,在實(shí)現(xiàn)時(shí),在以上示出的策略的基礎(chǔ)上,還可以引入數(shù)據(jù)條目計(jì)算完成的日期的判斷;當(dāng)接收到任一數(shù)據(jù)條目的計(jì)算參數(shù),或者任一數(shù)據(jù)條目的計(jì)算參數(shù)發(fā)生更新時(shí),如果該數(shù)據(jù)條目為計(jì)算完成狀態(tài),可以進(jìn)一步判斷計(jì)算完成的日期,如果是當(dāng)日,則可以將該數(shù)據(jù)條目設(shè)置為重算狀態(tài);如果昨日,則可以將該數(shù)據(jù)條目設(shè)置為待計(jì)算狀態(tài),在本例中不再一一列舉。
在本例中,上述數(shù)據(jù)讀取子集群,可以包含若干臺用于數(shù)據(jù)讀取的服務(wù)器。這些服務(wù)器可以響應(yīng)任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用,從調(diào)用發(fā)起方本地維護(hù)的數(shù)據(jù)庫分表中讀取預(yù)設(shè)數(shù)量的數(shù)據(jù)條目,然后通過并行調(diào)用數(shù)據(jù)讀取子集群中的服務(wù)器,將讀取到的預(yù)設(shè)數(shù)量的數(shù)據(jù)條目,下發(fā)至數(shù)據(jù)計(jì)算子集群中的服務(wù)器,由上述數(shù)據(jù)讀取子集群中的服務(wù)器,來并行的執(zhí)行最終的計(jì)算任務(wù)。
在本例中,上述數(shù)據(jù)讀取子集群,可以包含若干臺用于數(shù)據(jù)計(jì)算的服務(wù)器。這些服務(wù)器可以響應(yīng)數(shù)據(jù)讀取子集群中的服務(wù)器發(fā)起的調(diào)用,基于接收到的由調(diào)用發(fā)起方下發(fā)的數(shù)據(jù)條目,執(zhí)行多線程的并行計(jì)算。
以下結(jié)合圖3對調(diào)度中心觸發(fā)一次計(jì)算任務(wù)后,上述分布式服務(wù)器集群中各子集群中的服務(wù)器的計(jì)算交互過程進(jìn)行詳細(xì)描述。
在本例中,調(diào)度中心觸發(fā)一次計(jì)算任務(wù)后,可以通過消息中心向任務(wù)劃分子集群中所有的服務(wù)器,分別發(fā)送任務(wù)消息。
其中,需要說明的是,調(diào)度中心觸發(fā)的計(jì)算任務(wù),可以包括定時(shí)計(jì)算任務(wù),以及實(shí)時(shí)計(jì)算任務(wù)。
當(dāng)調(diào)度中心觸發(fā)的計(jì)算任務(wù)為定時(shí)計(jì)算任務(wù)時(shí),可以通過消息中心向任務(wù)劃分子集群中所有的服務(wù)器,分別發(fā)送定時(shí)任務(wù)消息;當(dāng)調(diào)度中心觸發(fā)的計(jì)算任務(wù)為實(shí)時(shí)計(jì)算任務(wù)時(shí),可以通過消息中心向任務(wù)劃分子集群中所有的服務(wù)器,分別發(fā)送實(shí)時(shí)任務(wù)消息。
當(dāng)任務(wù)劃分子集群中的服務(wù)器在接收到消息中心發(fā)出的任務(wù)消息后,確定接收到調(diào)度中心觸發(fā)的計(jì)算任務(wù),任務(wù)劃分子集群中的服務(wù)器可以分別并行調(diào)用數(shù)據(jù)讀取子集群中的服務(wù)器,來觸發(fā)讀取子集群中的服務(wù)器,并行的讀取與該計(jì)算任務(wù)對應(yīng)的數(shù)據(jù)條目。
此時(shí)對于讀取子集群中的任意一臺服務(wù)器來說,都會被任務(wù)劃分子集群中所有的服務(wù)器同時(shí)調(diào)用。
在這種情況下,讀取子集群中的服務(wù)器可以預(yù)先建立一個(gè)線程池,在接收到任務(wù)劃分子集群中的任一服務(wù)器發(fā)起的調(diào)用時(shí),可以從線程池中隨機(jī)啟動一個(gè)線程,來響應(yīng)該服務(wù)器發(fā)起的調(diào)用。
例如,在實(shí)現(xiàn)時(shí),當(dāng)讀取子集群中的服務(wù)器為基于Java的框架時(shí),可以使用executor線程管理工具從線程池中,為發(fā)起調(diào)用的服務(wù)器隨機(jī)啟動一個(gè)線程。其中,通過executor線程管理工具從線程池中啟動線程的具體實(shí)現(xiàn)過程,在本例中不再詳述,本領(lǐng)域技術(shù)人員可以參考相關(guān)技術(shù)中的記載。
通過這種方式,當(dāng)數(shù)據(jù)讀取子集群中的服務(wù)器同時(shí)被任務(wù)劃分子集群中所有的服務(wù)器調(diào)用時(shí),可以從線程池中為調(diào)用發(fā)起方,分配不同的線程來加以區(qū)分,通過不同的線程來響應(yīng)不同的調(diào)用發(fā)起方的任務(wù)。
其中,任務(wù)劃分子集群中的服務(wù)器調(diào)用數(shù)據(jù)讀取子集群中的服務(wù)器時(shí)的具體調(diào)用方式,在本例中不進(jìn)行特別限定;例如,在示出的一種實(shí)施方式中,可以采用單向調(diào)用(oneway調(diào)用)。
在本例中,讀取子集群中的服務(wù)器在響應(yīng)任務(wù)劃分子集群中的各服務(wù)器發(fā)起的調(diào)用時(shí),可以執(zhí)行為各調(diào)用發(fā)起方的服務(wù)器啟動的線程,從各調(diào)用發(fā)起方的服務(wù)器對應(yīng)的數(shù)據(jù)庫分表中,并行的讀取預(yù)設(shè)數(shù)量的數(shù)據(jù)條目。
例如,假設(shè)讀取子集群中的某一服務(wù)器線程池為10,該服務(wù)器被任務(wù)劃分子集群中的10臺服務(wù)器同時(shí)調(diào)用,那么可以從線程池中為這10臺調(diào)用發(fā)起方的服務(wù)器分別啟動一個(gè)線程,然后同時(shí)執(zhí)行這10個(gè)線程,從這10臺調(diào)用發(fā)起方的服務(wù)器本地的數(shù)據(jù)庫分表中,并行的讀取數(shù)據(jù)。
其中,上述預(yù)設(shè)數(shù)量在本例中不進(jìn)行特別限定,在實(shí)際應(yīng)用中可以基于上述數(shù)據(jù)計(jì)算子集群中的服務(wù)器具體的數(shù)據(jù)計(jì)算能力進(jìn)行設(shè)定;
例如,當(dāng)上述計(jì)算任務(wù)為定時(shí)計(jì)算任務(wù)時(shí),如果定時(shí)計(jì)算任務(wù)的觸發(fā)頻率過快(比如1分鐘),此時(shí)數(shù)據(jù)庫分表中可供計(jì)算的數(shù)據(jù)條目通常較少;在這種情況下,讀取到的數(shù)據(jù)條目可能無法適配數(shù)據(jù)計(jì)算子集群中的服務(wù)器的實(shí)際計(jì)算能力,從而造成數(shù)據(jù)計(jì)算子集群中的服務(wù)器計(jì)算資源的浪費(fèi);
相反,如果定時(shí)計(jì)算任務(wù)的觸發(fā)頻率過慢,此時(shí)數(shù)據(jù)庫分表中可供計(jì)算的數(shù)據(jù)條目通常較多;在這種情況下,可供計(jì)算的數(shù)據(jù)條目超出數(shù)據(jù)計(jì)算子集群中的服務(wù)器的實(shí)際計(jì)算能力,可能需要多次調(diào)度和數(shù)據(jù)讀取。
因此,在實(shí)際應(yīng)用中,可以根據(jù)數(shù)據(jù)計(jì)算子集群中的服務(wù)器的實(shí)際計(jì)算能力,來設(shè)定定時(shí)計(jì)算任務(wù)的頻率,從而可以保證讀取到的數(shù)據(jù)條目的數(shù)據(jù),與計(jì)算子集群中的服務(wù)器的實(shí)際計(jì)算能力能夠適配,從而最大程度的充分利用計(jì)算子集群中的服務(wù)器的計(jì)算能力。
同時(shí),為了提升數(shù)據(jù)讀取效率,降低由于多次頻繁讀取導(dǎo)致的開銷過大的問題,上述任務(wù)劃分子集群中的服務(wù)器均可以在其本地提供一個(gè)批量訪問接口,從而數(shù)據(jù)讀取子集群中的服務(wù)器在響應(yīng)任務(wù)劃分子集群中的服務(wù)器發(fā)起的調(diào)用時(shí),可以通過訪問該批量接口,從調(diào)用發(fā)起方其本地維護(hù)的數(shù)據(jù)庫分表中,批量的讀取數(shù)據(jù)條目。
在本例中,如前所述,調(diào)度中心觸發(fā)的計(jì)算任務(wù)可以包括實(shí)時(shí)計(jì)算任務(wù),也可以包括定時(shí)計(jì)算任務(wù)。
其中,在調(diào)度中心觸發(fā)的計(jì)算任務(wù),為實(shí)時(shí)計(jì)算任務(wù)以及定時(shí)計(jì)算任務(wù)的情況下,數(shù)據(jù)讀取子集群中的服務(wù)器,在從調(diào)用發(fā)起方其本地維護(hù)的數(shù)據(jù)庫分表中,讀取數(shù)據(jù)條目的具體方式也可以不同。
在示出的一種實(shí)施方式中,如果上述計(jì)算任務(wù)為定時(shí)計(jì)算任務(wù),數(shù)據(jù)讀取子集群中的服務(wù)器,在從調(diào)用發(fā)起方其本地維護(hù)的數(shù)據(jù)庫分表中,讀取數(shù)據(jù)條目時(shí),可以優(yōu)先讀取數(shù)據(jù)庫分表中被設(shè)置為待計(jì)算狀態(tài)的數(shù)據(jù)條目。
在這種情況下,可以通過觸發(fā)定時(shí)計(jì)算任務(wù),對數(shù)據(jù)庫分表中尚未完成計(jì)算的數(shù)據(jù)條目優(yōu)先進(jìn)行計(jì)算。
在示出的另一種實(shí)施方式中,如果上述計(jì)算任務(wù)為實(shí)時(shí)計(jì)算任務(wù),數(shù)據(jù)讀取子集群中的服務(wù)器,在從調(diào)用發(fā)起方其本地維護(hù)的數(shù)據(jù)庫分表中,讀取數(shù)據(jù)條目時(shí),可以優(yōu)先讀取數(shù)據(jù)庫分表中被設(shè)置為重算狀態(tài)的數(shù)據(jù)條目。
在這種情況下,可以通過觸發(fā)實(shí)時(shí)計(jì)算任務(wù),對數(shù)據(jù)庫分表中已經(jīng)完成計(jì)算,但計(jì)算參數(shù)發(fā)生更新的數(shù)據(jù)條目實(shí)時(shí)的進(jìn)行計(jì)算。
在本例中,當(dāng)數(shù)據(jù)讀取子集群中的各服務(wù)器,通過執(zhí)行為各調(diào)用發(fā)起方的服務(wù)器啟動的線程,從各調(diào)用發(fā)起方的服務(wù)器其本地維護(hù)的數(shù)據(jù)庫分表中,批量讀取到預(yù)設(shè)數(shù)量的數(shù)據(jù)條目后,可以分別向數(shù)據(jù)計(jì)算子集群中的服務(wù)器并行發(fā)起調(diào)用,將讀取到的預(yù)設(shè)數(shù)量的數(shù)據(jù)條目,下發(fā)至數(shù)據(jù)計(jì)算子集群中的服務(wù)器,由上述數(shù)據(jù)讀取子集群中的服務(wù)器,來并行的執(zhí)行最終的計(jì)算任務(wù)。
此時(shí)對于計(jì)算子集群中的任意一臺服務(wù)器來說,都會被數(shù)據(jù)讀取子集群中所有的服務(wù)器同時(shí)調(diào)用。
在這種情況下,計(jì)算子集群中的服務(wù)器也可以預(yù)先建立一個(gè)線程池,在接收到數(shù)據(jù)讀子集群中的任一服務(wù)器發(fā)起的調(diào)用時(shí),可以從線程池中隨機(jī)啟動一個(gè)線程,來響應(yīng)該服務(wù)器發(fā)起的調(diào)用,接收該服務(wù)器下發(fā)的數(shù)據(jù)條目,并通過執(zhí)行該線程對接收到的數(shù)據(jù)條目進(jìn)行計(jì)算。
通過這種方式,當(dāng)數(shù)據(jù)計(jì)算子集群中的服務(wù)器同時(shí)被數(shù)據(jù)讀取子集群中所有的服務(wù)器調(diào)用時(shí),可以從線程池中為調(diào)用發(fā)起方,分配不同的線程來加以區(qū)分,通過不同的線程來響應(yīng)不同的調(diào)用發(fā)起方的任務(wù),并最終通過同時(shí)執(zhí)行多線程,來完成針對數(shù)據(jù)讀取子集群中所有的服務(wù)器下發(fā)的數(shù)據(jù)條目的并行計(jì)算。
其中,在示出的一種實(shí)施方式中,數(shù)據(jù)讀取子集群中的各服務(wù)器,在將批量讀取到預(yù)設(shè)數(shù)量的數(shù)據(jù)條目下發(fā)給數(shù)據(jù)計(jì)算子集群中的服務(wù)器時(shí),可以通過與數(shù)據(jù)計(jì)算子集群中的服務(wù)器約定方式,對讀取到的預(yù)設(shè)數(shù)量的待計(jì)算數(shù)據(jù)條目進(jìn)行拼接,得到一個(gè)目標(biāo)字符串,然后將該目標(biāo)字符串下發(fā)給數(shù)據(jù)計(jì)算子集群中的服務(wù)器。
數(shù)據(jù)計(jì)算子集群中的服務(wù)器在接收到該目標(biāo)字符串時(shí),可以按照約定的方式針對該目標(biāo)字符串執(zhí)行拆分,將該目標(biāo)字符串拆分得成預(yù)設(shè)數(shù)量的待計(jì)算的數(shù)據(jù)條目。
通過這種方式,可以提升數(shù)據(jù)條目的下發(fā)效率,同時(shí)使得數(shù)據(jù)計(jì)算子集群中的服務(wù)器,可以通過單個(gè)線程來批量處理一批數(shù)據(jù)條目,而不再是追條數(shù)據(jù)條目進(jìn)行計(jì)算,從而可以提升計(jì)算效率。
在本例中,數(shù)據(jù)計(jì)算子集群中的服務(wù)器,在通過同時(shí)執(zhí)行多線程,來完成針對數(shù)據(jù)讀取子集群中所有的服務(wù)器下發(fā)的數(shù)據(jù)條目的并行計(jì)算時(shí),可以查詢與該數(shù)據(jù)條目對應(yīng)的計(jì)算參數(shù),然后基于查詢到的計(jì)算參數(shù),來完成針對各數(shù)據(jù)條目的并行計(jì)算。
其中,各數(shù)據(jù)條目對應(yīng)的計(jì)算參數(shù),可以存儲在上述數(shù)據(jù)庫分表中,也可以存儲在其它的第三方系統(tǒng)中,在查詢各數(shù)據(jù)條目對應(yīng)的計(jì)算參數(shù)時(shí),為了降低由于多次頻繁讀取導(dǎo)致的開銷過大的問題,仍然可以通過訪問批量接口來批量的進(jìn)行查詢。
例如,在基金的收益計(jì)算的應(yīng)用場景中,上述數(shù)據(jù)條目可以是一條包含用戶基金賬戶、用戶購買的基金代碼、用戶購買的基金對應(yīng)的資產(chǎn)等信息的記錄,而計(jì)算基金的收益所需的計(jì)算參數(shù),通??梢园ɑ饍糁怠⒒鸱蓊~、基金的買入總額和贖回總額等參數(shù),因此在查詢各數(shù)據(jù)條目對應(yīng)的計(jì)算參數(shù)時(shí),可以從上述數(shù)據(jù)庫分表,或者與第三方系統(tǒng)(比如基金公司)對接,來批量查詢基金凈值、基金份額、基金的買入總額和贖回總額等計(jì)算參數(shù),然后完成基金的收益計(jì)算。
其中,數(shù)據(jù)計(jì)算子集群中的服務(wù)器,在通過同時(shí)執(zhí)行多線程,針對數(shù)據(jù)讀取子集群中的服務(wù)器下發(fā)的數(shù)據(jù)條目進(jìn)行并行計(jì)算的過程中,當(dāng)任一線程提前完成計(jì)算任務(wù),則可以立即結(jié)束返回。
例如,當(dāng)上述計(jì)算任務(wù)為定時(shí)計(jì)算任務(wù)時(shí),在現(xiàn)有技術(shù)中,啟用的線程通常需要在一輪定時(shí)任務(wù)結(jié)束后,才能結(jié)束返回,而如果某一個(gè)線程在定時(shí)任務(wù)前就已完成了計(jì)算任務(wù),那么就會造成該線程性能上的浪費(fèi)。因此,在這種情況下,如果某一個(gè)線程在一輪定時(shí)任務(wù)結(jié)束之前,提前完成了計(jì)算任務(wù),則可以立即結(jié)束返回。通過這種方式,可以避免該線程在性能上的浪費(fèi)。
在本例中,當(dāng)數(shù)據(jù)計(jì)算子集群中的服務(wù)器,基于查詢到的計(jì)算參數(shù),完成針對各數(shù)據(jù)條目的并行計(jì)算得到計(jì)算結(jié)果后,可以向任務(wù)劃分子集群中對應(yīng)的服務(wù)器返回計(jì)算結(jié)果,從而使得任務(wù)劃分子集群中的服務(wù)器,可以對計(jì)算結(jié)果進(jìn)行記錄,并基于接收到的該計(jì)算結(jié)果,對本地維護(hù)的上述數(shù)據(jù)庫分表中相應(yīng)的數(shù)據(jù)條目的計(jì)算狀態(tài)進(jìn)行更新。
當(dāng)然,數(shù)據(jù)計(jì)算子集群中的服務(wù)器,在針對數(shù)據(jù)讀取子集群中的服務(wù)器下發(fā)的數(shù)據(jù)條目進(jìn)行計(jì)算的過程中,如果計(jì)算的數(shù)據(jù)條目的計(jì)算狀態(tài)為計(jì)算完成狀態(tài),此時(shí)可以直接將該數(shù)據(jù)條目的計(jì)算結(jié)果向任務(wù)劃分子集群中對應(yīng)的服務(wù)器返回即可,而不需要進(jìn)行重復(fù)計(jì)算。
通過以上實(shí)施例可見,由于在基于上述分布式的服務(wù)器集群架構(gòu)進(jìn)行數(shù)據(jù)計(jì)算時(shí),可以將計(jì)算任務(wù)劃分到不同的子集群中進(jìn)行并行計(jì)算,由數(shù)據(jù)讀取子集群中的服務(wù)器執(zhí)行并行的讀取數(shù)據(jù)條目,由數(shù)據(jù)計(jì)算子集群中的服務(wù)器執(zhí)行并行的數(shù)據(jù)條目計(jì)算,從而可以顯著的提升在進(jìn)行大規(guī)模數(shù)據(jù)計(jì)算時(shí)的計(jì)算性能,以及計(jì)算效率。
以下結(jié)合基金收益計(jì)算的應(yīng)用場景,并結(jié)合圖3示出的系統(tǒng)架構(gòu)對以上實(shí)施例中的技術(shù)方案進(jìn)行詳細(xì)描述。
需要說明的是,以基金收益計(jì)算的應(yīng)用場景為例,僅為示例性說明,在實(shí)際應(yīng)用中,如圖3所示的系統(tǒng)架構(gòu),也可以應(yīng)用在其它大規(guī)模數(shù)據(jù)計(jì)算的應(yīng)用場景;例如,也可以應(yīng)用在諸如大型電商平臺、支付平臺中的大規(guī)模數(shù)據(jù)計(jì)算。
在本例中,在基金的收益計(jì)算的應(yīng)用場景中,待計(jì)算的數(shù)據(jù)條目通??梢允且粭l包含用戶基金賬戶、用戶購買的基金代碼、用戶購買的基金對應(yīng)的資產(chǎn)等信息的記錄,而計(jì)算基金的收益所需的計(jì)算參數(shù),通??梢园ɑ饍糁?、基金份額、基金的買入總額和贖回總額等參數(shù)。
請參見圖1,在現(xiàn)有技術(shù)中,作為計(jì)算系統(tǒng)的服務(wù)器集群中每一個(gè)具體的物理服務(wù)器,均可以在其本地維護(hù)一個(gè)數(shù)據(jù)庫分表。該數(shù)據(jù)分表包含若干條包含用戶基金賬戶、用戶購買的基金代碼、用戶購買的基金對應(yīng)的資產(chǎn)等信息的記錄。
上述計(jì)算系統(tǒng),在響應(yīng)了調(diào)度中心觸發(fā)的計(jì)算任務(wù)后,系統(tǒng)中的各臺服務(wù)器可以采用單線程的方式,逐條的訪問本地的數(shù)據(jù)庫分表中的記錄,來并行的執(zhí)行計(jì)算任務(wù)。
通過這種方式,由于一次計(jì)算只處理一個(gè)條記錄,因此本地的數(shù)據(jù)庫分表的訪問壓力較大,系統(tǒng)的性能消耗過高,而且計(jì)算效率較低。
請參見圖3,在本例中,作為計(jì)算系統(tǒng)的服務(wù)器集群為一種分布式的服務(wù)器集群。該分布式的服務(wù)器集群,將采用一種分層架構(gòu),該分布式服務(wù)器集群中所包含的服務(wù)器,均為多線程服務(wù)器,可以被劃分為任務(wù)劃分子集群、數(shù)據(jù)讀取子集群以及數(shù)據(jù)計(jì)算子集群。
調(diào)度中心觸發(fā)一次計(jì)算任務(wù)后,可以通過消息中心向任務(wù)劃分子集群中所有的服務(wù)器,分別發(fā)送任務(wù)消息。任務(wù)劃分子集群中的服務(wù)器,在接收到該任務(wù)消息后,可以分別并行調(diào)用數(shù)據(jù)讀取子集群中的服務(wù)器。
讀取子集群中的服務(wù)器可以預(yù)先建立一個(gè)線程池,在接收到任務(wù)劃分子集群中的任一服務(wù)器發(fā)起的調(diào)用時(shí),可以從線程池中隨機(jī)啟動一個(gè)線程,來響應(yīng)該服務(wù)器發(fā)起的調(diào)用,從該服務(wù)器對應(yīng)的數(shù)據(jù)庫分表中,批量讀取預(yù)設(shè)數(shù)量的記錄。
通過這種方式,讀取子集群中的服務(wù)器在響應(yīng)任務(wù)劃分子集群中的各服務(wù)器發(fā)起的調(diào)用時(shí),可以執(zhí)行為各調(diào)用發(fā)起方的服務(wù)器啟動的線程,從各調(diào)用發(fā)起方的服務(wù)器對應(yīng)的數(shù)據(jù)庫分表中,并行的讀取預(yù)設(shè)數(shù)量的記錄。
數(shù)據(jù)讀取子集群中的各服務(wù)器,還可以分別向數(shù)據(jù)計(jì)算子集群中的服務(wù)器并行發(fā)起調(diào)用,將讀取到的預(yù)設(shè)數(shù)量的記錄,下發(fā)至數(shù)據(jù)計(jì)算子集群中的服務(wù)器,由上述數(shù)據(jù)讀取子集群中的服務(wù)器,來并行的執(zhí)行最終的收益計(jì)算。
計(jì)算子集群中的服務(wù)器也可以預(yù)先建立一個(gè)線程池,在接收到數(shù)據(jù)讀子集群中的任一服務(wù)器發(fā)起的調(diào)用時(shí),可以從線程池中隨機(jī)啟動一個(gè)線程,來響應(yīng)該服務(wù)器發(fā)起的調(diào)用,接收該服務(wù)器下發(fā)的記錄,并通過執(zhí)行該線程對接收到的記錄進(jìn)行計(jì)算。
通過這種方式,當(dāng)數(shù)據(jù)計(jì)算子集群中的服務(wù)器同時(shí)被數(shù)據(jù)讀取子集群中所有的服務(wù)器調(diào)用時(shí),可以從線程池中為調(diào)用發(fā)起方,分配不同的線程來加以區(qū)分,通過不同的線程來響應(yīng)不同的調(diào)用發(fā)起方的任務(wù),并最終通過同時(shí)執(zhí)行多線程,來并行查找與數(shù)據(jù)讀取子集群中所有的服務(wù)器下發(fā)的記錄對應(yīng)的基金凈值、基金份額、基金的買入總額和贖回總額等計(jì)算參數(shù),并完成最終的并行計(jì)算,為每一條記錄分別計(jì)算出對應(yīng)的基金收益,并向任務(wù)劃分子集群中對應(yīng)的服務(wù)器返回計(jì)算結(jié)果。
可見,采用圖3所示出的系統(tǒng)架構(gòu)進(jìn)行基金收益計(jì)算,與采用圖1所示出的系統(tǒng)架構(gòu)進(jìn)行基金收益計(jì)算相比,由于圖3所示出的系統(tǒng)架構(gòu)中的服務(wù)器均為多線程服務(wù)器,而且在整個(gè)計(jì)算過程中,記錄的讀取,計(jì)算參數(shù)的查找,以及最終的計(jì)算,都是由若干臺多線程的服務(wù)器相互配合并行執(zhí)行,因此與采用圖1所示出的系統(tǒng)架構(gòu),通過單線程逐條計(jì)算數(shù)據(jù)庫分表中記錄的基金收益計(jì)算方式相比,可以顯著的提升計(jì)算性能和計(jì)算效率。
本領(lǐng)域技術(shù)人員在考慮說明書及實(shí)踐這里公開的發(fā)明后,將容易想到本申請的其它實(shí)施方案。本申請旨在涵蓋本申請的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本申請的一般性原理并包括本申請未公開的本技術(shù)領(lǐng)域中的公知常識或慣用技術(shù)手段。說明書和實(shí)施例僅被視為示例性的,本申請的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本申請并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本申請的范圍僅由所附的權(quán)利要求來限制。
以上所述僅為本申請的較佳實(shí)施例而已,并不用以限制本申請,凡在本申請的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請保護(hù)的范圍之內(nèi)。