實例分析OLTP類系統(tǒng)數(shù)據(jù)結(jié)轉(zhuǎn)
業(yè)務(wù)系統(tǒng)在長期運行的過程中會積累大量的數(shù)據(jù),這些數(shù)據(jù)有些是需要長期保存的,例如一些訂單數(shù)據(jù),有些只需要短期保存,例如一些日志信息。業(yè)務(wù)數(shù)據(jù)一般都會有一個生命周期,生命周期內(nèi)的我們叫生產(chǎn)數(shù)據(jù),生命周期之外(即業(yè)務(wù)已經(jīng)關(guān)閉)的叫歷史數(shù)據(jù),我們這里提到的數(shù)據(jù)結(jié)轉(zhuǎn),指的是將需要長期保存的歷史數(shù)據(jù)從生產(chǎn)庫遷移到歷史庫(轉(zhuǎn)),而將需要短期保存的數(shù)據(jù)定期刪除(結(jié))。
我們已經(jīng)進(jìn)入了大數(shù)據(jù)時代,但在OLTP類系統(tǒng)中,關(guān)系型數(shù)據(jù)庫依然占據(jù)主導(dǎo)地位,在關(guān)系型數(shù)據(jù)庫中,如果不及時進(jìn)行數(shù)據(jù)結(jié)轉(zhuǎn),會嚴(yán)重影響系統(tǒng)的性能。
關(guān)系型數(shù)據(jù)庫單機容量有限,因此業(yè)界普遍的做法是進(jìn)行垂直分庫和水平分片,一些大型互聯(lián)網(wǎng)企業(yè)由于業(yè)務(wù)量龐大,僅分片的集群規(guī)模就能達(dá)到上千節(jié)點,再加上分庫的集群,規(guī)模非常巨大。傳統(tǒng)的數(shù)據(jù)歸檔方法往往針對單庫操作,難以處理如此大規(guī)模集群的數(shù)據(jù)歸檔。
同時,在大型互聯(lián)網(wǎng)企業(yè),每日的數(shù)據(jù)增長量非常大,數(shù)據(jù)結(jié)轉(zhuǎn)的頻率遠(yuǎn)大于傳統(tǒng)行業(yè),這些行業(yè)的IT系統(tǒng)往往是7*24小時不間斷提供服務(wù),而且全天24小時的并發(fā)量都很大,因此數(shù)據(jù)結(jié)轉(zhuǎn)操作必須盡量減少對生產(chǎn)庫的性能影響。
為此,我們自主研發(fā)了數(shù)據(jù)結(jié)轉(zhuǎn)平臺,以解決大數(shù)據(jù)背景下的數(shù)據(jù)結(jié)轉(zhuǎn)問題。
二、 技術(shù)架構(gòu)
2.1 設(shè)計要點
?。?)盡量減少對生產(chǎn)庫的影響
數(shù)據(jù)結(jié)轉(zhuǎn)操作沒有復(fù)雜的業(yè)務(wù)邏輯,因此對數(shù)據(jù)庫性能的影響主要體現(xiàn)在IO方面,減少對生產(chǎn)庫的影響,最主要的就是減少對生產(chǎn)庫的IO操作。目前我們采用的方案是通過從庫查詢數(shù)據(jù),將數(shù)據(jù)插入歷史庫,然后再從主庫中刪除,如圖1數(shù)據(jù)結(jié)轉(zhuǎn)邏輯圖所示,將查詢的IO操作轉(zhuǎn)嫁到從庫上,可以大大減輕對主庫的影響。為了保障數(shù)據(jù)庫的高可用,業(yè)內(nèi)基本都采用了主從部署模式,因此這個方案具有很高的通用性。
圖1 數(shù)據(jù)結(jié)轉(zhuǎn)邏輯圖
?。?)支持分庫分片集群
我們希望數(shù)據(jù)結(jié)轉(zhuǎn)平臺的配置足夠簡單并且易于理解。在和用戶的溝通過程中,我們發(fā)現(xiàn)他們最強烈的需求就是分庫分片集群的數(shù)據(jù)結(jié)轉(zhuǎn)。傳統(tǒng)的單機數(shù)據(jù)結(jié)轉(zhuǎn)操作可以抽象描述為:將數(shù)據(jù)庫實例A中表B的歷史數(shù)據(jù)結(jié)轉(zhuǎn)到歷史庫C,用戶的配置主要有4個元素:生產(chǎn)庫實例A、結(jié)轉(zhuǎn)表B、結(jié)轉(zhuǎn)條件和歷史庫。對于大規(guī)模的分庫分片集群規(guī)模,如果采用傳統(tǒng)單機數(shù)據(jù)結(jié)轉(zhuǎn)的配置方式,每一個數(shù)據(jù)庫實例都要配置4個元素,配置量非常大。
在我們的方案中,按照圖2所示對數(shù)據(jù)庫集群進(jìn)行劃分,將主庫、從庫、歷史庫作為一個結(jié)轉(zhuǎn)單元,對于分片的數(shù)據(jù)庫集群,表結(jié)構(gòu)相同,我們將其作為一個分組,對于分庫的集群,表結(jié)構(gòu)不同則劃分為不同的分組。用戶進(jìn)行配置的時候不是面向一個數(shù)據(jù)庫實例,而是面向一個分組,數(shù)據(jù)結(jié)轉(zhuǎn)操作抽象為:結(jié)轉(zhuǎn)分組X中表B的歷史數(shù)據(jù),用戶的配置元素有3個:分組X、結(jié)轉(zhuǎn)表B和結(jié)轉(zhuǎn)條件。分組信息僅需配置一次。這樣大大簡化了用戶的配置工作。
(3)支持水平擴展
由于數(shù)據(jù)庫集群規(guī)模較大,數(shù)據(jù)結(jié)轉(zhuǎn)平臺應(yīng)該具備水平擴展能力。我們采用的方案是將數(shù)據(jù)結(jié)轉(zhuǎn)最核心的組件定時任務(wù)和數(shù)據(jù)庫操作(數(shù)據(jù)結(jié)轉(zhuǎn)執(zhí)行器)獨立出來,進(jìn)行分布式部署。如下圖3所示,
圖2 數(shù)據(jù)庫集群模型
配置中心為用戶的入口,用戶通過配置中心定義數(shù)據(jù)結(jié)轉(zhuǎn)任務(wù),任務(wù)的關(guān)鍵屬性包括:觸發(fā)條件、執(zhí)行條件、目標(biāo)分組等,配置中心將結(jié)轉(zhuǎn)任務(wù)分發(fā)給代理程序,同時對代理程序的執(zhí)行狀態(tài)進(jìn)行監(jiān)控。結(jié)轉(zhuǎn)任務(wù)的觸發(fā)條件配置在代理程序中的定時任務(wù)中,而執(zhí)行條件和目標(biāo)分組則作為數(shù)據(jù)結(jié)轉(zhuǎn)執(zhí)行器的執(zhí)行參數(shù)。通過水平擴展代理程序,我們對更多的數(shù)據(jù)庫進(jìn)行結(jié)轉(zhuǎn)。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%