呂遠陽
(山東省農村信用社聯合社,濟南 250000)
隨著信息技術的不斷發展,各類信息系統廣泛應用于人們的日常生活。大多數銀行業務都可以通過移動端隨時隨地辦理,擺脫了時間、地點的限制。信息系統作為銀行的生命線,支撐著銀行業務的發展。如何提高信息系統的安全性和穩定性,保證業務的連續性,提升系統并發性,是銀行IT系統建設時必須考慮的問題。
電商平臺的各類促銷、秒殺活動,節假日各類人情往來、消費采購等,經常會使某一時間段內交易量激增,對數據庫訪問增多,對部分熱點數據的訪問壓力加大。這種情況下,數據庫通常無法支持如此高的瞬時服務器請求,常見的解決方案是讓大部分相同信息的請求都盡可能地壓在緩存(cache)上來緩解數據庫的壓力,從而盡可能地去滿足高并發訪問的訴求。
對銀行信息系統而言,發起的數據庫訪問大多針對資金賬戶等重要資源數量的數據,在數據安全、實時、準確及一致性方面要求非常高。一個業務請求,一般會包含對數據庫的多張表進行查詢、插入、刪除、更新等操作,在一些業務場景中更新操作較為頻繁。一般情況下更新一條記錄在毫秒級,但是在高并發下,更新單條記錄時,由于行鎖造成的請求,等待將會非常嚴重,甚至會造成業務請求超時。即使選擇持久化緩存方式,在安全性上也達不到此類數據的要求。因此,數據的熱點單點問題由于其獨有的高訪問特性,如何提高并發性、安全性和準確性,逐漸引起了各大商業銀行的廣泛關注。
熱點數據是一類被頻繁訪問的數據集合,它是由于技術處理的需要或業務實現的集中發生而產生的瓶頸數據點,因為可能是某些參數。熱點數據是相對的,是突發的??傮w來說,在商業銀行信息系統中,熱點數據可以分為三類:
(1)熱點賬戶。賬戶類的數據記錄,包括用于清算的內部賬戶以及業務頻發的客戶賬戶。
(2)熱表。一類數據的集合,是那些總記錄數不大且相對固定系統訪問量又非常大的表。
(3)熱點參數。被頻繁訪問的某個參數記錄,是一些重要的數據,對業務流程起到關鍵的控制作用。
對于熱點賬戶,商業銀行系統采用散列的方法處理。設定規則,將一個賬戶散列成n個子賬戶。修改賬戶時,專程修改其中的一個子賬戶,這樣有多少子賬戶,就允許多少進程并發量;查詢主賬戶時,則轉換為查詢全部子賬戶再做累加處理,再把累加的結果輸出。處理模型如圖1所示。

圖1 熱點賬戶處理模型示意圖
對于熱表,商業銀行系統采用將熱表裝入內存的方法處理。主要是將訪問頻繁,且少有變化的數據,在運行過程中動態的加載到共享內存中。哪個表在系統中按熱表處理,是一種約定,并且如果一個表要變成熱表,需要有一定的編碼工作量。
就訪問方式而言,熱表與普通數據表的訪問方式一致,都是通過DBI進行訪問,對應用透明。交易處理的過程中,對于GU等日常讀取操作,DBI訪問時首先判斷是否為熱表,如果是,首先從HOT TABLE的共享內存中訪問,如果讀到,則直接使用共享內存中的數據,而無需訪問數據庫;如果訪問共享內存結果為無記錄,再去訪問數據庫原表,并把訪問結果寫入到共享內存中。對于UPDATE、DELETE、INSERT等操作,則實時同步更新數據庫和共享內存中的數據,以保證共享內存中的數據與數據庫一致,下次交易發起查詢時,即可從共享內存中獲取,無需訪問數據庫,減少數據庫IO,從而提升處理性能。處理模型如圖2所示。

圖2 熱表處理模型示意圖
對于熱點參數沒有特殊的處理,一般情況下,當熱點參數嚴重影響系統性能時,會考慮把熱點參數所在的表視作熱表而按照熱表的方式處理。熱表數據一旦復制到共享內存區,讀取數據性能大幅度提升。
本文首先介紹了商業銀行信息系統中主要熱點數據的概述,包括熱點賬戶、熱表和熱點參數,然后著重介紹了上述三類熱點數據的處理模型在商業銀行信息系統中的具體應用方式。由于采用了將熱點賬戶散列、熱點參數和熱表裝入共享內存的方式,極大地降低了數據庫IO及對同一條熱點數據進行更改操作的概率,使整個商業銀行系統可以靈活地應對高并發交易場景下數據的不準確、不一致及交易超時等問題,使系統處理性能得到極大提升。