国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

計(jì)算密集型大流量數(shù)據(jù)的接力計(jì)算與動(dòng)態(tài)分流處理

2021-09-18 06:22包秋蘭廖雪花朱洲森
計(jì)算機(jī)應(yīng)用 2021年9期
關(guān)鍵詞:密集型數(shù)據(jù)量分流

廖 佳,陳 揚(yáng),包秋蘭,廖雪花,朱洲森*

(1.四川師范大學(xué)物理與電子工程學(xué)院,成都 610101;2.四川師范大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,成都 610101)

(*通信作者電子郵箱992827658@qq.com)

0 引言

隨著社會(huì)的數(shù)字化轉(zhuǎn)型、互聯(lián)網(wǎng)的蓬勃發(fā)展以及國民經(jīng)濟(jì)的快速崛起,世界各個(gè)領(lǐng)域的數(shù)據(jù)呈爆炸式增長,大流量數(shù)據(jù)的處理問題引起了世界各國專家的廣泛關(guān)注[1-2]。數(shù)據(jù)作為信息的載體,已經(jīng)成為包括互聯(lián)網(wǎng)經(jīng)濟(jì)、交通物流和社會(huì)生活等各個(gè)領(lǐng)域中最核心的資源[3]。在這些領(lǐng)域中,高效的計(jì)算能力是必不可少的條件之一。

我國在大數(shù)據(jù)計(jì)算應(yīng)用領(lǐng)域發(fā)展迅速,主要集中在I/O密集型[4]和計(jì)算密集型[5]。目前I/O 密集型數(shù)據(jù)處理在我國應(yīng)用領(lǐng)域先進(jìn)而成熟,典型應(yīng)用場(chǎng)景如春運(yùn)期間搶購火車票、購物網(wǎng)站的“雙十一”搶購商品、電商平臺(tái)的秒殺搶購等。對(duì)于這些I/O 密集型應(yīng)用,通過技術(shù)的不斷革新和架構(gòu)的不斷優(yōu)化,得到了進(jìn)一步的提升和完善。但是計(jì)算密集型數(shù)據(jù)處理仍然處在發(fā)展階段,對(duì)于大型應(yīng)用的開發(fā)存在困難,主要集中在大型科學(xué)計(jì)算、省市級(jí)的社保醫(yī)保數(shù)據(jù)的計(jì)算與服務(wù)、稅務(wù)數(shù)據(jù)的計(jì)算與優(yōu)化等方面。

對(duì)于計(jì)算密集型的應(yīng)用,國內(nèi)外學(xué)者在任務(wù)調(diào)度、資源分配等方面有一些相關(guān)研究。張楠等[6]提出了一種面向計(jì)算密集型任務(wù)的分布式任務(wù)調(diào)度平臺(tái),有效地提高了系統(tǒng)的資源利用率和穩(wěn)定性。楊志豪等[7]研究了一種面向數(shù)據(jù)和計(jì)算雙重密集型任務(wù)的私有云計(jì)算系統(tǒng)實(shí)現(xiàn)方案,通過對(duì)文件和并行處理模塊的簡化和優(yōu)化,使得系統(tǒng)結(jié)構(gòu)變得簡單且方便使用。郝永生等[8]分析研究了計(jì)算密集型和數(shù)據(jù)密集型混合作業(yè)情況下的調(diào)度問題,對(duì)傳統(tǒng)的網(wǎng)格作業(yè)調(diào)度算法進(jìn)行了擴(kuò)展,提出了三種調(diào)度算法:Emin-min、Ebest、Esufferage。Kolici等[9]從高計(jì)算需求的角度出發(fā),介紹了利用現(xiàn)代高性能體系結(jié)構(gòu)模擬調(diào)度和資源分配的計(jì)算密集型應(yīng)用的一些研究成果。

對(duì)于計(jì)算密集型的應(yīng)用,在我國目前還處于發(fā)展階段。因此,本文提出一套計(jì)算密集型大流量數(shù)據(jù)的接力計(jì)算與動(dòng)態(tài)分流處理模型。通過內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊中預(yù)存儲(chǔ)信息確定計(jì)算任務(wù)的復(fù)雜等級(jí),同時(shí)利用接力計(jì)算模塊中計(jì)算節(jié)點(diǎn)的資源能力作為排序標(biāo)準(zhǔn),將計(jì)算任務(wù)動(dòng)態(tài)分配至指定接力計(jì)算節(jié)點(diǎn)并行處理,最終在數(shù)據(jù)分流模塊整合計(jì)算結(jié)果,返回客戶端展示,有效減輕了單服務(wù)器端的計(jì)算壓力。

本文主要工作:1)采用內(nèi)存型數(shù)據(jù)庫預(yù)存計(jì)算參量,減少數(shù)據(jù)庫對(duì)頻繁使用參量的讀寫成本,同時(shí)內(nèi)存數(shù)據(jù)庫動(dòng)態(tài)記錄計(jì)算量與復(fù)雜度,供動(dòng)態(tài)計(jì)算調(diào)節(jié)器使用;2)調(diào)節(jié)器動(dòng)態(tài)調(diào)用數(shù)據(jù)存儲(chǔ)資源(分布式數(shù)據(jù)庫),將大流量的計(jì)算任務(wù)拆解為若干小任務(wù)由存儲(chǔ)資源并行運(yùn)算,并將并行運(yùn)算的初步結(jié)果送往下一級(jí)處理層;3)后續(xù)兩級(jí)到三級(jí)的接力處理層將復(fù)雜的計(jì)算任務(wù)并行地分層處理,將最后的計(jì)算結(jié)果以數(shù)據(jù)流的方式合并輸出。

1 關(guān)鍵技術(shù)

1.1 微服務(wù)架構(gòu)

微服務(wù)架構(gòu)[10]是一種體系結(jié)構(gòu)模式,它采用一組服務(wù)來構(gòu)建一個(gè)應(yīng)用程序,服務(wù)獨(dú)立地部署在不同的進(jìn)程中,可獨(dú)立擴(kuò)展伸縮,并且每個(gè)服務(wù)可采用不同的編程語言來實(shí)現(xiàn)。相較于傳統(tǒng)的單體應(yīng)用架構(gòu),微服務(wù)架構(gòu)具有以下優(yōu)勢(shì):

①獨(dú)立部署。

由于微服務(wù)具有獨(dú)立的運(yùn)行進(jìn)程,所以每個(gè)微服務(wù)可以獨(dú)立進(jìn)行部署。當(dāng)某個(gè)微服務(wù)發(fā)生變化時(shí),不需要重新編譯和部署整個(gè)應(yīng)用程序,大大縮短了應(yīng)用的交付周期。

②降低復(fù)雜度。

微服務(wù)架構(gòu)將單個(gè)模塊應(yīng)用程序分解為多個(gè)微服務(wù),同時(shí)保持總體功能不變。每個(gè)服務(wù)都集中在一個(gè)單一的功能上,并通過接口清楚地表示服務(wù)邊界。由于功能單一、復(fù)雜度低,小規(guī)模開發(fā)團(tuán)隊(duì)可以充分掌握,易于維護(hù),開發(fā)效率高。

③技術(shù)選型多元化。

在微服務(wù)架構(gòu)下,應(yīng)用程序的技術(shù)選擇是去中心化的,各個(gè)開發(fā)團(tuán)隊(duì)可以根據(jù)自身應(yīng)用的業(yè)務(wù)需求開發(fā),選擇合適的架構(gòu)和技術(shù)。

④容錯(cuò)性。

在微服務(wù)架構(gòu)中,由于微服務(wù)之間彼此獨(dú)立的特點(diǎn),故障被隔離在單個(gè)服務(wù)中,系統(tǒng)的其他微服務(wù)模塊可以通過重試、降級(jí)等機(jī)制在應(yīng)用層實(shí)現(xiàn)容錯(cuò),從而提高系統(tǒng)應(yīng)用的容錯(cuò)性。

⑤可擴(kuò)展性。

微服務(wù)架構(gòu)中的每一個(gè)服務(wù)可以根據(jù)實(shí)際需要獨(dú)立地進(jìn)行擴(kuò)展[11],充分體現(xiàn)了微服務(wù)架構(gòu)的靈活性。

本文采用微服務(wù)架構(gòu)搭建接力計(jì)算與動(dòng)態(tài)分流處理模型。

1.2 非阻塞客戶端WebClient

WebClient 是一個(gè)非阻塞、響應(yīng)式的HTTP(HyperText Transfer Protocol)客戶端工具,它以響應(yīng)式流、背壓的方式執(zhí)行HTTP 請(qǐng)求。對(duì)于高并發(fā)的情況,可以利用非阻塞和響應(yīng)式的特性使用少量的線程數(shù)進(jìn)行處理[12]。本文利用這兩個(gè)特性處理微服務(wù)各模塊之間通信的問題。

采用微服務(wù)架構(gòu)搭建整體框架,各個(gè)微服務(wù)模塊之間如何遠(yuǎn)程進(jìn)行訪問服務(wù)資源是需要考慮的問題。目前,一般微服務(wù)中各個(gè)模塊之間的調(diào)用有兩種方式:RestTemplate 和Feign,都是采用HTTP 協(xié)議調(diào)取Restful API 的方式。但這兩種方式都具有阻塞的缺點(diǎn),當(dāng)系統(tǒng)應(yīng)用收到大量請(qǐng)求時(shí),會(huì)造成請(qǐng)求堆積,響應(yīng)時(shí)長增加。非阻塞客戶端WebClient 的出現(xiàn),可以完美解決上述問題。

本文在接力計(jì)算和數(shù)據(jù)同步過程中,各層接力計(jì)算節(jié)點(diǎn)利用WebClient 的非阻塞特性進(jìn)行通信,傳遞計(jì)算和同步任務(wù),獲取處理結(jié)果。接力計(jì)算節(jié)點(diǎn)調(diào)用圖如圖1所示。

2 接力計(jì)算與動(dòng)態(tài)分流處理模型

為解決現(xiàn)有大流量數(shù)據(jù)計(jì)算緩慢、響應(yīng)時(shí)間長等問題,本文研究了一種計(jì)算密集型大流量數(shù)據(jù)的接力計(jì)算與動(dòng)態(tài)分流處理模型,具有響應(yīng)迅速、計(jì)算效率高、可擴(kuò)展性好等優(yōu)點(diǎn)。整個(gè)模型主要由數(shù)據(jù)分流模塊、內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊、接力計(jì)算模塊和數(shù)據(jù)存儲(chǔ)模塊四部分組成,模型圖如圖2所示。

圖2 計(jì)算密集型大流量數(shù)據(jù)處理模型Fig.2 Computing-intensive large flow data processing model

2.1 接力計(jì)算與動(dòng)態(tài)分流處理運(yùn)行流程

由圖2 可知,接力計(jì)算與動(dòng)態(tài)分流處理模型通過四大模塊之間的相互配合,共同完成大流量數(shù)據(jù)的快速計(jì)算。該模型的具體運(yùn)行流程與各大模塊的功能如下:

1)數(shù)據(jù)分流模塊實(shí)現(xiàn)大流量數(shù)據(jù)的動(dòng)態(tài)分流與合并。

該模塊主要利用均衡算法將大流量數(shù)據(jù)均分至多個(gè)計(jì)算節(jié)點(diǎn)同時(shí)進(jìn)行計(jì)算,計(jì)算完成后,將結(jié)果進(jìn)行整合,返回至客戶端進(jìn)行展示。

2)接力計(jì)算模塊完成大部分計(jì)算任務(wù)。

接力計(jì)算模塊根據(jù)計(jì)算任務(wù)的分解方式,確定接力層數(shù)以及各層的節(jié)點(diǎn)數(shù),通過各層各節(jié)點(diǎn)之間相互配合,完成大部分的計(jì)算任務(wù)。

3)內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊:微計(jì)算處理單元。

內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊具有讀寫速度快、性能好、易于擴(kuò)展等優(yōu)點(diǎn)[13],本文將具有使用頻率較高、相對(duì)固定不變、已進(jìn)行簡單計(jì)算等特點(diǎn)的數(shù)據(jù)預(yù)存儲(chǔ)在內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊中,方便其余三大模塊在計(jì)算過程中快速讀取所需數(shù)據(jù)。

4)數(shù)據(jù)存儲(chǔ)模塊:讀寫分離。

數(shù)據(jù)存儲(chǔ)模塊是克隆數(shù)據(jù)存儲(chǔ)集群,采用讀寫分離,能有效減輕數(shù)據(jù)存儲(chǔ)模塊的負(fù)載壓力[14]。其中,讀取數(shù)據(jù)集中在(N-1)個(gè)數(shù)據(jù)存儲(chǔ)端,而寫入數(shù)據(jù)在N個(gè)數(shù)據(jù)存儲(chǔ)端中并行執(zhí)行。當(dāng)寫入數(shù)據(jù)出現(xiàn)錯(cuò)誤時(shí),進(jìn)行回滾,保證存儲(chǔ)端集群中的數(shù)據(jù)一致。

2.2 接力計(jì)算與動(dòng)態(tài)分流處理模型優(yōu)勢(shì)

傳統(tǒng)的大流量計(jì)算模式多為增加或升級(jí)硬件資源,譬如大型互聯(lián)網(wǎng)企業(yè)雙十一期間需要增加幾千或上萬臺(tái)服務(wù)器,或人為拆解大流量為若干小任務(wù),需要較長的時(shí)間完成大量的計(jì)算任務(wù)。

相較于傳統(tǒng)大流量數(shù)據(jù)的計(jì)算方式,本文所提出的接力計(jì)算與動(dòng)態(tài)分流處理模型有以下優(yōu)勢(shì):

1)緩解硬件資源節(jié)點(diǎn)的計(jì)算壓力。數(shù)據(jù)分流模塊通過內(nèi)存型存儲(chǔ)模塊中的數(shù)據(jù)快速確定計(jì)算任務(wù)的復(fù)雜等級(jí)X,利用均衡算法將計(jì)算任務(wù)分配至X個(gè)接力計(jì)算節(jié)點(diǎn)完成,有效緩解單一架構(gòu)的計(jì)算壓力。

2)易于擴(kuò)展。本文的接力計(jì)算模塊為集群式,體現(xiàn)為多層接力節(jié)點(diǎn)共同參與任務(wù)計(jì)算。上層接力節(jié)點(diǎn)的計(jì)算結(jié)果傳遞到下層接力節(jié)點(diǎn)繼續(xù)參與計(jì)算。大流量數(shù)據(jù)的復(fù)雜運(yùn)算可以利用多層接力節(jié)點(diǎn)異步處理計(jì)算任務(wù),減輕傳統(tǒng)單服務(wù)器端的計(jì)算壓力。

3)數(shù)據(jù)同步。數(shù)據(jù)存儲(chǔ)端集群采用讀寫分離的方式存儲(chǔ)數(shù)據(jù),有效減輕存儲(chǔ)模塊的負(fù)載壓力;并且,通過執(zhí)行SQL 捕獲器的結(jié)果和引發(fā)錯(cuò)誤后回滾的方式保證數(shù)據(jù)同步。

4)讀寫快速。利用內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊中讀寫數(shù)據(jù)快速的優(yōu)點(diǎn),將使用頻率較高的數(shù)據(jù)預(yù)存儲(chǔ)在內(nèi)存型數(shù)據(jù)存儲(chǔ)端中。

3 接力計(jì)算與動(dòng)態(tài)分流處理模型設(shè)計(jì)與實(shí)現(xiàn)

根據(jù)接力計(jì)算與動(dòng)態(tài)分流處理模型的說明,可以得到接力計(jì)算與動(dòng)態(tài)分流處理模型的總體運(yùn)行流程如圖3所示。

圖3 接力計(jì)算與動(dòng)態(tài)分流處理模型流程Fig.3 Flowchart of relay computation and dynamic diversion processing model

具體技術(shù)實(shí)現(xiàn)闡述如下:

1)數(shù)據(jù)分流模塊對(duì)數(shù)據(jù)進(jìn)行動(dòng)態(tài)分流。

數(shù)據(jù)分流模塊接收客戶端原始任務(wù)請(qǐng)求,利用SQL 捕獲器的結(jié)果判斷任務(wù)類型。其中,增加、刪除和更新操作屬于數(shù)據(jù)同步任務(wù),而讀取操作屬于計(jì)算任務(wù)。

SQL 捕獲器的結(jié)果判定是計(jì)算任務(wù)時(shí),先確定計(jì)算任務(wù)的復(fù)雜等級(jí)。本文將第一次請(qǐng)求數(shù)據(jù)的時(shí)間Tm預(yù)存儲(chǔ)在內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊中,后續(xù)計(jì)算請(qǐng)求任務(wù)將Tm與自定義閾值時(shí)間T作對(duì)比,得到計(jì)算任務(wù)的復(fù)雜等級(jí)X:

其中:N為數(shù)據(jù)存儲(chǔ)端的個(gè)數(shù);Tm表示第一次請(qǐng)求數(shù)據(jù)時(shí)間;T表示自定義閾值時(shí)間;X表示參與計(jì)算節(jié)點(diǎn)數(shù)和計(jì)算任務(wù)的復(fù)雜等級(jí);[]表示取整。

當(dāng)Tm/T≤1 時(shí),表示接力計(jì)算模塊中的1 個(gè)接力計(jì)算節(jié)點(diǎn)得到全部計(jì)算任務(wù)Y。當(dāng)Tm/T∈(1,N-2]時(shí),使用式(2)計(jì)算每個(gè)接力計(jì)算節(jié)點(diǎn)獲取的計(jì)算任務(wù)量R:

其中:n代表計(jì)算節(jié)點(diǎn)的編號(hào);Y表示計(jì)算任務(wù)量。

當(dāng)Tm/T>N-2,并且Y%X=0 時(shí),使用式(3)計(jì)算每個(gè)接力計(jì)算節(jié)點(diǎn)獲取的計(jì)算任務(wù)量R:

當(dāng)Tm/T>N-2,并且Y%X≠0 時(shí),使用式(4)計(jì)算每個(gè)接力計(jì)算節(jié)點(diǎn)獲取的計(jì)算任務(wù)量R:

接力計(jì)算節(jié)點(diǎn)完成計(jì)算任務(wù)的分配時(shí),需要先對(duì)接力計(jì)算節(jié)點(diǎn)進(jìn)行編號(hào)。利用微服務(wù)架構(gòu)中的服務(wù)發(fā)現(xiàn)功能獲取第一層接力計(jì)算節(jié)點(diǎn)所在服務(wù)器端的IP 地址,通過IP 地址讀取CPU 和內(nèi)存使用率等信息,對(duì)節(jié)點(diǎn)資源能力按照從低到高進(jìn)行排序,對(duì)各個(gè)節(jié)點(diǎn)進(jìn)行編號(hào)(編號(hào)值n:1 →N-1)。每個(gè)接力計(jì)算節(jié)點(diǎn)分配的計(jì)算任務(wù)量R由式(2)~(4)可得。

SQL 捕獲器結(jié)果判斷是數(shù)據(jù)同步任務(wù)時(shí),將SQL 捕獲器結(jié)果和任務(wù)標(biāo)識(shí)作為請(qǐng)求參數(shù),直接轉(zhuǎn)發(fā)到接力計(jì)算模塊進(jìn)一步處理。

2)數(shù)據(jù)存儲(chǔ)模塊實(shí)現(xiàn)數(shù)據(jù)提取、簡單運(yùn)算和數(shù)據(jù)同步的功能。

數(shù)據(jù)存儲(chǔ)模塊根據(jù)任務(wù)標(biāo)識(shí)執(zhí)行不同的任務(wù),分別為計(jì)算任務(wù)和數(shù)據(jù)同步任務(wù),以下將分為兩方面進(jìn)行介紹。

①計(jì)算任務(wù)。

數(shù)據(jù)存儲(chǔ)模塊執(zhí)行計(jì)算任務(wù)時(shí),將數(shù)據(jù)提取和簡單運(yùn)算放在該模塊完成,例如查詢計(jì)算人員的姓名、年齡等基本信息,可以從數(shù)據(jù)存儲(chǔ)模塊提取多位人員姓名、出生日期基本信息,通過編寫的數(shù)據(jù)庫函數(shù)實(shí)時(shí)計(jì)算年齡等信息。而在X個(gè)數(shù)據(jù)存儲(chǔ)端完成計(jì)算任務(wù)時(shí),先判斷內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊是否存有當(dāng)前所需數(shù)據(jù),如果未保存,將數(shù)據(jù)寫入內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊,方便后續(xù)請(qǐng)求從內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊中直接提取。計(jì)算完成后將半成品結(jié)果返回至接力計(jì)算模塊進(jìn)一步處理。

②數(shù)據(jù)同步任務(wù)。

數(shù)據(jù)存儲(chǔ)模塊執(zhí)行數(shù)據(jù)同步任務(wù)時(shí),N個(gè)數(shù)據(jù)存儲(chǔ)端執(zhí)行SQL 捕獲器的結(jié)果(增加、刪除和更新),N個(gè)接力計(jì)算節(jié)點(diǎn)記錄執(zhí)行情況并使用WebClient 相互通信。如果當(dāng)前數(shù)據(jù)存儲(chǔ)端執(zhí)行成功,同時(shí)收到其余(N-1)個(gè)數(shù)據(jù)存儲(chǔ)端執(zhí)行成功的信息,接力計(jì)算節(jié)點(diǎn)向上一層接力處理模塊返回執(zhí)行成功的信息。

如果N個(gè)數(shù)據(jù)存儲(chǔ)端中出現(xiàn)執(zhí)行失敗的情況,出錯(cuò)的接力計(jì)算節(jié)點(diǎn)使用WebClient向其余節(jié)點(diǎn)發(fā)送執(zhí)行失敗的信息,利用數(shù)據(jù)庫ACID 特性[15]的原子性(ACID特性即原子性Atomic、一致性Consistency、隔離性Isolation和持久性Durability),對(duì)執(zhí)行成功的模塊進(jìn)行事務(wù)回滾,恢復(fù)至執(zhí)行前的數(shù)據(jù)狀態(tài),同時(shí)接力計(jì)算節(jié)點(diǎn)向上一層計(jì)算終端返回執(zhí)行失敗的信息,這樣可以保證N個(gè)數(shù)據(jù)存儲(chǔ)端中的數(shù)據(jù)完全相同。數(shù)據(jù)存儲(chǔ)模塊功能流程如圖4所示。

圖4 數(shù)據(jù)存儲(chǔ)模塊功能流程Fig.4 Function flowchart of data storage module

3)接力計(jì)算模塊完成數(shù)據(jù)的大部分計(jì)算。

接力計(jì)算模塊主要完成大部分的計(jì)算任務(wù),可以自定義接力計(jì)算層數(shù)F,其中每層接力節(jié)點(diǎn)數(shù)m需要大于等于數(shù)據(jù)存儲(chǔ)端數(shù)量N。

本文在確定最佳接力計(jì)算層數(shù)F時(shí),需要對(duì)復(fù)雜計(jì)算任務(wù)完成分解。任務(wù)分解的思想在于將一個(gè)復(fù)雜計(jì)算任務(wù)通過某種方式分解為多個(gè)不同的、簡單的子任務(wù),可以將這些分解后的子任務(wù)交給多個(gè)接力計(jì)算模塊完成,最終將多個(gè)模塊計(jì)算完成的結(jié)果返回?cái)?shù)據(jù)分流模塊,進(jìn)行整合規(guī)范。

本文在完成計(jì)算任務(wù)分解時(shí),需先測(cè)量單機(jī)完成該任務(wù)所花費(fèi)的時(shí)長。接著,將任務(wù)分解為多個(gè)無關(guān)聯(lián)的計(jì)算子任務(wù),分配至多層接力計(jì)算節(jié)點(diǎn)完成,記錄任務(wù)完成時(shí)間。同時(shí),考慮各模塊的關(guān)聯(lián)和依賴作用,將多個(gè)計(jì)算子任務(wù)合并在同一個(gè)接力節(jié)點(diǎn)完成,記錄最終任務(wù)的完成時(shí)間。比較多種任務(wù)分解方式,得出最合理的任務(wù)分解方式,計(jì)算完成所花費(fèi)的時(shí)間最短。

本文使用3層接力節(jié)點(diǎn),每層接力節(jié)點(diǎn)包含3個(gè)接力計(jì)算節(jié)點(diǎn),3 個(gè)數(shù)據(jù)存儲(chǔ)端為例進(jìn)行具體詳述。接力計(jì)算模塊結(jié)構(gòu)如圖5所示。

圖5 接力計(jì)算模塊結(jié)構(gòu)圖Fig.5 Structure diagram of relay computation module

數(shù)據(jù)分流模塊對(duì)數(shù)據(jù)進(jìn)行分流,根據(jù)式(1)確定復(fù)雜等級(jí)X的值,比如計(jì)算完成X的值為2,代表將計(jì)算任務(wù)分配至兩個(gè)接力計(jì)算節(jié)點(diǎn)同時(shí)完成。將計(jì)算任務(wù)量劃分成2 份,對(duì)第一層接力節(jié)點(diǎn)中3 個(gè)計(jì)算節(jié)點(diǎn)資源能力從高到低進(jìn)行排序編號(hào),將計(jì)算任務(wù)分配至編號(hào)1 和2 的接力計(jì)算節(jié)點(diǎn)完成,根據(jù)式(3)或式(4)得到每個(gè)接力計(jì)算節(jié)點(diǎn)分配的計(jì)算任務(wù)量R。節(jié)點(diǎn)資源能力計(jì)算公式如下:

其中:NodeAbility代表計(jì)算節(jié)點(diǎn)的資源能力;Rate代表CPU 剩余利用率;idle_cores代表空閑CPU 核數(shù);MainFrequency代表CPU主頻。

處理數(shù)據(jù)完成后,對(duì)第二層接力計(jì)算節(jié)點(diǎn)資源能力按照式(5)計(jì)算后進(jìn)行排序編號(hào),轉(zhuǎn)發(fā)對(duì)應(yīng)編號(hào)節(jié)點(diǎn)的計(jì)算任務(wù)請(qǐng)求,比如第一層接力節(jié)點(diǎn)編號(hào)為1 的計(jì)算節(jié)點(diǎn)向第二層接力節(jié)點(diǎn)中編號(hào)為1 的計(jì)算節(jié)點(diǎn)轉(zhuǎn)發(fā)請(qǐng)求,以此類推,第二層接力節(jié)點(diǎn)向第三層節(jié)點(diǎn)請(qǐng)求轉(zhuǎn)發(fā)的規(guī)則也相同。節(jié)點(diǎn)計(jì)算結(jié)構(gòu)如圖6所示。

圖6 節(jié)點(diǎn)計(jì)算結(jié)構(gòu)圖Fig.6 Node computation structure diagram

如上所述,請(qǐng)求到達(dá)第三層接力節(jié)點(diǎn)時(shí),數(shù)據(jù)提取和簡單運(yùn)算放在數(shù)據(jù)存儲(chǔ)模塊完成,每個(gè)接力計(jì)算節(jié)點(diǎn)對(duì)應(yīng)一個(gè)數(shù)據(jù)存儲(chǔ)端,在計(jì)算過程中可以直接獲取內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊中所需數(shù)據(jù),計(jì)算完成的半成品結(jié)果在第三層、第二層和第一層接力節(jié)點(diǎn)中特制的計(jì)算模塊進(jìn)行進(jìn)一步處理。第一層接力節(jié)點(diǎn)得到最終計(jì)算結(jié)果后,返回到數(shù)據(jù)分流模塊,進(jìn)行合并2個(gè)接力節(jié)點(diǎn)的計(jì)算結(jié)果,轉(zhuǎn)換為客戶端能夠解析的數(shù)據(jù)類型,將整合規(guī)范后的結(jié)果返回客戶端展示。接力計(jì)算模塊中的各層節(jié)點(diǎn)之間的通信采用異步非阻塞的WebClient方式,不會(huì)阻塞后續(xù)程序運(yùn)行。

接力計(jì)算模塊處理數(shù)據(jù)同步任務(wù)時(shí),計(jì)算結(jié)構(gòu)圖和處理計(jì)算任務(wù)時(shí)相同,如圖6所示。

數(shù)據(jù)分流模塊將SQL捕獲器的結(jié)果和數(shù)據(jù)同步任務(wù)標(biāo)識(shí)作為請(qǐng)求參數(shù),轉(zhuǎn)發(fā)至第一層接力節(jié)點(diǎn)中資源能力按照式(5)計(jì)算后進(jìn)行排序編號(hào)為1 的計(jì)算節(jié)點(diǎn),在解析請(qǐng)求參數(shù)中任務(wù)標(biāo)識(shí)為數(shù)據(jù)同步任務(wù)時(shí),將請(qǐng)求直接轉(zhuǎn)發(fā)至第二層接力節(jié)點(diǎn)中資源能力也按照式(5)計(jì)算后進(jìn)行排序編號(hào)為1 的計(jì)算節(jié)點(diǎn),該節(jié)點(diǎn)接收請(qǐng)求后,轉(zhuǎn)發(fā)至第三層中所有計(jì)算節(jié)點(diǎn),在數(shù)據(jù)存儲(chǔ)模塊中并行執(zhí)行SQL 捕獲器結(jié)果。如前面所述,出現(xiàn)執(zhí)行失敗的情況時(shí),3 個(gè)接力計(jì)算節(jié)點(diǎn)使用WebClient 相互通信,數(shù)據(jù)存儲(chǔ)模塊進(jìn)行事務(wù)回滾,恢復(fù)至未執(zhí)行前的數(shù)據(jù)狀態(tài)。3 個(gè)接力計(jì)算節(jié)點(diǎn)將執(zhí)行失敗情況原路返回,在數(shù)據(jù)分流模塊對(duì)執(zhí)行情況進(jìn)行整合,最終將任務(wù)完成情況返回給客戶端。數(shù)據(jù)同步失敗結(jié)構(gòu)如圖7所示。

圖7 數(shù)據(jù)同步失敗結(jié)構(gòu)圖Fig.7 Data synchronization failure structure diagram

4 測(cè)試與結(jié)果分析

本文通過計(jì)算保存在數(shù)據(jù)存儲(chǔ)模塊中的學(xué)生成績數(shù)據(jù),獲取指定數(shù)據(jù)量的計(jì)算任務(wù),完成對(duì)應(yīng)學(xué)生總分、平均分等計(jì)算。將第一次多個(gè)計(jì)算節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)的響應(yīng)時(shí)間小于單個(gè)計(jì)算節(jié)點(diǎn)時(shí)的數(shù)據(jù)量預(yù)存儲(chǔ)在內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊,后續(xù)請(qǐng)求數(shù)據(jù)量與內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊中作對(duì)比:如果超過該數(shù)據(jù)量,對(duì)數(shù)據(jù)進(jìn)行分流;如果未超過該數(shù)據(jù)量,由單個(gè)計(jì)算節(jié)點(diǎn)完成,利用當(dāng)前節(jié)點(diǎn)的資源能力判斷任務(wù)分配至各層節(jié)點(diǎn)計(jì)算。

本文測(cè)試計(jì)算中,主要使用單個(gè)計(jì)算節(jié)點(diǎn)和兩個(gè)計(jì)算節(jié)點(diǎn)(2 層接力節(jié)點(diǎn),每層接力節(jié)點(diǎn)包含2 個(gè)接力計(jì)算節(jié)點(diǎn)和2個(gè)數(shù)據(jù)存儲(chǔ)端)進(jìn)行測(cè)試。模擬接力計(jì)算時(shí),為簡單處理只將提取學(xué)生成績放在數(shù)據(jù)存儲(chǔ)端完成,平均分放在第一層節(jié)點(diǎn),總分放在第二層節(jié)點(diǎn)計(jì)算。

客戶端將計(jì)算任務(wù)分配至數(shù)據(jù)分流模塊,通過內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊中的數(shù)據(jù)判斷是否進(jìn)行分流,將分流請(qǐng)求數(shù)據(jù)量傳送至第二層計(jì)算節(jié)點(diǎn),提取學(xué)生多門成績放在數(shù)據(jù)存儲(chǔ)模塊完成,將半成品計(jì)算結(jié)果以流的形式返回接力計(jì)算模塊,分別計(jì)算學(xué)生的總分和平均分。計(jì)算完成,將結(jié)果返回?cái)?shù)據(jù)分流模塊進(jìn)行整合,最終在客戶端展示。每次客戶端發(fā)送計(jì)算請(qǐng)求時(shí),記錄每次請(qǐng)求完成的響應(yīng)時(shí)間。

需要說明的是,為了測(cè)試的真實(shí)性,測(cè)試在正式的生產(chǎn)環(huán)境進(jìn)行,所以沒有讓計(jì)算進(jìn)行同步回寫存儲(chǔ),但不影響對(duì)模型與框架的驗(yàn)證與相應(yīng)結(jié)論。

4.1 測(cè)試的物理環(huán)境

本文使用的物理環(huán)境包括如下:

數(shù)據(jù)分流模塊運(yùn)行環(huán)境:1 臺(tái)Linux 服務(wù)器,操作系統(tǒng)CentOS-7.6 64 bit,運(yùn)行內(nèi)存8 GB,帶寬10 Mb/s,Java 開發(fā)工具包jdk-1.8.0_181。

接力計(jì)算模塊運(yùn)行環(huán)境:2 臺(tái)Linux 服務(wù)器,操作系統(tǒng)CentOS 7.6 64 bit,運(yùn)行內(nèi)存8 GB,帶寬5 Mb/s,Java 開發(fā)工具包jdk-1.8.0_181。

數(shù)據(jù)存儲(chǔ)模塊運(yùn)行環(huán)境:1 臺(tái)Linux 服務(wù)器,關(guān)系型數(shù)據(jù)庫管理系統(tǒng)MySQL 8.0.20,操作系統(tǒng)CentOS 7.6 64 bit,運(yùn)行內(nèi)存16 GB,帶寬5 Mb/s,Java 開發(fā)工具包jdk-1.8.0_181。

4.2 測(cè)試結(jié)果和分析

4.2.1 運(yùn)行結(jié)果

通過對(duì)不同數(shù)量級(jí)數(shù)據(jù)的多次測(cè)試,去除波動(dòng)較大的測(cè)試結(jié)果后取平均值。學(xué)生成績?cè)趩蝹€(gè)節(jié)點(diǎn)和多個(gè)節(jié)點(diǎn)的計(jì)算完成時(shí)間的對(duì)比測(cè)試結(jié)果如表1所示。

表1 單個(gè)節(jié)點(diǎn)與兩個(gè)節(jié)點(diǎn)耗時(shí)對(duì)比Tab.1 Time consumption comparison between single node and two nodes

表2~3 展示的當(dāng)計(jì)算請(qǐng)求數(shù)據(jù)量較大(30 000 條)和較?。?00條)時(shí),數(shù)據(jù)分流模塊接收10次計(jì)算請(qǐng)求后,每次單個(gè)節(jié)點(diǎn)和多個(gè)節(jié)點(diǎn)分別從請(qǐng)求開始到返回計(jì)算結(jié)果的完成時(shí)間對(duì)比。需要注意的是,由于實(shí)驗(yàn)中服務(wù)器存在實(shí)時(shí)網(wǎng)絡(luò)狀態(tài)不同等原因,每次計(jì)算請(qǐng)求的完成時(shí)間是不相同的,所以表2~3展示的數(shù)據(jù)中,后續(xù)請(qǐng)求的完成時(shí)間可能會(huì)小于開始請(qǐng)求的完成時(shí)間。

表2 請(qǐng)求數(shù)據(jù)量大(30 000條)時(shí)的完成時(shí)間對(duì)比Tab.2 Comparison of completion time for requests with large amount of data(30 000 items)

表3 請(qǐng)求數(shù)據(jù)量?。?00條)時(shí)的完成時(shí)間對(duì)比Tab.3 Comparison of completion time for requests with small amount of data(100 items)

4.2.2 運(yùn)行結(jié)果分析

根據(jù)運(yùn)行的結(jié)果,分析表1~3 可知:在計(jì)算請(qǐng)求數(shù)據(jù)量較小的情況下,單個(gè)計(jì)算節(jié)點(diǎn)完成相同計(jì)算任務(wù)的時(shí)間會(huì)小于多個(gè)計(jì)算節(jié)點(diǎn)的完成時(shí)間;而計(jì)算請(qǐng)求數(shù)據(jù)量較大的情況,則剛好相反。這說明該模型的計(jì)算調(diào)節(jié)器可以通過判斷請(qǐng)求數(shù)據(jù)量的大小來決定是否進(jìn)行分流,避免在計(jì)算過程中過多資源的浪費(fèi)。對(duì)于大流量數(shù)據(jù)的密集計(jì)算使用該模型可以降低運(yùn)行時(shí)間,并且隨著計(jì)算請(qǐng)求數(shù)據(jù)量的增大和計(jì)算復(fù)雜度的增加,模型的優(yōu)勢(shì)就越明顯。并且,該模型通過三層(內(nèi)存型數(shù)據(jù)存儲(chǔ)模塊、接力計(jì)算模塊和數(shù)據(jù)存儲(chǔ)模塊)的接力計(jì)算,可以解決一般數(shù)據(jù)計(jì)算軟件可能出現(xiàn)的運(yùn)算速度緩慢、計(jì)算阻塞堆積等問題,也大幅減少了其中一層的運(yùn)算和處理接近滿負(fù)荷或積壓,而另外兩層出現(xiàn)等待或閑置的狀況。通過不同數(shù)量級(jí)計(jì)算數(shù)據(jù)的測(cè)試,記錄了單個(gè)節(jié)點(diǎn)和多個(gè)節(jié)點(diǎn)計(jì)算完成時(shí)間等指標(biāo),對(duì)指標(biāo)數(shù)據(jù)的整理分析,說明了該模型能夠顯著提升數(shù)據(jù)計(jì)算的效率,對(duì)超高并發(fā)數(shù)據(jù)的處理、計(jì)算密集性數(shù)據(jù)的計(jì)算方法及類似應(yīng)用場(chǎng)景,具有借鑒與參考性的價(jià)值。

5 結(jié)語

本文構(gòu)建一種利用內(nèi)存式數(shù)據(jù)存儲(chǔ)技術(shù)為過渡,通過預(yù)存儲(chǔ)、一體化轉(zhuǎn)換、讀寫分離等構(gòu)架與算法,探索快速處理存儲(chǔ)模塊數(shù)據(jù)的模型與構(gòu)架,并著眼于通過內(nèi)存式數(shù)據(jù)存儲(chǔ)技術(shù)為樞紐,將大流量數(shù)據(jù)的計(jì)算任務(wù),通過預(yù)加載、解耦、緩存機(jī)制等,銜接來自于動(dòng)態(tài)分流進(jìn)一步處理的數(shù)據(jù),完成大流量數(shù)據(jù)的快速計(jì)算。該模型及其實(shí)現(xiàn)已經(jīng)在實(shí)際的密集計(jì)算型的應(yīng)用場(chǎng)景得到運(yùn)用,在計(jì)算速度和資源成本方面都取得理想的結(jié)果[16]。該方案和相關(guān)技術(shù)對(duì)于計(jì)算密集型的應(yīng)用領(lǐng)域和相關(guān)研究,都具有建設(shè)性的意義,也可降低信息化系統(tǒng)建設(shè)成本,實(shí)現(xiàn)資源充分利用。

猜你喜歡
密集型數(shù)據(jù)量分流
冷流道分流梭功能分析
基于大數(shù)據(jù)量的初至層析成像算法優(yōu)化
密集型呼吸燈燈串設(shè)計(jì)與實(shí)現(xiàn)
邊緣計(jì)算中基于馬爾可夫決策過程的數(shù)據(jù)分流時(shí)間優(yōu)化
高刷新率不容易顯示器需求與接口標(biāo)準(zhǔn)帶寬
說涇渭
專利密集型產(chǎn)業(yè)技術(shù)創(chuàng)新效率的研究
長江河口南北槽分流口工程及瑞豐沙地形變化對(duì)分流比的影響
加快推動(dòng)知識(shí)產(chǎn)權(quán)密集型產(chǎn)業(yè)發(fā)展的思考
《專利密集型產(chǎn)業(yè)目錄(2016)》(試行)印發(fā)