吳宇星
摘 要 隨著企業(yè)IT系統(tǒng)架構(gòu)進入“互聯(lián)網(wǎng)+”時代,企業(yè)應(yīng)用軟件也越來越多地采用分布式數(shù)據(jù)庫進行數(shù)據(jù)存儲。企業(yè)數(shù)據(jù)的共享是IT系統(tǒng)中重要的一個環(huán)節(jié),如何實現(xiàn)數(shù)據(jù)分布式存儲架構(gòu)的數(shù)據(jù)共享就成為一個重要的課題了,特別是大批量的數(shù)據(jù)共享就顯得尤為重要,本文就數(shù)據(jù)分布式存儲后基于數(shù)據(jù)同步方案的數(shù)據(jù)共享技術(shù)進行方案設(shè)計。
關(guān)鍵詞 分布式數(shù)據(jù)庫;數(shù)據(jù)共享;數(shù)據(jù)分發(fā);分布式緩存
前言
在分布式系統(tǒng)架構(gòu)中,數(shù)據(jù)分布式存儲,提升了數(shù)據(jù)庫的水平擴展能力,但是受限分布式數(shù)據(jù)庫的特性,分布式數(shù)據(jù)庫數(shù)據(jù)分散存儲,缺乏傳統(tǒng)Oracle數(shù)據(jù)庫的DBLink鏈路數(shù)據(jù)共享機制、也難以像傳統(tǒng)的集中數(shù)據(jù)一樣進行復(fù)雜的關(guān)聯(lián),給數(shù)據(jù)共享帶來了不少的困難。
1 需求及思路
分布式系統(tǒng)架構(gòu)中,從web、服務(wù)到數(shù)據(jù)存儲按照分布式系統(tǒng)架構(gòu)設(shè)計方法,各層實現(xiàn)分布式能力。其中,數(shù)據(jù)分布式存儲是整個架構(gòu)的基礎(chǔ)。數(shù)據(jù)分布式存儲:按照高內(nèi)聚的原則,對數(shù)據(jù)按照時間、功能、ID等維度進行垂直和水平切分,分片存儲。
在分布式數(shù)據(jù)存儲中,數(shù)據(jù)分散存儲,為支持業(yè)務(wù)實現(xiàn),需要考慮數(shù)據(jù)的快速發(fā)布,主要的數(shù)據(jù)分發(fā)場景:①配置類數(shù)據(jù)同步給周邊系統(tǒng),②全局配置類數(shù)據(jù)更新發(fā)布到分布式緩存。
借鑒互聯(lián)網(wǎng)架構(gòu)經(jīng)驗,數(shù)據(jù)的共享主要有兩種方式:一是數(shù)據(jù)服務(wù)化,二是數(shù)據(jù)同步冗余方式,對于大批量的數(shù)據(jù)共享通常為提升應(yīng)用性能,部分全局的數(shù)據(jù)在分布式數(shù)據(jù)節(jié)點中都保存,但是一旦數(shù)據(jù)庫的數(shù)據(jù)發(fā)生變化,通知每個分布的服務(wù)更新內(nèi)存數(shù)據(jù),修改后需要同步給其他所有的數(shù)據(jù)庫節(jié)點。
2 總體方案
數(shù)據(jù)同步主要包括獲取變化數(shù)據(jù)和數(shù)據(jù)發(fā)布兩個環(huán)節(jié):
(1)獲取變化數(shù)據(jù),需要能夠通過數(shù)據(jù)變化事件等方式獲取變化的數(shù)據(jù),常用方案:
①通過時間戳+版本號識別;②通過應(yīng)用同步寫入數(shù)據(jù)變化事件記錄;③通過數(shù)據(jù)庫日志生成數(shù)據(jù)變更事件。
(2)數(shù)據(jù)發(fā)布,將識別的數(shù)據(jù)同步到目標(biāo)數(shù)據(jù)庫或緩存,要求數(shù)據(jù)的完整性要求高,同步速度快。
3 詳細(xì)實現(xiàn)方案
3.1 獲取變化數(shù)據(jù)
(1)觸發(fā)器方式
通過建立緩存更新事件表,使用觸發(fā)器,記錄變更處理事件信息;使用應(yīng)用程序,輪詢緩存更新事件表信息,將變更信息修改到具體的緩存中;
①事件生成機制。對數(shù)據(jù)表設(shè)置觸發(fā)器,當(dāng)數(shù)據(jù)發(fā)生變化時候,將變更事件記錄到更新事件表。②更新機制。開發(fā)一個工具,建立一套配置表(該配置表的信息通過單獨功能直接更新):支持設(shè)置更新的緩存類型、存儲IP、位置等信息,輪詢緩存更新事件表,根據(jù)配置信息進行同步目標(biāo)數(shù)據(jù)庫或緩存。
優(yōu)點:對于事件生成無須區(qū)分應(yīng)用界面及數(shù)據(jù)腳本,統(tǒng)一生成。
缺點:需要數(shù)據(jù)庫加觸發(fā)器,數(shù)據(jù)庫很多,維護管理復(fù)雜。
(2)消息隊列方式
通過應(yīng)用程序生成數(shù)據(jù)變更事件放入消息隊列,通過消息隊列通知相關(guān)應(yīng)用更新緩存。
①事件生成機制。開發(fā)工具,提供配置表,配置哪些表變更需要觸發(fā)信息。應(yīng)用程序變更數(shù)據(jù)時候生成事件機制,放入消息隊列。數(shù)據(jù)庫腳本變更配置:建立變更事件表,數(shù)據(jù)腳本根據(jù)規(guī)則,生成變更事件數(shù)據(jù),由程序再根據(jù)變更內(nèi)容及上述的配置信息,生成事件到消息隊列表數(shù)據(jù)。②更新機制。開發(fā)一個工具,建立一套配置表(該配置表的信息通過單獨功能直接更新):支持設(shè)置更新的緩存類型、存儲IP、位置等信息,根據(jù)從消息隊列接收到的事件,根據(jù)配置信息進行同步目標(biāo)數(shù)據(jù)庫或緩存。
優(yōu)點:相對穩(wěn)定點;
缺點:不在數(shù)據(jù)庫統(tǒng)一實現(xiàn),數(shù)據(jù)修改、割接需要關(guān)注,更新事件表數(shù)據(jù)的插入。
(3)時間戳方式
需要同步的數(shù)據(jù)庫表增加時間戳字段,數(shù)據(jù)更新時,同時更新時間戳,通過比較緩存中的數(shù)據(jù)與數(shù)據(jù)庫記錄的時間戳判斷是否更新數(shù)據(jù)。
①事件生成機制。數(shù)據(jù)庫中需要緩存的表,增加時間戳字段,更新數(shù)據(jù)時,同時更新時間戳。②更新機制。定時跟進數(shù)據(jù)庫中數(shù)據(jù)的時間戳,將數(shù)據(jù)發(fā)布到目標(biāo)數(shù)據(jù)庫或緩存。
優(yōu)點:①設(shè)計簡單,實現(xiàn)快捷;②不依賴第三方組件,觸發(fā)器,由應(yīng)用直接實現(xiàn)。
缺點:需要定時輪詢緩存中的全部數(shù)據(jù),數(shù)據(jù)庫開銷大。
3.2 數(shù)據(jù)發(fā)布方案
識別出待同步數(shù)據(jù)后,通過JGroups機制將數(shù)據(jù)同步到周邊系統(tǒng)或分布式緩存應(yīng)用。JGroups是一個可靠的群組通訊Java工具包,組成員可以分布在局域網(wǎng)或廣域網(wǎng)中,具有非常靈活的協(xié)議棧配置,可輕易配置使用的網(wǎng)絡(luò)協(xié)議。
數(shù)據(jù)分發(fā)模塊采用線程池的概念,每個JGroups成員配置線程池,每個線程負(fù)責(zé)更新一個目標(biāo)對象(如:數(shù)據(jù)庫、分布式緩存)。通過這種方式降低JGroups集群之間的成員數(shù)量,加快通信速度。
數(shù)據(jù)發(fā)布網(wǎng)絡(luò)模式:
3.3 配套管理及監(jiān)控功能
為了實現(xiàn)穩(wěn)定可靠的數(shù)據(jù)共享,需要建立完善的配套管理工具,主要包括:
(1)實現(xiàn)在線配置同步參數(shù):在數(shù)據(jù)同步過程中,用戶可以隨時增加或減少需要同步的數(shù)據(jù)源及同步參數(shù);
(2)建立同步性能查詢功能: 數(shù)據(jù)同步提供同步延遲、同步性能(記錄數(shù)、吞吐量)趨勢圖,用戶可以方便查看同步通道的性能趨勢。
(3)建立完善監(jiān)控功能: 數(shù)據(jù)同步提供同步作業(yè)狀態(tài)、同步延遲的報警監(jiān)控功能,用戶可以根據(jù)業(yè)務(wù)敏感度,自定義同步延遲報警閾值。
4 結(jié)束語
本文初步設(shè)想分布式數(shù)據(jù)庫系統(tǒng)數(shù)據(jù)發(fā)布技術(shù)方案,目前該實現(xiàn)方案已經(jīng)在項目中初步應(yīng)用,需在后續(xù)的實施過程中進一步的提升完善。