亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于MapReduce 云計算的報表平臺技術(shù)與應(yīng)用

        2023-11-22 10:28:24俞紅威蔡玉立
        江蘇通信 2023年5期
        關(guān)鍵詞:輪詢調(diào)用報表

        俞紅威 朱 建 蔡玉立

        中博信息技術(shù)研究院有限公司

        0 引言

        云計算是分布式計算的一種,指的是通過網(wǎng)絡(luò)“云”將巨大的數(shù)據(jù)計算處理程序分解成無數(shù)個小程序,然后,通過多服務(wù)器組成的系統(tǒng)進(jìn)行處理和分析這些小程序得到結(jié)果并返回給用戶。云計算早期,就是簡單的分布式計算,解決任務(wù)分發(fā),并進(jìn)行計算結(jié)果的合并。因而,云計算又稱為網(wǎng)格計算。通過這項技術(shù),可以在很短的時間內(nèi)完成對數(shù)以萬計的數(shù)據(jù)的處理,從而能夠提供強大的網(wǎng)絡(luò)服務(wù)。

        企業(yè)的業(yè)務(wù)數(shù)據(jù)在數(shù)據(jù)量越來越大的情況下,業(yè)務(wù)取數(shù)邏輯也越來越復(fù)雜。比如集團(tuán)型企業(yè)財務(wù)月報,單個財務(wù)報表戶涉及到8 張不同的報表,包括資產(chǎn)負(fù)債表、利潤表、收入明細(xì)表等,共計近5000 個指標(biāo),再加上集團(tuán)型企業(yè)涉及多財務(wù)報表戶,按照1000 個財務(wù)賬套計算則有500 萬個指標(biāo)的計算,因此報表數(shù)據(jù)的計算量非常大,云計算的分布式計算特點特別適合這種場景的計算。

        1 技術(shù)現(xiàn)狀

        1.1 MapReduce 技術(shù)簡介

        云計算的關(guān)鍵技術(shù)是MapReduce,最早是由Google 提出,后來也運用在開源的云技術(shù)Hadoop 中。與傳統(tǒng)開發(fā)模式相比,使用MapReduce 模式,開發(fā)人員在拆解問題的過程中,就要先對問題進(jìn)行平行化處理。開發(fā)人員需要先分析問題的解決流程,找出可以利用平行運算來處理數(shù)據(jù)的部分,也就是那些能夠被切成小段分開來處理的數(shù)據(jù),再針對可以采用平行處理的部分寫成Map 程序。

        MapReduce 本身源自于函數(shù)式語言,主要通過“Map(映射)”和“Reduce(化簡)”這兩個步驟來并行處理大規(guī)模的數(shù)據(jù)集。首先,Map 會先對由很多獨立元素組成的邏輯列表中的每一個元素進(jìn)行指定的操作,且原始列表不會被更改,會創(chuàng)建多個新的列表來保存Map 的處理結(jié)果。當(dāng)Map 工作完成之后,系統(tǒng)會接著對新生成的多個列表進(jìn)行清理和排序,然后會對這些新創(chuàng)建的列表進(jìn)行Reduce 操作,也就是對一個列表中的元素根據(jù)Key 值進(jìn)行適當(dāng)?shù)暮喜?。圖1 是常見MapReduce 的體系結(jié)構(gòu)。

        圖1 MapReduce 的體系結(jié)構(gòu)

        1.2 ICE 網(wǎng)絡(luò)通信引擎技術(shù)簡介

        網(wǎng)絡(luò)通信引擎ICE(Internet Communications Engine)是Zero C公司的分布式系統(tǒng)開發(fā)專家實現(xiàn)的一種新的,高性能的,面向?qū)ο笾虚g件平臺?;贗CE 可以實現(xiàn)電信級分布式網(wǎng)絡(luò)通信的解決方案。ICE 為構(gòu)建面向?qū)ο蟮目蛻?服務(wù)器應(yīng)用提供了工具、API 和庫支持。

        ICE 作為中間件平臺,客戶端及服務(wù)端的應(yīng)用都是由應(yīng)用代碼及ICE 的庫代碼混合組成的??蛻魬?yīng)用及服務(wù)器應(yīng)用分別對應(yīng)用的是客戶端與服務(wù)端。代理是根據(jù)SLICE 定義的ICE 文件實現(xiàn),它提供了一個向下調(diào)用的接口,提供了數(shù)據(jù)的序列化與反序化。

        2 總體技術(shù)架構(gòu)

        2.1 方案介紹

        考慮到場景的差異和實際項目需要,本方案沒有直接采用Hadoop 的MapReduce架構(gòu)。而是采用云計算MapReduce 的思想,自主開發(fā)云計算分布式框架,將報表主任務(wù)進(jìn)行分解,調(diào)用任務(wù)的Mapper分解程序,根據(jù)不同的取數(shù)公式及參數(shù)拆分成若干個子任務(wù)。系統(tǒng)初始化一個子任務(wù)池,定義任意個取數(shù)線程,輪詢獲取分解的子任務(wù),通過ICE RPC 遠(yuǎn)程調(diào)用方法實現(xiàn)任務(wù)遠(yuǎn)程調(diào)用,將子任務(wù)分配到遠(yuǎn)程計算節(jié)點,計算完成后返回此子任務(wù)的結(jié)果,并且將結(jié)果進(jìn)行匯總,當(dāng)所有的子任務(wù)都已經(jīng)全部執(zhí)行成功后,啟動Reduce 程序,針對匯總的結(jié)果進(jìn)行指標(biāo)計算,并保存到數(shù)據(jù)庫中,從而完成報表主任務(wù)的計算。圖2 為整體方案架構(gòu)圖。

        圖2 整體方案架構(gòu)圖

        配套整個系統(tǒng)設(shè)計,系統(tǒng)還包括表套,表單,指標(biāo),取數(shù)公式,報表戶,時間維度(年度,月度)等基本信息。表套是由一系列相關(guān)的表單組成的,表單則由若干指標(biāo)組成,它包括名稱,編碼和具體的取數(shù)公式構(gòu)成。取數(shù)公式可能包括若干公式,通過加減乘除等四則運算計算而來。系統(tǒng)的計算任務(wù)是指具體一個或多個報表戶的某年某月某個表套或者其中多個表單的取數(shù)任務(wù)。

        2.2 方案優(yōu)勢

        系統(tǒng)采用多線程高并發(fā)的計算模式,通過負(fù)載均衡策略實現(xiàn)了網(wǎng)格計算,極大提高了系統(tǒng)的計算性能。具體的優(yōu)勢包括下面幾個方面:

        基于MapReduce 高性能并發(fā)計算框架;

        支持取數(shù)線程池的任意動態(tài)擴(kuò)展;

        支持遠(yuǎn)程計算節(jié)點的任意動態(tài)擴(kuò)展;

        可靠的輪詢調(diào)度機制,確保遠(yuǎn)程節(jié)點任務(wù)均衡分配;

        高效可靠的RPC 遠(yuǎn)程調(diào)用機制;

        可靠的容錯機制,在由于網(wǎng)絡(luò)異常情況保證任務(wù)的成功調(diào)用。

        3 詳細(xì)解決方案

        3.1 報表定義(Report Define)

        基礎(chǔ)設(shè)置部分由用戶首先通過表樣定義,指標(biāo)生成,公式定義等操作,將指標(biāo)編碼、指標(biāo)名稱和指標(biāo)取數(shù)表達(dá)式進(jìn)行初始化編制,具體的取數(shù)公式需要對應(yīng)開發(fā)人員開發(fā)相對應(yīng)的取數(shù)插。為能夠說明本方案關(guān)于報表任務(wù)基于MapReduce的過程,本文章中僅僅截取報表中的部分指標(biāo)作為舉例描述。生成出的部分表樣及取數(shù)表達(dá)式如表1 所示。

        表1 指標(biāo)編碼名稱公式

        表1 中共包括6 個指標(biāo),其中有4 個指標(biāo)是正常的取數(shù)指標(biāo)([443_E_1], [443_E_2], [443_F_1], [443_F_1]),兩個指標(biāo)是表間運算的指標(biāo)([443_E_3],[443_F_3])。將指標(biāo)的公式信息一直迭代到最后取數(shù)公式為止,相當(dāng)于將[443_E_3]指標(biāo)的取數(shù)表達(dá)式變更成UDEF_FYD(“y”,“6001”)-UDEF_FYD(“y”,“600190”)+UDEF_FYD(“y”,“6002”)-UDEF_FYD(“y”,“600192”)。其中UDEF_FYD 和UEDF_ND 注冊成指定的JAVA 類,平臺要求將注冊的取數(shù)Java 文件編譯后打包成jar 文件。

        3.2 任務(wù)分解(Task Mapper)

        任務(wù)分解是系統(tǒng)中的核心步驟,用來將復(fù)雜任務(wù)分解成多個簡單任務(wù),這樣會使得任務(wù)能夠并行計算。系統(tǒng)中TaskMapper 程序負(fù)責(zé)報表任務(wù)的MAP 分解過程。提供一個主線程,專門掃描待處理表中的未處理的報表任務(wù),得到報表任務(wù)后,會根據(jù)包含的表套或表單得到具體需要計算的指標(biāo),并循環(huán)指標(biāo)列表,直接從緩存中拿到指標(biāo)包含的取數(shù)公式及參數(shù)信息。根據(jù)上面示例中得到包含的取數(shù)公式數(shù)據(jù)是UDEF_FYD(發(fā)生額),參數(shù)為("y","6001"),("y","600190"),("y","6002"),("y","600192")。UDEF_ND(累計額)公式,參數(shù)包括("y","6001"),("y","600190"),("y","6002"),("y","600192")。此任務(wù)中包括兩個具體公式的業(yè)務(wù)數(shù)據(jù)取數(shù),UDEF_FYD(發(fā)生額)和UDEF_ND(累計額),系統(tǒng)會為這兩個公式分別定義報表戶分解數(shù)和參數(shù)分解數(shù),并根據(jù)這兩個參數(shù)來分解子任務(wù)。如果參數(shù)分別設(shè)成0,那么就是有幾個具體公式就生成幾個任務(wù),否則會根據(jù)這兩個參數(shù)嵌套循環(huán)分解子任務(wù)。任務(wù)分解后,會將子任務(wù)加到報表子任務(wù)池中。如表2 所示,是不同參數(shù)配置下某個取數(shù)公式任務(wù)分解說明以及生成的子任務(wù)個數(shù)舉例。

        表2 不同參數(shù)配置下取數(shù)公式任務(wù)分解說明

        假設(shè)此時只計算1 個報表戶,報表戶編碼為A3201,同時UDEF_FYD 和UDEF_ND 兩個公式的賬戶分解數(shù)為0,參數(shù)分解數(shù)分別為4 和2 時,根據(jù)上述報表定義的指標(biāo)和取數(shù)公式配置共分解成以下3 個子任務(wù),其中UDEF_FYD 公式有1 個任務(wù),UDEF_ND 公式有2 個任務(wù),具體任務(wù)、公式及參數(shù)如表3 所示。

        表3 任務(wù)拆分的具體公式和參數(shù)

        通過對報表指標(biāo)公式表達(dá)式的解析和分解,將指標(biāo)計算任務(wù)按照公式的維度進(jìn)行分組,并且根據(jù)參數(shù)進(jìn)行分解,這樣將一個大的報表任務(wù)分解成任意多個以公式為維度的子任務(wù)。從以指標(biāo)維度進(jìn)行同步橫向計算變成了按照公式維度進(jìn)行縱向并行計算。這些子任務(wù)通過并行計算,改變了整個報表計算的模式。

        3.3 任務(wù)輪詢分配(Task Polling)

        當(dāng)將報表任務(wù)分解成若干個子任務(wù)后,將子任務(wù)加入到子任務(wù)池。系統(tǒng)定義了多個取數(shù)線程數(shù),系統(tǒng)初始化時,會啟動定義的取數(shù)線程,輪詢從子任務(wù)池中獲取一個任務(wù),將任務(wù)更新成處理中狀態(tài)。

        遠(yuǎn)程計算節(jié)點定義心跳服務(wù)端口,并且提供服務(wù)端狀態(tài)更新程序調(diào)用,定期將不可用的節(jié)點移除出可分配遠(yuǎn)程計算節(jié)點,確保任務(wù)分配成功率。遠(yuǎn)程計算節(jié)點啟動時會根據(jù)配置的端口啟動心跳服務(wù),提供服務(wù)端調(diào)用,服務(wù)端調(diào)用成功后將此節(jié)點更新成可用狀態(tài),如果無法訪問則標(biāo)記成不可訪問,具體方案如圖3 任務(wù)輪詢機制示意圖所示。

        圖3 任務(wù)輪詢機制示意圖

        本方案中輪詢調(diào)用算法采用權(quán)重輪詢調(diào)度算法 (Weighted Round-Robin Scheduling)。權(quán)重輪詢調(diào)度算法可以解決服務(wù)器間性能不一的情況,它用相應(yīng)的權(quán)值表示服務(wù)器的處理性能,按權(quán)值的高低和輪詢方式分配請求到各服務(wù)器。權(quán)重輪詢算法根據(jù)新建連接數(shù)來調(diào)度,權(quán)值高的服務(wù)器先收到連接,權(quán)重值越高被輪詢到的次數(shù)(概率)也越高,相同權(quán)值的服務(wù)器處理相同數(shù)目的連接數(shù)。

        3.4 任務(wù)遠(yuǎn)程調(diào)用(RPC Invoke)

        當(dāng)通過任務(wù)輪詢分配,獲得可用的遠(yuǎn)程計算節(jié)點之后,就需要通過遠(yuǎn)程調(diào)用方式,將需要計算的子任務(wù)發(fā)送到遠(yuǎn)程計算節(jié)點。首先需要定義子任務(wù)信息,子任務(wù)包括公式代碼、jar 包文件名、年份、月份、定義JAVA 類、拆分的調(diào)用參數(shù)、報表戶等信息。然后通過RPC 遠(yuǎn)程調(diào)用發(fā)送子任務(wù),在本方案中,采用ICE 作為RPC 框架,負(fù)責(zé)底層傳輸調(diào)用,技術(shù)人員關(guān)注業(yè)務(wù)邏輯的編寫。

        RPC(Remote Producer Call),指遠(yuǎn)程過程調(diào)用,Remote Producer Call Protocol 是一種計算機通信協(xié)議。它允許像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù)。首先根據(jù)ICE 技術(shù)架構(gòu)要求,其傳輸核心代碼是通過對SLICE 文件解析動態(tài)生成。系統(tǒng)定義的SLICE 文件如下,文件定義了1 個調(diào)用方法call,在消息體中定義同步和異步標(biāo)識。

        3.5 任務(wù)匯聚(Task Reducer)

        通過遠(yuǎn)程同步調(diào)用后,在計算節(jié)點上動態(tài)生成任務(wù)信息中的指定JAVA 類的方法。方案中要求指定的JAVA 類繼承系統(tǒng)提供RPFormulaBase 基礎(chǔ)類,動態(tài)加載對象實例,根據(jù)公式包含的參數(shù),以及調(diào)用參數(shù),構(gòu)造String[]參數(shù),從而反射調(diào)用calculate(String[] p1,String[] p2,……,String[] pn)方法。此方法會返回Object 對象。在calculate 方法中,可以根據(jù)報表戶、年月、調(diào)用參數(shù)這些參數(shù),從相應(yīng)的業(yè)務(wù)表中執(zhí)行邏輯,生成需要的取數(shù)結(jié)果。MAP 對象中KEY 的形式為“報表戶編碼_公式編碼(參數(shù)1、參數(shù)2……參數(shù)n)”格式。

        當(dāng)所有的子任務(wù)全部成功執(zhí)行并返回結(jié)果后,會在服務(wù)端匯聚成一個包含全部返回結(jié)果的MAP 對象,然后會啟動指標(biāo)結(jié)果的Reduce 過程。如表4 所示,描述了3 個任務(wù)的基本信息以及分別反饋回來的MAP 匯總后的KEY 和VALUE。

        表4 任務(wù)反饋后MAP 中對應(yīng)KEY 和VALUE 值

        在得到全量MAP 的信息之后,通過循環(huán)所有的指標(biāo),在系統(tǒng)緩存中快速得到指轉(zhuǎn)換后取數(shù)公式,通過KEY 值檢索到對應(yīng)的VALUE,替換取數(shù)公式中的原公式和參數(shù)信息。如指標(biāo)[443_E_1]的取數(shù)表達(dá)式為UDEF_FYD("y","6001")-UDEF_FYD("y","600190"),從指標(biāo)緩存中得到包含的取數(shù)公式、參數(shù)及報表戶編碼,形成KEY 的值為A3201_UDEF_FYD("y","6001")、A3201_UDEF_FYD("y","600190")。假設(shè)從全局MAP 緩存中根據(jù)KEY 值分別得到400、200,分別用這二個值進(jìn)行替換得到最終的取數(shù)表達(dá)式為“(400)-(200)”,再通過引擎計算得到值為200,全部指標(biāo)進(jìn)行替換后形成如表5 所示的數(shù)值。

        表5 全部指標(biāo)經(jīng)過引擎計算后指標(biāo)數(shù)值

        當(dāng)?shù)玫饺恐笜?biāo)的值后,并且通過SQL 批量插入方式進(jìn)行批量更新,從而完成指標(biāo)計算結(jié)果的保存,最終完成任務(wù)匯聚過程。系統(tǒng)會更新主任務(wù)狀態(tài)為計算完成狀態(tài),通過前端頁面任務(wù)主動提醒用戶已經(jīng)完成報表任務(wù)的計算。

        4 結(jié)束語

        本文針對集團(tuán)級復(fù)雜報表的計算提供了一種新的基于MapReduce 云計算計算報表平臺解決方案,能夠解決大數(shù)據(jù)規(guī)模下報表取數(shù)的性能問題,通過對報表任務(wù)的分解,將報表任務(wù)按照取數(shù)公式分解成若干個子任務(wù),運用分布式計算處理子任務(wù),完成子任務(wù)遠(yuǎn)程計算節(jié)點的遠(yuǎn)程調(diào)用。然后對全部結(jié)果數(shù)據(jù)進(jìn)行Reduce 操作。通過這種云計算分布式報表平臺的設(shè)計和使用,大大提升了大數(shù)據(jù)下報表計算的效率。當(dāng)然,整個方案還有很大的優(yōu)化點和提升空間,比如現(xiàn)有任務(wù)輪詢調(diào)度機制使用的權(quán)重輪詢調(diào)度算法,但此算法尚未考慮不同任務(wù)自身計算的復(fù)雜度,這些都需要在后續(xù)的研發(fā)過程中進(jìn)一步優(yōu)化和更新。下一步會將此方案運用到其他符合MapReduce分布式計算的場景中。

        猜你喜歡
        輪詢調(diào)用報表
        核電項目物項調(diào)用管理的應(yīng)用研究
        基于等概率的ASON業(yè)務(wù)授權(quán)設(shè)計?
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        LabWindows/CVI中Excel報表技術(shù)研究
        從三大報表讀懂養(yǎng)豬人的成績單
        基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
        依托站點狀態(tài)的兩級輪詢控制系統(tǒng)時延特性分析
        利用時間輪詢方式操作DDR3實現(xiàn)多模式下數(shù)據(jù)重排
        利用RFC技術(shù)實現(xiàn)SAP系統(tǒng)接口通信
        數(shù)據(jù)鏈輪詢多網(wǎng)優(yōu)化設(shè)計方法研究*
        国产成人精品日本亚洲语音1| 娜娜麻豆国产电影| 国产精品美女久久久久| 蜜臀av在线播放一区二区三区| 精品国模一区二区三区| 国产91网| 成人一区二区三区蜜桃| 高清国产亚洲精品自在久久| 伊人久久大香线蕉av波多野结衣| 国产亚洲人成a在线v网站| 91国在线啪精品一区| 国产成人高清视频在线观看免费 | 鲁丝一区鲁丝二区鲁丝三区| 日本精品中文字幕人妻| 国产成人精品日本亚洲专区61| 丰满人妻熟妇乱又伦精品视| 国产视频不卡在线| 99久久精品国产一区色| 亚洲av高清不卡免费在线| 国产av夜夜欢一区二区三区| 国产精品乱码在线观看| 久久精品国产亚洲av成人擦边 | 69久久夜色精品国产69 | 亚洲一区久久久狠婷婷| 成人影片麻豆国产影片免费观看 | 久99久精品视频免费观看v| 一本到亚洲av日韩av在线天堂 | 日韩中文字幕素人水野一区| 中文字幕无码毛片免费看 | 在线观看国产白浆一区三区| 午夜福利一区二区三区在线观看| 四虎永久在线精品免费观看地址| 中文字幕亚洲精品高清| 欧美牲交a欧美牲交aⅴ免费下载| 在线永久免费观看黄网站| 久久精品午夜免费看| 中文字幕一区久久精品| 国产一区二区波多野结衣| 国产精品国产三级在线高清观看| 中文字幕乱码人妻在线| 成人精品视频一区二区|