人大金倉(cāng)KFS基于分區(qū)索引的分片入庫(kù)技術(shù)解析


中國(guó)產(chǎn)業(yè)經(jīng)濟(jì)信息網(wǎng)   時(shí)間:2022-12-29





在之前的文章《技術(shù)干貨:人大金倉(cāng)KFS精準(zhǔn)過(guò)濾和分片并行入庫(kù)技術(shù)解析》中,KFS利用分片并行入庫(kù)技術(shù),解決了某金融POC數(shù)據(jù)同步項(xiàng)目中數(shù)據(jù)入庫(kù)持續(xù)積壓?jiǎn)栴}。經(jīng)過(guò)優(yōu)化后,在200并發(fā)的壓測(cè)場(chǎng)景中,整體同步性能指標(biāo)從壓測(cè)30分鐘延遲10-20分鐘,變?yōu)闇?zhǔn)實(shí)時(shí)同步,延遲2秒以內(nèi)。

分片并行入庫(kù)技術(shù)的核心原理是將原本需要順序入庫(kù)的數(shù)據(jù),以事務(wù)為單位進(jìn)行拆分,然后并行入庫(kù)。


引入分片并行入庫(kù)特性后的入庫(kù)邏輯


舉例:在原本單車道的路上,每輛汽車載客一人,為了提高通行效率修建為雙車道或者多車道(雙車道的目的地是同一個(gè)城市的不同站),將汽車按照隨機(jī)或者輪詢的方式分配到不同的車道上,從而提高通行效率。

但在另外一個(gè)金融項(xiàng)目中,由于客戶的業(yè)務(wù)邏輯非常復(fù)雜,數(shù)據(jù)庫(kù)表之間的關(guān)聯(lián)盤根錯(cuò)節(jié),為了配置“分片并行入庫(kù)”,現(xiàn)場(chǎng)人員耗費(fèi)了幾天時(shí)間在表關(guān)聯(lián)的梳理上。然而在成功配置“分片并行入庫(kù)”方案后,整體的同步性能依然無(wú)法滿足客戶訴求。

1問(wèn)題深度定位

分片并行入庫(kù)方案中,為了解決數(shù)據(jù)一致性問(wèn)題,引入了Critical數(shù)據(jù)區(qū)的概念。在復(fù)雜的數(shù)據(jù)同步場(chǎng)景中,對(duì)整體性能和易用性帶來(lái)了比較大的沖擊。

1.1“Critical數(shù)據(jù)區(qū)”的性能瓶頸

KFS“Critical數(shù)據(jù)區(qū)”把需要處理具有多表關(guān)聯(lián)事務(wù)的表標(biāo)記為“Critical”,當(dāng)處理“Critical”表的事務(wù)數(shù)據(jù)時(shí),需要保證數(shù)據(jù)串行入庫(kù)。比如下圖所示的9個(gè)事務(wù),假設(shè)每個(gè)事務(wù)入庫(kù)需要1秒,如果使用3個(gè)通道并行入庫(kù),在不考慮數(shù)據(jù)有序性的情況下每個(gè)通道平均分得3個(gè)事務(wù),總共需要3秒執(zhí)行完成。


但是,如果表D被標(biāo)記為“Critical”,處理所有事務(wù)就需要分為三個(gè)階段:

階段一:在處理事務(wù)5前,要等待所有通道中的數(shù)據(jù)處理完成;

階段二:串行處理事務(wù)5,此時(shí)退化成單通道模型;

階段三:事務(wù)5處理完成后,恢復(fù)成多通道模型,并行處理事務(wù)6~9。


舉例:將“Critical”表事務(wù)比喻成一輛大貨車,普通表事務(wù)比喻成一輛小轎車,在通過(guò)一個(gè)三車道的隧道時(shí),普通小轎車可以并行通過(guò),但是一旦大貨車過(guò)此隧道時(shí),整個(gè)隧道就只能允許大貨車單獨(dú)通過(guò),并且在大貨車進(jìn)入隧道中時(shí)設(shè)置等待指示,不允許小轎車進(jìn)入。等待大貨車出隧道后,才允許小轎車并行通過(guò)。

上述整個(gè)事務(wù)處理中,事務(wù)1~4分3個(gè)通道并行處理,需要2次共耗時(shí)2秒,處理事務(wù)5單獨(dú)耗時(shí)1秒,事務(wù)6~9分3個(gè)通道并行處理,需要2次共耗時(shí)2秒。所以整體耗時(shí)5秒,相比無(wú)“Critical”時(shí)耗時(shí)增加了60%。

實(shí)際上現(xiàn)場(chǎng)業(yè)務(wù)相對(duì)復(fù)雜,“Critical”表的事務(wù)頻繁出現(xiàn),導(dǎo)致了數(shù)據(jù)入庫(kù)時(shí)并行和串行交替切換,即使配置了“分片并行入庫(kù)”方案,性能提升效果也不好。

1.2復(fù)雜業(yè)務(wù)場(chǎng)景中的新問(wèn)題

引入分片并行入庫(kù)技術(shù)后,KFS在應(yīng)付簡(jiǎn)單業(yè)務(wù)的數(shù)據(jù)同步壓測(cè)場(chǎng)景中游刃有余,但是在實(shí)際的復(fù)雜業(yè)務(wù)中還存在一些問(wèn)題,比如:

(1)對(duì)同一張表的同一行數(shù)據(jù)先后做不同的操作可能引起數(shù)據(jù)不一致,例如:

事務(wù)1:將表1中key=1數(shù)據(jù)的key修改為2

事務(wù)2:將表1中key=2數(shù)據(jù)的key修改為3

如果兩個(gè)事務(wù)被分配在不同分片中,就有可能出現(xiàn)事務(wù)2先執(zhí)行導(dǎo)致最終數(shù)據(jù)修改失敗。

舉例:車隊(duì)中有兩輛車的乘客是一家人,并且希望父母和孩子能夠在同一個(gè)車道到到達(dá)同一個(gè)站點(diǎn),由先到站的父母帶著后到站的孩子一起去旅行。如果這兩輛車沒(méi)有被分配到一個(gè)車道,就有可能導(dǎo)致孩子先到站并且后續(xù)父母和孩子沒(méi)有到達(dá)一個(gè)站點(diǎn),導(dǎo)致孩子無(wú)人接收,發(fā)生孩子丟失的悲劇。

(2)多表關(guān)聯(lián)交叉事務(wù)如果分配在不同通道同時(shí)執(zhí)行,可能產(chǎn)生死鎖。

舉例:車隊(duì)中有兩輛車分別有2位乘客,前面一輛車的的乘客為A孩子的父親和B孩子;后面一輛車的乘客為B孩子的父親和A孩子;原本計(jì)劃到站后互相交換孩子,繼續(xù)各自的旅程。如果這兩輛車沒(méi)有被分配到一個(gè)車道,就會(huì)出現(xiàn)兩個(gè)父親互相帶著別人的孩子在錯(cuò)誤的站點(diǎn)等待自己孩子的情形,誰(shuí)也無(wú)法將孩子交還給對(duì)方,誰(shuí)也無(wú)法領(lǐng)回自己的孩子。

(3)具有外鍵約束的表,如果分配在不同通道執(zhí)行,可能產(chǎn)生數(shù)據(jù)入庫(kù)異常。比如針對(duì)主外鍵依賴的兩張表,總是希望被依賴表中的數(shù)據(jù)先插入,依賴表的數(shù)據(jù)后插入,才能不違反外鍵約束。如果有外鍵約束的兩張表分配在不同通道,就可能導(dǎo)致依賴表的數(shù)據(jù)先插入,從而引發(fā)數(shù)據(jù)入庫(kù)報(bào)錯(cuò)。

舉例:車隊(duì)中有兩輛車的乘客是一家人,并且希望父母先到,孩子后到,由先到站的父母帶著后到站的孩子一起去旅行。如果這兩輛車沒(méi)有被分配到一個(gè)車道,就有可能導(dǎo)致孩子先到站無(wú)人接收,發(fā)生孩子丟失的悲劇。

由單通道改為多通道后,原本需要串行執(zhí)行的事務(wù)被人為的并行起來(lái)。多個(gè)通道執(zhí)行數(shù)據(jù)入庫(kù)的性能不同,多分區(qū)如何記錄斷點(diǎn),以及分區(qū)斷點(diǎn)恢復(fù)也是一個(gè)棘手問(wèn)題。

2實(shí)戰(zhàn)演練,終結(jié)行業(yè)痛點(diǎn)

針對(duì)以上問(wèn)題,KFS 引入了“基于分區(qū)索引分片入庫(kù)”方案,在完美解決以上問(wèn)題的前提下,相較于無(wú)差別分片并行入庫(kù)還沒(méi)有性能損失。

以下我們將通過(guò)實(shí)際測(cè)試結(jié)果來(lái)驗(yàn)證在不同場(chǎng)景下“基于分區(qū)索引分片入庫(kù)”方案和其他方案的性能差異。

2.1模擬測(cè)試場(chǎng)景中的效果

2.1.1 測(cè)試模型

在數(shù)據(jù)庫(kù)中建立5張表,使用Jmeter工具并行壓測(cè)不同的事務(wù)數(shù)據(jù),分別測(cè)試以下幾種場(chǎng)景的性能:

(1)多表純INSERT開啟和關(guān)閉分片并行入庫(kù)的性能對(duì)比;

(2)多表混合事務(wù)開啟和關(guān)閉分片并行入庫(kù)的性能對(duì)比;

2.1.2 測(cè)試環(huán)境

硬件:X86、8核CPU、16GB內(nèi)存、1TB NVME硬盤

操作系統(tǒng):CentOS 7.6

JDK:1.8

KES版本:V8R6

2.1.3 測(cè)試結(jié)果

多表INSERT事務(wù)場(chǎng)景下入庫(kù)性能對(duì)比

5張表并發(fā)插入10萬(wàn)條insert數(shù)據(jù)(一條insert一個(gè)事務(wù)),可以看到純INSERT小事務(wù)模型下,新引入的“基于分區(qū)索引分片入庫(kù)”方案和之前無(wú)差別“分片并行入庫(kù)”方案性能基本持平,相比較原始的單線程入庫(kù)性能提升到3倍左右。


多表混合事務(wù)場(chǎng)景下入庫(kù)性能對(duì)比

5張表并發(fā)執(zhí)行增、刪、改操作(約包含18%比例的多表混合事務(wù),混合事務(wù)中包含1至5條SQL),合計(jì)50萬(wàn)條數(shù)據(jù),可以看到由于多表混合事務(wù)的影響,之前無(wú)差別“分片并行入庫(kù)”方案性能較原始的單線程入庫(kù)性能已無(wú)多少優(yōu)勢(shì),而新引入的“基于分區(qū)索引分片入庫(kù)”方案較比原始的單線程入庫(kù)性能提升到2.4倍左右。


2.1.4 總結(jié)

“基于分區(qū)索引分片入庫(kù)”方案,可以在不損失無(wú)差別分片并行入庫(kù)方案性能的前提下,彌補(bǔ)無(wú)差別分片并行入庫(kù)方案的缺陷。

2.2客戶問(wèn)題解決效果

在配置了“基于分區(qū)索引分片入庫(kù)”方案后,實(shí)際業(yè)務(wù)場(chǎng)景的表現(xiàn)效果和模擬測(cè)試基本一致,開啟4通道并行入庫(kù)后,入庫(kù)性能基本達(dá)到了單通道的2倍多,原先的并發(fā)24小時(shí)業(yè)務(wù)延遲持續(xù)拉大,變?yōu)榱藴?zhǔn)實(shí)時(shí)同步。


3極致性能背后的黑科技

3.1關(guān)鍵技術(shù) 基于分區(qū)索引分片入庫(kù)方案

引入Critical數(shù)據(jù)區(qū)概念的分片并行入庫(kù)技術(shù)最大的問(wèn)題是需要預(yù)先清楚業(yè)務(wù)場(chǎng)景,才能將正確的表放入Critical數(shù)據(jù)區(qū)中。針對(duì)實(shí)際業(yè)務(wù)動(dòng)態(tài)變化的場(chǎng)景,可能出現(xiàn)因配置遺漏導(dǎo)致數(shù)據(jù)不一致性。本次,我們使用了一種基于分區(qū)索引自動(dòng)分區(qū)的關(guān)鍵技術(shù),在不降低性能的前提下,很好的解決了這些問(wèn)題。

3.1.1 使用分區(qū)索引來(lái)指導(dǎo)事務(wù)分片

自動(dòng)分區(qū)技術(shù)解決的關(guān)鍵問(wèn)題是:維護(hù)未提交事務(wù)的信息。其核心原理為:分發(fā)事務(wù)時(shí),根據(jù)分區(qū)索引確認(rèn)分發(fā)的具體通道,最大限度的減少觸發(fā)Critical數(shù)據(jù)區(qū)。


分區(qū)索引中僅記錄了未提交的事務(wù)。數(shù)據(jù)同步過(guò)程中存在相互依賴的事務(wù)和總事務(wù)數(shù)量比起來(lái),占比很小。

因此僅需要很小的內(nèi)存空間,就解決掉了使用“Critical數(shù)據(jù)區(qū)的分片并行入庫(kù)技術(shù)”中存在的需要客戶自行配置Critical表的易用性問(wèn)題。使分片并行入庫(kù)技術(shù)向產(chǎn)品化更進(jìn)了一步。

3.1.2使用分區(qū)屏障來(lái)解決分區(qū)失效問(wèn)題

分區(qū)索引方案中當(dāng)入庫(kù)器寫數(shù)據(jù)庫(kù)速度不足(比如數(shù)據(jù)庫(kù)性能瓶頸)時(shí),一旦出現(xiàn)多表關(guān)聯(lián)事件,會(huì)導(dǎo)致后續(xù)事件全部發(fā)送到同一分區(qū),從而引發(fā)多分區(qū)機(jī)制的失效

為了解決多分區(qū)失效問(wèn)題,又配套引入分區(qū)屏障機(jī)制,當(dāng)某個(gè)分區(qū)隊(duì)列滿時(shí),對(duì)此分區(qū)設(shè)置一個(gè)屏障,后續(xù)準(zhǔn)備發(fā)送到此分區(qū)的數(shù)據(jù)暫時(shí)阻塞。入庫(kù)器在寫出事務(wù),更新分區(qū)索引時(shí),會(huì)自動(dòng)檢查當(dāng)前分區(qū)的使用容量,如果使用容量小于某閾值(例如50%),則移除此分區(qū)上的屏障,允許后續(xù)事務(wù)被分發(fā)至次分區(qū)。


使用了分區(qū)屏障機(jī)制后,有效解決了數(shù)據(jù)集中分發(fā)至某一分區(qū)時(shí)導(dǎo)致分區(qū)失效的連鎖反應(yīng)。

4結(jié)語(yǔ)

在使用了分區(qū)索引和分區(qū)屏障技術(shù)后,KFS的并行分區(qū)入庫(kù)技術(shù)走向成熟。KFS并行分區(qū)入庫(kù)技術(shù)目前已成功被運(yùn)用到多個(gè)關(guān)鍵項(xiàng)目中,幫助客戶極大的縮短數(shù)據(jù)集成時(shí)間,提升業(yè)務(wù)系統(tǒng)的運(yùn)行效率。

KFS作為一款自主研發(fā)的國(guó)產(chǎn)數(shù)據(jù)同步軟件,深耕于各種國(guó)產(chǎn)化數(shù)據(jù)改造項(xiàng)目。面對(duì)每一次數(shù)據(jù)同步的性能挑戰(zhàn),奮力創(chuàng)新,更多黑科技已經(jīng)蓄勢(shì)待發(fā),讓我們拭目以待!



  轉(zhuǎn)自:永州新聞網(wǎng)

  【版權(quán)及免責(zé)聲明】凡本網(wǎng)所屬版權(quán)作品,轉(zhuǎn)載時(shí)須獲得授權(quán)并注明來(lái)源“中國(guó)產(chǎn)業(yè)經(jīng)濟(jì)信息網(wǎng)”,違者本網(wǎng)將保留追究其相關(guān)法律責(zé)任的權(quán)力。凡轉(zhuǎn)載文章及企業(yè)宣傳資訊,僅代表作者個(gè)人觀點(diǎn),不代表本網(wǎng)觀點(diǎn)和立場(chǎng)。版權(quán)事宜請(qǐng)聯(lián)系:010-65363056。

延伸閱讀

熱點(diǎn)視頻

前兩個(gè)月工業(yè)經(jīng)濟(jì)穩(wěn)定恢復(fù),企業(yè)利潤(rùn)同比繼續(xù)保持增長(zhǎng) 前兩個(gè)月工業(yè)經(jīng)濟(jì)穩(wěn)定恢復(fù),企業(yè)利潤(rùn)同比繼續(xù)保持增長(zhǎng)

熱點(diǎn)新聞

熱點(diǎn)輿情

?

微信公眾號(hào)

版權(quán)所有:中國(guó)產(chǎn)業(yè)經(jīng)濟(jì)信息網(wǎng)京ICP備11041399號(hào)-2京公網(wǎng)安備11010502035964