翁世清 楊多龍
[摘要] 通過(guò)自定義custom組件嵌入DataStage作業(yè),實(shí)現(xiàn)跨區(qū)域DataStage作業(yè)間的批量數(shù)據(jù)以數(shù)據(jù)流方式交換,加快數(shù)據(jù)交換處理效率。
[關(guān)鍵詞] 自定義組件 數(shù)據(jù)流 交換
引言
隨著銀行業(yè)的競(jìng)爭(zhēng)越來(lái)激烈,商業(yè)銀行對(duì)數(shù)據(jù)的分析需求越來(lái)越多,系統(tǒng)與系統(tǒng)間的數(shù)據(jù)交互活動(dòng)越來(lái)越頻繁,這就要求商業(yè)銀行構(gòu)建批量數(shù)據(jù)交換平臺(tái)以滿(mǎn)足日益迫切、日益頻繁的批量數(shù)據(jù)交換需求,而如何更有效地進(jìn)行批量數(shù)據(jù)交換是商業(yè)銀行數(shù)據(jù)交換平臺(tái)面臨的難題之一。本文引入數(shù)據(jù)流處理技術(shù),探討商業(yè)銀行批量數(shù)據(jù)交換的實(shí)現(xiàn)方法,以希望能破解該難題,為商業(yè)銀行批量數(shù)據(jù)交換提速,更好滿(mǎn)足市場(chǎng)分析需求。
一、批量數(shù)據(jù)交換平臺(tái)的現(xiàn)狀及問(wèn)題
在批量數(shù)據(jù)交換平臺(tái)中,眾多銀行選用ETL(Extract:數(shù)據(jù)抽取,Transform:數(shù)據(jù)轉(zhuǎn)換處理,Load:數(shù)據(jù)加載)工具進(jìn)行。目前IBM公司的DataStage是較為普遍采用的ETL加工工具,很多銀行都采用DataStage實(shí)現(xiàn)ETL數(shù)據(jù)加工。本文的研究對(duì)象就是以DataStage為基礎(chǔ)的。目前DataStage作業(yè)(為實(shí)現(xiàn)數(shù)據(jù)抽取、轉(zhuǎn)換處理、裝載功能而用DataStage設(shè)計(jì)的一些作業(yè),每一個(gè)作業(yè)實(shí)現(xiàn)一定數(shù)據(jù)的抽取、轉(zhuǎn)換處理、裝載功能)與作業(yè)間的數(shù)據(jù)交換不易實(shí)現(xiàn)流水線(xiàn)方式(即前一作業(yè)與后一作業(yè)同步進(jìn)行數(shù)據(jù)的處理,數(shù)據(jù)在前后DataStage作業(yè)間的流動(dòng)是流水線(xiàn)式的),往往是前一個(gè)作業(yè)處理好一整份數(shù)據(jù)(如一個(gè)文件或一個(gè)數(shù)據(jù)表)后交由后一個(gè)作業(yè)處理,尤其是前后作業(yè)處于不同區(qū)域(如不同的系統(tǒng)、不同的地域)當(dāng)前,以總分行為例,總行與分行的DataStage 作業(yè)之間進(jìn)行數(shù)據(jù)傳輸離不開(kāi)數(shù)據(jù)的落地操作。例如,當(dāng)一個(gè)分行需要總行的加工數(shù)據(jù)進(jìn)行后續(xù)的加工處理時(shí),總行獲取相關(guān)的數(shù)據(jù)進(jìn)行DataStage 作業(yè)加工處理后生成分行需要的落地?cái)?shù)據(jù)文件,然后啟動(dòng)文件傳輸程序把文件傳輸?shù)椒中校中袉?dòng)分行DataStage作業(yè)處理該文件并生成分行需要的數(shù)據(jù)。鑒于銀行部門(mén)對(duì)數(shù)據(jù)的安全性要求很高,故數(shù)據(jù)在傳輸過(guò)程中需要加密;又由于總行和分行之間的傳輸網(wǎng)絡(luò)帶寬有限,故需要對(duì)要傳輸?shù)臄?shù)據(jù)進(jìn)行加壓(即壓縮)以減少傳輸量,減少對(duì)網(wǎng)絡(luò)帶寬的占用,進(jìn)而提供傳輸效率,并且數(shù)據(jù)文件傳輸?shù)椒中泻笙嚷涞兀俳鈮航饷芎笥忠涞?。因此,現(xiàn)有總行與分行的DataStage 作業(yè)之間的數(shù)據(jù)傳輸機(jī)制中通常存在加壓、加密、解壓、解密等落地操作,多次數(shù)據(jù)落地操作需要占用大量的存儲(chǔ)資源以及大量的計(jì)算機(jī)系統(tǒng)處理資源(例如占用CPU資源及I/O資源去多次讀文件數(shù)據(jù)和寫(xiě)文件數(shù)據(jù)),并且多次數(shù)據(jù)落地操作會(huì)導(dǎo)致數(shù)據(jù)處理的時(shí)間延長(zhǎng),使總行與分行的DataStage作業(yè)之間數(shù)據(jù)處理時(shí)效性差。那么有沒(méi)有一種更有效的方式實(shí)現(xiàn)跨區(qū)域的DataStage作業(yè)間批量數(shù)據(jù)交換呢?答案是肯定的。
二、數(shù)據(jù)流交換技術(shù)的優(yōu)勢(shì)
通過(guò)以上的問(wèn)題分析,我們可以看出DataStage作業(yè)間的數(shù)據(jù)交換效率低下及耗資源的原因就是數(shù)據(jù)交換是以數(shù)據(jù)文件的方式進(jìn)行的,如果DataStage作業(yè)間的數(shù)據(jù)交換是以數(shù)據(jù)流的方式,很多問(wèn)題都將得以解決,因?yàn)閿?shù)據(jù)流交換具備以下優(yōu)勢(shì):
1.同時(shí)性
前作業(yè)完成一條記錄處理后即可交給后作業(yè)進(jìn)行并行處理
2.效率高
數(shù)據(jù)流處理是在內(nèi)存進(jìn)行的,所有的加壓加密都是在內(nèi)存中進(jìn)行的,數(shù)據(jù)不需要象數(shù)據(jù)文件交換一樣寫(xiě)到硬盤(pán)上,故數(shù)據(jù)的讀寫(xiě)效率高。
三、數(shù)據(jù)流交換技術(shù)的實(shí)現(xiàn)原理
實(shí)現(xiàn)原理:通過(guò)自定義組件嵌入到上游DataStage作業(yè)中,進(jìn)行DataStage作業(yè)數(shù)據(jù)的接管及加壓加密并發(fā)送目標(biāo);在目標(biāo)端開(kāi)發(fā)守候服務(wù)端進(jìn)行數(shù)據(jù)接收并解壓解密并啟動(dòng)下游作業(yè)的運(yùn)行。邏輯流圖如下:
1.自定義組件
要實(shí)現(xiàn)數(shù)據(jù)流交換,就必須接管DataStage作業(yè)的輸出,這就需要我們開(kāi)發(fā)自定義組件嵌入到DataStage中。DataStage軟件提供了三種自定義的DataStage組件技術(shù),即wrap、buildop、custom三種自定義組件技術(shù),其中,wrap、buildop技術(shù)相對(duì)比較簡(jiǎn)單,但實(shí)現(xiàn)的功能有限,不能實(shí)現(xiàn)通訊、加密加壓等功能,故采用custom自定義組件技術(shù)。custom自定義組件是采用C++技術(shù)實(shí)現(xiàn)的,其結(jié)構(gòu)繼承DataStage提供的基本程序架構(gòu),并允許調(diào)用DataStage的API。上圖中的自定義組件包含如下模塊:數(shù)據(jù)接收并備份、連接遠(yuǎn)程server、發(fā)送遠(yuǎn)程管道名及下游作業(yè)名、壓縮加密數(shù)據(jù)、發(fā)送數(shù)據(jù)五個(gè)模塊。
“數(shù)據(jù)接收并備份”模塊主要負(fù)載接收“數(shù)據(jù)加工處理”模塊處理后的數(shù)據(jù)流并落地備份成本地文件,目的是為了傳輸異常處理,因?yàn)橐粋€(gè)DataStage作業(yè)的“數(shù)據(jù)加工處理”模塊往往擔(dān)負(fù)著本作業(yè)的主要工作,也是本作業(yè)的主要模塊,需要的代價(jià)(如cpu、io)也比較大,故不便重復(fù)執(zhí)行,有時(shí)是不能重復(fù)執(zhí)行的(如累加計(jì)算類(lèi)的加工)。而“數(shù)據(jù)發(fā)送”組件受下游守候server、物理網(wǎng)絡(luò)等因素影響,成功執(zhí)行的不可控因素較多,可能比較容易導(dǎo)致執(zhí)行失敗。故如果僅僅是發(fā)送模塊執(zhí)行失敗,而數(shù)據(jù)加工模塊執(zhí)行成功,則本作業(yè)重新執(zhí)行時(shí)“數(shù)據(jù)加工處理”模塊就不用重新執(zhí)行,“數(shù)據(jù)發(fā)送”組件直接讀取落地備份文件進(jìn)行加壓加密后傳送給目標(biāo)server即可。
“連接遠(yuǎn)程server”模塊主要根據(jù)作業(yè)的配置參數(shù)連接目標(biāo)server,以便后續(xù)的數(shù)據(jù)通訊,該模塊還負(fù)責(zé)完成發(fā)送自身的身份信息以便目標(biāo)server進(jìn)行身份認(rèn)證。
“發(fā)送遠(yuǎn)程管道名及下游作業(yè)名”模塊根據(jù)作業(yè)配置參數(shù)把下游作業(yè)需要的輸入文件名作為管道名及下游作業(yè)名本身發(fā)送給目標(biāo)server,以便目標(biāo)server創(chuàng)建數(shù)據(jù)交換的管道及啟動(dòng)下游作業(yè)進(jìn)行后續(xù)的數(shù)據(jù)處理。如果目標(biāo)server返回該管道已經(jīng)存在則返回模塊執(zhí)行失敗標(biāo)志,并記錄日志。此時(shí)作業(yè)會(huì)繼續(xù)運(yùn)行而不會(huì)出錯(cuò)中斷,數(shù)據(jù)加工模塊繼續(xù)加工數(shù)據(jù)并落地到備份文件,只是傳輸模塊不進(jìn)行后續(xù)的傳輸工作了。
“壓縮加密數(shù)據(jù)”模塊根據(jù)作業(yè)配置參數(shù)選擇性地進(jìn)行數(shù)據(jù)壓縮、數(shù)據(jù)加密工作,數(shù)據(jù)壓縮及加密都是采用內(nèi)存數(shù)據(jù)塊方式進(jìn)行的。密鑰采用動(dòng)態(tài)密鑰機(jī)制。
“發(fā)送數(shù)據(jù)”模塊純粹負(fù)責(zé)把待發(fā)送的數(shù)據(jù)發(fā)送給目標(biāo)server。
2.下游守候server
“下游守候server”完成接收上游作業(yè)“發(fā)送數(shù)據(jù)”模塊發(fā)送的數(shù)據(jù)(包括控制數(shù)據(jù),如、密鑰、加壓加密標(biāo)志、管道名、下游作業(yè)名等,以及待處理數(shù)據(jù)本身)。處理流程是首先完成連接者的身份認(rèn)證,然后接收管道名及下游作業(yè)名并創(chuàng)建該管道,如果該管道已經(jīng)存在則表示作業(yè)異常,并返回失敗信息給發(fā)送端;接著是啟動(dòng)下游作業(yè),如果啟動(dòng)作業(yè)失敗就返回失敗信息給發(fā)送端;最后是接收數(shù)據(jù)并根據(jù)標(biāo)志判斷是否需要解密解壓(解密解壓也是采用內(nèi)存數(shù)據(jù)塊的方式進(jìn)行的)后進(jìn)行數(shù)據(jù)完整行校驗(yàn)并寫(xiě)入數(shù)據(jù)到管道文件中。
當(dāng)下游作業(yè)成功完成后,“下游守候server”發(fā)送作業(yè)執(zhí)行成功標(biāo)志給上游作業(yè)的“數(shù)據(jù)發(fā)送”組件,上游作業(yè)的“數(shù)據(jù)發(fā)送”組件刪除備份數(shù)據(jù)文件,并成功退出。“下游守候server”刪除管道文件,成功退出。若下游作業(yè)執(zhí)行失敗,“下游守候server”刪除管道文件并發(fā)送作業(yè)執(zhí)行失敗標(biāo)志給上游作業(yè)的“數(shù)據(jù)發(fā)送”組件,上游作業(yè)的“數(shù)據(jù)發(fā)送”組件不再傳送數(shù)據(jù)給下游守候server。
結(jié)束語(yǔ)
數(shù)據(jù)流處理技術(shù)的應(yīng)用大大減少了批量數(shù)據(jù)交換平臺(tái)的數(shù)據(jù)落地次數(shù),提高了數(shù)據(jù)的交換效率,實(shí)現(xiàn)了批量數(shù)據(jù)交換平臺(tái)的高效可控運(yùn)轉(zhuǎn)。目前該技術(shù)在某商業(yè)銀行成功得到應(yīng)用,應(yīng)用效率顯著。
參考文獻(xiàn):
[1] 葛兆強(qiáng)編著.透析商業(yè)銀行的金融創(chuàng)新與核心競(jìng)爭(zhēng)力[M].中國(guó)金融電腦.2007.05.p1-7.
[2] William H.Inmon.Building the Operational Data Store[M].John Wiley & Sons, Inc.New York, NY, USA,1999.
[3] 周敏.信息整合教程[M].軍事科學(xué)出版社.2005年.
[4] 梅啟智,廖炯生,孫慧中.系統(tǒng)可靠性工程基礎(chǔ)[M].科學(xué)出版社.1992年.