本發(fā)明屬于券商行業(yè)數(shù)據(jù)實時交換領(lǐng)域,特別是一種基于消息中間件的異構(gòu)數(shù)據(jù)庫實時同步方法。
背景技術(shù):
隨著互聯(lián)網(wǎng)金融的蓬勃發(fā)展,金融行業(yè)也在從傳統(tǒng)架構(gòu)逐步向分布式架構(gòu)進(jìn)化,數(shù)據(jù)存儲方式也從單一oracle發(fā)展到多種多樣的異構(gòu)數(shù)據(jù)存儲主要有mysql、內(nèi)存數(shù)據(jù)庫,nosql數(shù)據(jù)庫,mpp等數(shù)據(jù)庫。同時金融行業(yè)傳統(tǒng)數(shù)據(jù)同步方式主要采用etl集中批處理的形式,這種方式時延較高,同時對于數(shù)據(jù)庫有峰值壓力,并且經(jīng)常重復(fù)抽取數(shù)據(jù),隨著業(yè)務(wù)的發(fā)展,對于數(shù)據(jù)的同步要求以更實時的方式進(jìn)行。
目前在金融行業(yè)并沒有一套完整的基于消息中間件的異構(gòu)數(shù)據(jù)實時同步解決方案。而在開源領(lǐng)域,databus,基于自身定義的eventbuffer對象使用avro序列化,alibaba-canal基于protobuf做序列化,兩者都是使用netty做消息傳輸,缺點是開源版本沒有一套完整的架構(gòu)體系支持,消息不能持久化,不能多次利用和重復(fù)消費,支持的數(shù)據(jù)源較少,對于消費方不友好,需要完全自主開發(fā),也無法直接和當(dāng)前一些大數(shù)據(jù)技術(shù)結(jié)合起來使用。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明提供了一種能夠解決異構(gòu)數(shù)據(jù)源之間數(shù)據(jù)難轉(zhuǎn)化的技術(shù)難點及重復(fù)的數(shù)據(jù)抽取帶來的資源浪費和系統(tǒng)壓力問題的基于消息中間件的異構(gòu)數(shù)據(jù)庫實時同步方法。
本發(fā)明的目的通過以下技術(shù)方案實現(xiàn)。
一種基于消息中間件的異構(gòu)數(shù)據(jù)庫實時同步方法,步驟包括:
1)根據(jù)不同類型數(shù)據(jù)源部署數(shù)據(jù)采集模塊:當(dāng)數(shù)據(jù)源為oracle或mysql關(guān)系型數(shù)據(jù)庫時,則所述數(shù)據(jù)采集模塊部署在數(shù)據(jù)源所在主機外;當(dāng)數(shù)據(jù)源為日志類數(shù)據(jù)源,則在數(shù)據(jù)源主機上安裝數(shù)據(jù)采集模塊,之后執(zhí)行步驟2);
2)所述數(shù)據(jù)采集模塊將各自采集來的數(shù)據(jù)進(jìn)行加工處理并采用protobuffer技術(shù)封裝成統(tǒng)一數(shù)據(jù)模型,之后執(zhí)行步驟3);
3)所述數(shù)據(jù)采集模塊將統(tǒng)一數(shù)據(jù)模型發(fā)送給消息中間件進(jìn)行持久化,之后執(zhí)行步驟4);
4)數(shù)據(jù)處理模塊通過消息處理框架api從消息中間件中拉取數(shù)據(jù),并根據(jù)業(yè)務(wù)規(guī)則進(jìn)行業(yè)務(wù)處理,本方法結(jié)束。
進(jìn)一步的,步驟2)中所述統(tǒng)一數(shù)據(jù)模型具體包括數(shù)據(jù)頭和數(shù)據(jù)體。
進(jìn)一步的,所述數(shù)據(jù)頭包括:采集版本、數(shù)據(jù)庫類型、數(shù)據(jù)源ip、數(shù)據(jù)文件名、數(shù)據(jù)下標(biāo)、數(shù)據(jù)庫模式、表名、操作類型。
進(jìn)一步的,所述數(shù)據(jù)體包括前列簇和后列簇,所述前列簇和后列簇包括字段名、字段描述、是否主鍵、字段內(nèi)容、字段類型。
進(jìn)一步的,步驟4)中所述業(yè)務(wù)規(guī)則包括數(shù)據(jù)源之間的數(shù)據(jù)轉(zhuǎn)換和利用數(shù)據(jù)作業(yè)務(wù)分析。
進(jìn)一步的,步驟4)中所述數(shù)據(jù)處理模塊通過消息處理框架api從消息中間件中拉取數(shù)據(jù)后將數(shù)據(jù)通過protobuffer技術(shù)進(jìn)行反序列化及統(tǒng)一解析,調(diào)用api接口并根據(jù)業(yè)務(wù)規(guī)則進(jìn)行業(yè)務(wù)處理,然后告警監(jiān)控進(jìn)行數(shù)據(jù)持久化。
相比于現(xiàn)有技術(shù),本發(fā)明的優(yōu)點在于:本發(fā)明建設(shè)統(tǒng)一的實時框架管理異構(gòu)數(shù)據(jù)源之間實時數(shù)據(jù)交換。實時拉取的異構(gòu)數(shù)據(jù)建立統(tǒng)一模型后,分類持久化到消息中間件,通過消費消息中間件中數(shù)據(jù),從而根據(jù)業(yè)務(wù)需求進(jìn)行相應(yīng)數(shù)據(jù)處理。
本發(fā)明設(shè)置異構(gòu)數(shù)據(jù)源的數(shù)據(jù)中轉(zhuǎn)站和數(shù)據(jù)代理,從而讓數(shù)據(jù)源對業(yè)務(wù)處理透明。提供實時的數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)抽取,解決異構(gòu)數(shù)據(jù)源之間數(shù)據(jù)難轉(zhuǎn)化的技術(shù)難點及重復(fù)的數(shù)據(jù)抽取帶來的資源浪費和系統(tǒng)壓力等問題。
在數(shù)據(jù)源端,數(shù)據(jù)采集模塊采用一主多備,可以做到不停機自動切換。在數(shù)據(jù)處理模塊基于消息中間件做到負(fù)載均衡和互為主備。同時該方案提供可靠的監(jiān)控模塊,對所有源端和末端的應(yīng)用進(jìn)行整體的部署,監(jiān)控和管理。
本發(fā)明提供完整的一套從數(shù)據(jù)源,數(shù)據(jù)采集,統(tǒng)一模型,中間件存儲,末端接收處理的數(shù)據(jù)鏈路。并在鏈路的每個節(jié)點上以對業(yè)務(wù)方透明為宗旨,以數(shù)據(jù)高效利用為目標(biāo),針對不同數(shù)據(jù)源提供不同的采集器;統(tǒng)一的模型,將業(yè)務(wù)方和數(shù)據(jù)源隔離;框架自身的末端框架和市面上流式框架結(jié)合使用,幫助業(yè)務(wù)方徹底與數(shù)據(jù)源隔離,只關(guān)注業(yè)務(wù)本身;統(tǒng)一的管理中心,監(jiān)控數(shù)據(jù)交換平臺管理下所有任務(wù)的生命周期;引入消息中間件,提高數(shù)據(jù)的吞吐量,利用其持久化特征可做到讓不同的業(yè)務(wù)方消費同一份數(shù)據(jù),還可讓業(yè)務(wù)方消費已經(jīng)消費過的數(shù)據(jù),極大提高數(shù)據(jù)的利用率和業(yè)務(wù)的容錯能力。
附圖說明
圖1為本發(fā)明的整體架構(gòu)圖。
圖2為本發(fā)明的統(tǒng)一數(shù)據(jù)模型示意圖。
具體實施方式
下面結(jié)合說明書附圖和具體的實施例,對本發(fā)明作詳細(xì)描述。
基于圖1所示的整體架構(gòu),一種基于消息中間件的異構(gòu)數(shù)據(jù)庫實時同步方法,步驟包括:
1)根據(jù)不同類型數(shù)據(jù)源部署數(shù)據(jù)采集模塊:當(dāng)數(shù)據(jù)源為oracle或mysql關(guān)系型數(shù)據(jù)庫時,則所述數(shù)據(jù)采集模塊部署在數(shù)據(jù)源所在主機外,減少主機壓力;當(dāng)數(shù)據(jù)源為日志類數(shù)據(jù)源,則在數(shù)據(jù)源主機上安裝數(shù)據(jù)采集模塊,之后執(zhí)行步驟2);
2)所述數(shù)據(jù)采集模塊將各自采集來的數(shù)據(jù)進(jìn)行加工處理并采用protobuffer技術(shù)封裝成統(tǒng)一數(shù)據(jù)模型,之后執(zhí)行步驟3);
3)所述數(shù)據(jù)采集模塊將統(tǒng)一數(shù)據(jù)模型發(fā)送給消息中間件進(jìn)行持久化,之后執(zhí)行步驟4);
4)數(shù)據(jù)處理模塊通過消息處理框架api從消息中間件中拉取數(shù)據(jù),并根據(jù)業(yè)務(wù)規(guī)則進(jìn)行業(yè)務(wù)處理,本方法結(jié)束。
步驟2)中所述統(tǒng)一數(shù)據(jù)模型具體包括數(shù)據(jù)頭和數(shù)據(jù)體。
所述數(shù)據(jù)頭包括:采集版本、數(shù)據(jù)庫類型、數(shù)據(jù)源ip、數(shù)據(jù)文件名、數(shù)據(jù)下標(biāo)、數(shù)據(jù)庫模式(schema)、表名、操作類型。
所述數(shù)據(jù)體包括前列簇和后列簇,所述前列簇和后列簇包括字段名、字段描述、是否主鍵、字段內(nèi)容、字段類型。
步驟4)中所述業(yè)務(wù)規(guī)則包括數(shù)據(jù)源之間的數(shù)據(jù)轉(zhuǎn)換和利用數(shù)據(jù)作業(yè)務(wù)分析,包括監(jiān)控,告警,營銷等事務(wù)。
步驟4)中所述數(shù)據(jù)處理模塊通過消息處理框架api從消息中間件中拉取數(shù)據(jù)后將數(shù)據(jù)通過protobuffer技術(shù)進(jìn)行反序列化及統(tǒng)一解析,調(diào)用api接口并根據(jù)業(yè)務(wù)規(guī)則進(jìn)行業(yè)務(wù)處理,然后告警監(jiān)控進(jìn)行數(shù)據(jù)持久化,業(yè)務(wù)處理只需按照框架提供的api實現(xiàn)接口服務(wù)即可。
本發(fā)明通過消息中間件的topic特性進(jìn)行業(yè)務(wù)區(qū)別,在數(shù)據(jù)采集模塊進(jìn)行業(yè)務(wù)數(shù)據(jù)采集后使用步驟2)中的數(shù)據(jù)模型統(tǒng)一化,并按照消息中間件的topic進(jìn)行數(shù)據(jù)發(fā)送(不同業(yè)務(wù)使用不同消息中間件topic)。同時數(shù)據(jù)處理模塊封裝了一套數(shù)據(jù)接收框架,基于數(shù)據(jù)模型提供了統(tǒng)一的業(yè)務(wù)處理api接口,業(yè)務(wù)方在此api的基礎(chǔ)上實現(xiàn)具體數(shù)據(jù)處理實現(xiàn)。
接收框架會先從指定的topic中接收數(shù)據(jù),將接收的數(shù)據(jù)按照步驟2)中的數(shù)據(jù)模型反序列化,并將數(shù)據(jù)傳給具體的業(yè)務(wù)實現(xiàn)完成處理。當(dāng)確認(rèn)業(yè)務(wù)處理完畢后,接收框架會完成持久化工作,保證后續(xù)處理中之前已經(jīng)處理過的數(shù)據(jù)不再被重復(fù)消費。