呂遠(yuǎn)陽
(山東省農(nóng)村信用社聯(lián)合社,濟(jì)南 250000)
隨著信息技術(shù)的不斷發(fā)展,各類信息系統(tǒng)廣泛應(yīng)用于人們的日常生活。大多數(shù)銀行業(yè)務(wù)都可以通過移動(dòng)端隨時(shí)隨地辦理,擺脫了時(shí)間、地點(diǎn)的限制。信息系統(tǒng)作為銀行的生命線,支撐著銀行業(yè)務(wù)的發(fā)展。如何提高信息系統(tǒng)的安全性和穩(wěn)定性,保證業(yè)務(wù)的連續(xù)性,提升系統(tǒng)并發(fā)性,是銀行IT系統(tǒng)建設(shè)時(shí)必須考慮的問題。
電商平臺(tái)的各類促銷、秒殺活動(dòng),節(jié)假日各類人情往來、消費(fèi)采購等,經(jīng)常會(huì)使某一時(shí)間段內(nèi)交易量激增,對(duì)數(shù)據(jù)庫訪問增多,對(duì)部分熱點(diǎn)數(shù)據(jù)的訪問壓力加大。這種情況下,數(shù)據(jù)庫通常無法支持如此高的瞬時(shí)服務(wù)器請(qǐng)求,常見的解決方案是讓大部分相同信息的請(qǐng)求都盡可能地壓在緩存(cache)上來緩解數(shù)據(jù)庫的壓力,從而盡可能地去滿足高并發(fā)訪問的訴求。
對(duì)銀行信息系統(tǒng)而言,發(fā)起的數(shù)據(jù)庫訪問大多針對(duì)資金賬戶等重要資源數(shù)量的數(shù)據(jù),在數(shù)據(jù)安全、實(shí)時(shí)、準(zhǔn)確及一致性方面要求非常高。一個(gè)業(yè)務(wù)請(qǐng)求,一般會(huì)包含對(duì)數(shù)據(jù)庫的多張表進(jìn)行查詢、插入、刪除、更新等操作,在一些業(yè)務(wù)場(chǎng)景中更新操作較為頻繁。一般情況下更新一條記錄在毫秒級(jí),但是在高并發(fā)下,更新單條記錄時(shí),由于行鎖造成的請(qǐng)求,等待將會(huì)非常嚴(yán)重,甚至?xí)斐蓸I(yè)務(wù)請(qǐng)求超時(shí)。即使選擇持久化緩存方式,在安全性上也達(dá)不到此類數(shù)據(jù)的要求。因此,數(shù)據(jù)的熱點(diǎn)單點(diǎn)問題由于其獨(dú)有的高訪問特性,如何提高并發(fā)性、安全性和準(zhǔn)確性,逐漸引起了各大商業(yè)銀行的廣泛關(guān)注。
熱點(diǎn)數(shù)據(jù)是一類被頻繁訪問的數(shù)據(jù)集合,它是由于技術(shù)處理的需要或業(yè)務(wù)實(shí)現(xiàn)的集中發(fā)生而產(chǎn)生的瓶頸數(shù)據(jù)點(diǎn),因?yàn)榭赡苁悄承﹨?shù)。熱點(diǎn)數(shù)據(jù)是相對(duì)的,是突發(fā)的??傮w來說,在商業(yè)銀行信息系統(tǒng)中,熱點(diǎn)數(shù)據(jù)可以分為三類:
(1)熱點(diǎn)賬戶。賬戶類的數(shù)據(jù)記錄,包括用于清算的內(nèi)部賬戶以及業(yè)務(wù)頻發(fā)的客戶賬戶。
(2)熱表。一類數(shù)據(jù)的集合,是那些總記錄數(shù)不大且相對(duì)固定系統(tǒng)訪問量又非常大的表。
(3)熱點(diǎn)參數(shù)。被頻繁訪問的某個(gè)參數(shù)記錄,是一些重要的數(shù)據(jù),對(duì)業(yè)務(wù)流程起到關(guān)鍵的控制作用。
對(duì)于熱點(diǎn)賬戶,商業(yè)銀行系統(tǒng)采用散列的方法處理。設(shè)定規(guī)則,將一個(gè)賬戶散列成n個(gè)子賬戶。修改賬戶時(shí),專程修改其中的一個(gè)子賬戶,這樣有多少子賬戶,就允許多少進(jìn)程并發(fā)量;查詢主賬戶時(shí),則轉(zhuǎn)換為查詢?nèi)孔淤~戶再做累加處理,再把累加的結(jié)果輸出。處理模型如圖1所示。
圖1 熱點(diǎn)賬戶處理模型示意圖
對(duì)于熱表,商業(yè)銀行系統(tǒng)采用將熱表裝入內(nèi)存的方法處理。主要是將訪問頻繁,且少有變化的數(shù)據(jù),在運(yùn)行過程中動(dòng)態(tài)的加載到共享內(nèi)存中。哪個(gè)表在系統(tǒng)中按熱表處理,是一種約定,并且如果一個(gè)表要變成熱表,需要有一定的編碼工作量。
就訪問方式而言,熱表與普通數(shù)據(jù)表的訪問方式一致,都是通過DBI進(jìn)行訪問,對(duì)應(yīng)用透明。交易處理的過程中,對(duì)于GU等日常讀取操作,DBI訪問時(shí)首先判斷是否為熱表,如果是,首先從HOT TABLE的共享內(nèi)存中訪問,如果讀到,則直接使用共享內(nèi)存中的數(shù)據(jù),而無需訪問數(shù)據(jù)庫;如果訪問共享內(nèi)存結(jié)果為無記錄,再去訪問數(shù)據(jù)庫原表,并把訪問結(jié)果寫入到共享內(nèi)存中。對(duì)于UPDATE、DELETE、INSERT等操作,則實(shí)時(shí)同步更新數(shù)據(jù)庫和共享內(nèi)存中的數(shù)據(jù),以保證共享內(nèi)存中的數(shù)據(jù)與數(shù)據(jù)庫一致,下次交易發(fā)起查詢時(shí),即可從共享內(nèi)存中獲取,無需訪問數(shù)據(jù)庫,減少數(shù)據(jù)庫IO,從而提升處理性能。處理模型如圖2所示。
圖2 熱表處理模型示意圖
對(duì)于熱點(diǎn)參數(shù)沒有特殊的處理,一般情況下,當(dāng)熱點(diǎn)參數(shù)嚴(yán)重影響系統(tǒng)性能時(shí),會(huì)考慮把熱點(diǎn)參數(shù)所在的表視作熱表而按照熱表的方式處理。熱表數(shù)據(jù)一旦復(fù)制到共享內(nèi)存區(qū),讀取數(shù)據(jù)性能大幅度提升。
本文首先介紹了商業(yè)銀行信息系統(tǒng)中主要熱點(diǎn)數(shù)據(jù)的概述,包括熱點(diǎn)賬戶、熱表和熱點(diǎn)參數(shù),然后著重介紹了上述三類熱點(diǎn)數(shù)據(jù)的處理模型在商業(yè)銀行信息系統(tǒng)中的具體應(yīng)用方式。由于采用了將熱點(diǎn)賬戶散列、熱點(diǎn)參數(shù)和熱表裝入共享內(nèi)存的方式,極大地降低了數(shù)據(jù)庫IO及對(duì)同一條熱點(diǎn)數(shù)據(jù)進(jìn)行更改操作的概率,使整個(gè)商業(yè)銀行系統(tǒng)可以靈活地應(yīng)對(duì)高并發(fā)交易場(chǎng)景下數(shù)據(jù)的不準(zhǔn)確、不一致及交易超時(shí)等問題,使系統(tǒng)處理性能得到極大提升。