上海浦東發(fā)展銀行信息科技部開(kāi)發(fā)中心 林 朋
隨著信用卡業(yè)務(wù)發(fā)展,信用卡業(yè)務(wù)已經(jīng)突破了傳統(tǒng)的服務(wù)邊界,變得無(wú)處不在,各種業(yè)務(wù)混合場(chǎng)景融合,這對(duì)于信用卡核心系統(tǒng)的性能要求越來(lái)越高。
浦發(fā)銀行信用卡核心系統(tǒng)數(shù)據(jù)庫(kù)集中部署在IBM小型機(jī)架構(gòu),在信用卡業(yè)務(wù)發(fā)展初期,基本可以滿足業(yè)務(wù)需求,但是隨著信用卡業(yè)務(wù)發(fā)展,信用卡業(yè)務(wù)越來(lái)越呈現(xiàn)出高并發(fā)、靈活性等特點(diǎn),單實(shí)例,集中存儲(chǔ)數(shù)據(jù)庫(kù)的弊端越發(fā)明顯,性能問(wèn)題日益凸顯。主要瓶頸點(diǎn)如下:
數(shù)據(jù)庫(kù)采用單實(shí)例部署,在交易高峰期時(shí),數(shù)據(jù)讀取和更新對(duì)于存儲(chǔ)壓力非常大,特別是數(shù)據(jù)庫(kù)REDO日志單點(diǎn)的性能壓力成為最大的瓶頸。
EMC存儲(chǔ)雖然可以做到高可用和高穩(wěn)定性,但是由于是集中存儲(chǔ),在系統(tǒng)高峰期時(shí),存儲(chǔ)性能下降嚴(yán)重,平均IO讀寫由1ms,延遲到5ms以上,造成了每筆交易耗時(shí)拉長(zhǎng)到5倍。
為了提升系統(tǒng)處理能力,強(qiáng)化信息安全,構(gòu)建更為靈活的信用卡核心系統(tǒng)。浦發(fā)銀行根據(jù)信用卡核心系統(tǒng)現(xiàn)狀,2019年啟動(dòng)實(shí)施信用卡核心系統(tǒng)性能提升項(xiàng)目,以提高系統(tǒng)性能為目標(biāo),能夠適應(yīng)大規(guī)模業(yè)務(wù)增長(zhǎng),實(shí)現(xiàn)多場(chǎng)景、高壓力的、高聚合的和穩(wěn)定的信用卡核心系統(tǒng)。
信用卡核心系統(tǒng)以華為全閃存產(chǎn)品,替換了EMC存儲(chǔ),將數(shù)據(jù)庫(kù)RAC架構(gòu)部署于全閃存儲(chǔ)環(huán)境,率先采用高端全閃存和NOF+方案等技術(shù),從前端協(xié)議到后端SSD盤全部采用NVMe承載,打破毫秒級(jí)存儲(chǔ)響應(yīng)速度的極限。
每個(gè)物理端口與引擎內(nèi)四控制器直連。引擎內(nèi)4控全對(duì)稱互引擎間通過(guò)共享卡交換互聯(lián)。SSD智能框通過(guò)后端共享卡連接到8個(gè)控制器(2引擎)。
支持Active-Active訪問(wèn),業(yè)務(wù)均衡分布在前端鏈路上。采用DHT算法將LUN按固定大小均勻打散到所有控制器。直接將LUN的固定大小分片發(fā)送給目標(biāo)控制器,降低時(shí)延。主機(jī)請(qǐng)求可在任意控制器寫入Cache緩存,任意控制器智能讀緩存可預(yù)取所有LUN的數(shù)據(jù)和元數(shù)據(jù),提升Cache命中率。數(shù)據(jù)在落盤之前進(jìn)一步被切分為8K,均勻打散到各個(gè)盤片上。RAID2.0技術(shù)確??臻g的均衡性,以及重構(gòu)的快速性。
優(yōu)化數(shù)據(jù)存儲(chǔ)的全流程,創(chuàng)新在“傳-算-智-存-管”的關(guān)鍵路徑上進(jìn)行端到端的加速。同時(shí),打破現(xiàn)有業(yè)務(wù)的壁壘。該存儲(chǔ)架構(gòu)滿足了信用卡系統(tǒng)多個(gè)模塊在業(yè)務(wù)高峰期時(shí)段的高并發(fā)、低時(shí)延、高達(dá)數(shù)十萬(wàn)IOPS峰值的業(yè)務(wù)響應(yīng)訴求,實(shí)現(xiàn)多個(gè)模塊間數(shù)據(jù)資源共享和高效協(xié)作,提升交易能力,存儲(chǔ)性能提升3.5倍以上。
圖1 信用卡核心數(shù)據(jù)庫(kù)設(shè)計(jì)
信用卡核心數(shù)據(jù)庫(kù)采用ORACLE RAC集群架構(gòu),按照兩地三中心部署,上海主中心部署2個(gè)集群,合肥部署2個(gè)集群。4個(gè)集群中默認(rèn)上海其中一個(gè)集群為主庫(kù),其他三個(gè)集群為ADG庫(kù),為了避免ADG庫(kù)影響主庫(kù),4個(gè)集群之間采用最大性能模式,通過(guò)聯(lián)機(jī)日志同步。兩地兩中心4個(gè)集群可以同時(shí)對(duì)外提供服務(wù)。
為了保證RPO為零,即保證在同中心的主庫(kù)和ADG庫(kù)發(fā)生災(zāi)難時(shí),數(shù)據(jù)零丟失,信用卡核心數(shù)據(jù)庫(kù)在上海同城中心搭建了FAR SYNC數(shù)據(jù)庫(kù),在每次數(shù)據(jù)庫(kù)更新時(shí),都需要完成同城雙寫成功后才能提交,更新聯(lián)機(jī)日志,保證了同城雙中心的數(shù)據(jù)一致性。
每個(gè)集群數(shù)據(jù)庫(kù)實(shí)例各自有一套數(shù)據(jù)文件、控制文件和聯(lián)機(jī)日志,部署在全閃存儲(chǔ)上。每個(gè)集群有兩個(gè)數(shù)據(jù)節(jié)點(diǎn),共享一套數(shù)據(jù)文件,數(shù)據(jù)節(jié)點(diǎn)間組成私網(wǎng),每個(gè)節(jié)點(diǎn)通過(guò)25Gb網(wǎng)卡互聯(lián),以減少GC,實(shí)現(xiàn)節(jié)點(diǎn)間內(nèi)存數(shù)據(jù)快速同步。
在使用25Gb網(wǎng)卡的情況下,單臺(tái)配置為72core756GB的X86服務(wù)器(cpu型號(hào)為6154),在RAC環(huán)境下,搭配全閃存儲(chǔ),上海一主一備2個(gè)集群,合肥一主一備2個(gè)集群,總共需要8臺(tái)機(jī)器。
考慮到在性能測(cè)試中碰到的問(wèn)題,信用卡發(fā)卡的數(shù)據(jù)庫(kù)服務(wù)器的網(wǎng)卡對(duì)于tcp的小包的處理能里要求較高,因此業(yè)務(wù)網(wǎng)卡擬配置4個(gè)25Gb網(wǎng)口,另外adg配置2個(gè)25Gb網(wǎng)口,備份配置2個(gè)25Gb網(wǎng)口,心跳配置2個(gè)25Gb網(wǎng)口,考慮網(wǎng)卡的高可用,總共需要6塊雙口25Gb的網(wǎng)口。配置2塊雙口16Gb的卡。本次測(cè)試中數(shù)據(jù)庫(kù)使用的內(nèi)存約為400GB,考慮到生產(chǎn)環(huán)境為應(yīng)對(duì)突發(fā)交易,進(jìn)一步提升性能,需要將一部分表緩存在recycle_cache中,本次投產(chǎn)需要緩存的表的數(shù)據(jù)量共337G。
信用卡核心應(yīng)用采用兩地雙活部署,主中心處理可寫交易,異地中心處理只讀交易。信用卡前置系統(tǒng)配合改造,將非本地的交易通過(guò)前置系統(tǒng)內(nèi)部路由到對(duì)端分中心后轉(zhuǎn)發(fā)給核心系統(tǒng)。
信用卡前置系統(tǒng)對(duì)于每個(gè)服務(wù)提供方會(huì)設(shè)定一個(gè)分中心標(biāo)識(shí),用于標(biāo)識(shí)該提供方是運(yùn)行在上海分中心還是合肥分中心。對(duì)于需要在合肥運(yùn)行的交易設(shè)定單獨(dú)的虛擬提供方(等同于服務(wù)提供方),其分中心標(biāo)識(shí)定義為合肥分中心。當(dāng)一筆交易進(jìn)來(lái)后,會(huì)判斷交易的服務(wù)提供方是否屬于本地分中心,如果屬于則直接路由給本地后端系統(tǒng),如果不屬于,則判斷對(duì)方分中心的前置系統(tǒng)和后端系統(tǒng)是否都正常運(yùn)行,如果存在一個(gè)不正常,則仍路由給本地后端系統(tǒng),如果都正常運(yùn)行,則將交易的數(shù)據(jù)進(jìn)行壓縮并計(jì)算MAC(MAC Key單獨(dú)申請(qǐng)一個(gè)),通過(guò)短鏈的方式傳輸?shù)綄?duì)方分中心,由對(duì)方分中心發(fā)送給后端系統(tǒng),再原路返回。
前置系統(tǒng)對(duì)對(duì)端分中心前置系統(tǒng)和后端系統(tǒng)進(jìn)行固定頻率探測(cè),探測(cè)是否運(yùn)行正常,信用卡核心系統(tǒng)提供一個(gè)探測(cè)交易用于探測(cè)。
信用卡核心系統(tǒng)數(shù)據(jù)庫(kù)由小機(jī)切換到X86后,X86機(jī)器穩(wěn)定性較小機(jī)要低,需要考慮X86機(jī)器突然宕機(jī),導(dǎo)致數(shù)據(jù)庫(kù)由主庫(kù)切換到同中心ADG或切換到異地ADG,信用卡核心系統(tǒng)應(yīng)用需要同步進(jìn)行切換數(shù)據(jù)庫(kù)。根據(jù)業(yè)務(wù)需求,信用卡核心數(shù)據(jù)庫(kù)和應(yīng)用在發(fā)生故障時(shí),需要自動(dòng)完成切換。
(1)在發(fā)卡數(shù)據(jù)庫(kù)中建立數(shù)據(jù)庫(kù)路由表,每臺(tái)應(yīng)用主機(jī)一條記錄,登記可寫庫(kù)和只讀庫(kù)。
(2)發(fā)卡每筆交易的sql較多,與數(shù)據(jù)庫(kù)多次交互,考慮到網(wǎng)絡(luò)延時(shí),本地應(yīng)用只連本地的數(shù)據(jù)庫(kù),即上海應(yīng)用只連上海數(shù)據(jù)庫(kù),合肥應(yīng)用只連接合肥數(shù)據(jù)庫(kù)。
(3)在每臺(tái)應(yīng)用服務(wù)器部署輪詢腳本,檢查讀寫庫(kù)和只讀庫(kù)是否正常。上海的應(yīng)用服務(wù)器檢查MDB和ADG,根據(jù)可讀寫屬性,與數(shù)據(jù)庫(kù)路由配置表比較,如果與當(dāng)前配置不同,則更新路由配置表,更改應(yīng)用配置后,將對(duì)應(yīng)的服務(wù)重啟。合肥的應(yīng)用服務(wù)器檢查HADG1和HADG2,根據(jù)讀寫屬性,與數(shù)據(jù)庫(kù)路由配置表比較,如果與當(dāng)前配置不同,則更新路由配置表,更改應(yīng)用配置后,將對(duì)應(yīng)的服務(wù)重啟。
(4)發(fā)卡系統(tǒng)準(zhǔn)備兩個(gè)探測(cè)交易供信用卡前置調(diào)用,一個(gè)為上海探測(cè)交易,一個(gè)為合肥探測(cè)交易,每個(gè)交易返回可寫和可讀的標(biāo)志。信用卡前置根據(jù)交易可讀寫標(biāo)志,切換交易。例如:如果上海的探測(cè)交易返回不可寫,而合肥返回可寫,則前置需要將交易都切換到合肥分中心,其他情況類似。
信用卡核心系統(tǒng)數(shù)據(jù)庫(kù)由IBM小機(jī)環(huán)境遷往X86環(huán)境,由于遷移前后為異構(gòu)環(huán)境,不能采用原地升級(jí)方式,同時(shí)需要遷移的數(shù)據(jù)量為15T,停機(jī)的遷移窗口只有3h,所以不能采用傳統(tǒng)的導(dǎo)入和導(dǎo)出方式。本次升級(jí)通過(guò)讀取歸檔日志,增量方式將源數(shù)據(jù)日志,以邏輯方式應(yīng)用到目標(biāo)數(shù)據(jù)庫(kù)中。
根據(jù)遷移方案,需要搭建與源環(huán)境一致的IBM小機(jī)環(huán)境中間環(huán)境數(shù)據(jù)庫(kù),源環(huán)境與中間環(huán)境為同構(gòu)的數(shù)據(jù)庫(kù)。目標(biāo)數(shù)據(jù)庫(kù)為X86環(huán)境,與源環(huán)境為異構(gòu)數(shù)據(jù)庫(kù),使用邏輯方式OGG進(jìn)行同步。
(1)通過(guò)DG進(jìn)行主備同步,備機(jī)通過(guò)備份恢復(fù)初始化,主備通過(guò)網(wǎng)絡(luò)同步應(yīng)用日志。
(2)初始化19數(shù)據(jù)庫(kù)期間,中間庫(kù)接收日志,停止日志應(yīng)用。
(3)通過(guò)DB LINK,將中間環(huán)境數(shù)據(jù)初始化到目標(biāo)19C環(huán)境。
(4)啟用源環(huán)境與中間環(huán)境的ADG的應(yīng)用日志同步。
(5)通過(guò)OGG,將中間庫(kù)同步到最終的目標(biāo)數(shù)據(jù)庫(kù)中。
整個(gè)信用卡核心數(shù)據(jù)庫(kù)遷移期間,最后切換,數(shù)據(jù)比對(duì)在2h內(nèi)完成,基本做到數(shù)據(jù)庫(kù)和應(yīng)用的平滑切換。
信用卡核心系統(tǒng)通過(guò)全閃存儲(chǔ)部署,兩地兩中心部署,上海與合肥同時(shí)提供服務(wù),交易處理能力大幅提高,提升到7倍以上,達(dá)到28000TPS。批量處理時(shí)間由5h縮短到2h之內(nèi)。
浦發(fā)銀行信用卡核心自2020年10月投產(chǎn)后,日均交易1.5億筆,順利通過(guò)“雙十一”的業(yè)務(wù)峰值考驗(yàn),數(shù)據(jù)庫(kù)和應(yīng)用性能表現(xiàn)平穩(wěn)。