互聯(lián)網(wǎng)金融系統(tǒng)的核心是支付結(jié)算,而支付結(jié)算的基礎(chǔ)又是賬戶(hù)系統(tǒng)。金融賬戶(hù)系統(tǒng)的特點(diǎn)是并發(fā)量大、響應(yīng)快、交易金額大,熱點(diǎn)賬戶(hù)問(wèn)題突出。一個(gè)合格的賬戶(hù)系統(tǒng)既要解決上述問(wèn)題,又必須絕對(duì)保證資金安全。作為宜信這家互聯(lián)網(wǎng)金融公司的支付結(jié)算中心,其賬戶(hù)系統(tǒng)也必須具備上述特征。
創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、網(wǎng)站重做改版、津南網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為津南等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。宜信支付結(jié)算賬戶(hù)體系是客戶(hù)、用戶(hù)、賬戶(hù)三層結(jié)構(gòu),證件號(hào)和證件類(lèi)型唯一確定一個(gè)客戶(hù),客戶(hù)號(hào)和機(jī)構(gòu)號(hào)確定一個(gè)用戶(hù),一個(gè)用戶(hù)下可開(kāi)多個(gè)不同類(lèi)型的賬戶(hù)。如圖:
賬戶(hù)系統(tǒng)的基礎(chǔ)是賬戶(hù),所有的操作都圍繞著賬戶(hù)進(jìn)行,賬戶(hù)包含以下一些屬性:
賬戶(hù)下掛在最底層的會(huì)計(jì)科目下,會(huì)計(jì)科目決定了賬戶(hù)的含義及余額變動(dòng)方向。會(huì)計(jì)科目的一些屬性如下:
宜信支付結(jié)算賬戶(hù)系統(tǒng)采用科目樹(shù)的概念,每個(gè)機(jī)構(gòu)都會(huì)綁定一個(gè)科目樹(shù)??颇繕?shù)的根節(jié)點(diǎn)是一級(jí)科目,底層的科目下掛賬戶(hù),結(jié)構(gòu)如下:
宜信支付結(jié)算賬戶(hù)系統(tǒng)采用公司自研的分布式微服務(wù)框架,對(duì)外提供http json接口,內(nèi)部各服務(wù)間采用redis實(shí)現(xiàn)的消息隊(duì)列通訊。
宜信支付結(jié)算賬戶(hù)系統(tǒng)分為接入模塊、記賬子系統(tǒng)、開(kāi)戶(hù)子系統(tǒng)、異步記賬模塊、查詢(xún)子系統(tǒng)、定時(shí)任務(wù)子系統(tǒng)、日終子系統(tǒng)、異步日志模塊,下圖是賬務(wù)系統(tǒng)功能模塊圖:
記賬處理是賬戶(hù)系統(tǒng)的核心功能,該功能對(duì)性能的要求比較高,高并發(fā)下熱點(diǎn)賬戶(hù)問(wèn)題比較突出,資金的正確性也必須保證,并且根據(jù)業(yè)務(wù)不同,記賬的分錄也是五花八門(mén),宜信支付結(jié)算賬戶(hù)系統(tǒng)如何應(yīng)對(duì)這些問(wèn)題,這里重點(diǎn)介紹下:
熱點(diǎn)賬戶(hù)問(wèn)題是賬戶(hù)系統(tǒng)的痛點(diǎn),也困擾了我們很久,這里著重說(shuō)下。
-- 充值時(shí)的記賬分錄是:
借方:三方支付待清算賬戶(hù)(+)
貸方:個(gè)人余額賬戶(hù)(+)
當(dāng)大量用戶(hù)充值時(shí),三方支付的待清算賬戶(hù)就是熱點(diǎn)賬戶(hù),頻繁的增加余額。
-- 提現(xiàn)時(shí)的記賬分錄是:
借方:個(gè)人余額賬戶(hù)(-)
貸方:三方支付資產(chǎn)賬戶(hù)(-)
當(dāng)大量用戶(hù)提現(xiàn)時(shí),三方支付的資產(chǎn)賬戶(hù)就是熱點(diǎn)賬戶(hù),頻繁的減少余額。
--業(yè)務(wù)收服務(wù)費(fèi)的記賬分錄是:
借方:個(gè)人賬戶(hù)(-)
貸方:商戶(hù)服務(wù)費(fèi)賬戶(hù)(+)
當(dāng)大量向用戶(hù)收取服務(wù)費(fèi)時(shí),商戶(hù)服務(wù)費(fèi)賬戶(hù)就是熱點(diǎn)賬戶(hù),會(huì)頻繁增加余額。
--業(yè)務(wù)服務(wù)費(fèi)付款的記賬分錄是:
借方:商戶(hù)服務(wù)費(fèi)賬戶(hù)(-)
貸方:個(gè)人賬戶(hù)(+)
當(dāng)大量用服務(wù)費(fèi)余額向用戶(hù)付款時(shí),商戶(hù)服務(wù)費(fèi)賬戶(hù)就是熱點(diǎn)賬戶(hù),會(huì)頻繁減少余額。
記賬時(shí),所有涉及的賬戶(hù)余額都要做update更新,高并發(fā)情況下,當(dāng)出現(xiàn)上述類(lèi)型的熱點(diǎn)賬戶(hù)時(shí),由于數(shù)據(jù)庫(kù)的行級(jí)鎖,對(duì)同一賬戶(hù)的更新余額操作由并行變成串行,單個(gè)請(qǐng)求的響應(yīng)時(shí)間變長(zhǎng),從而拖垮整個(gè)記賬服務(wù)。
宜信支付結(jié)算賬戶(hù)系統(tǒng)針對(duì)上述問(wèn)題做了如下處理:
我們把熱點(diǎn)賬戶(hù)按照金額變動(dòng)方向分為加頻賬戶(hù)(余額增加頻繁)、減頻賬戶(hù)(余額扣減頻繁)、雙頻賬戶(hù)(余額增加扣減均頻繁)。
準(zhǔn)實(shí)時(shí)更新余額。先將金額變動(dòng)插入臨時(shí)表中,由定時(shí)任務(wù)按照一定頻率匯總發(fā)生額,并更新賬戶(hù)余額,而后刪除臨時(shí)記錄。當(dāng)加頻賬戶(hù)減錢(qián)余額不足時(shí),主動(dòng)去匯總發(fā)生額。這里需要考慮主動(dòng)匯總發(fā)生額和定時(shí)任務(wù)處理的并發(fā)情況,我們?cè)谠摱〞r(shí)任務(wù)執(zhí)行時(shí)設(shè)置redis鎖,防止并發(fā),主動(dòng)匯總時(shí)會(huì)去判斷這個(gè)redis鎖是否存在,如存在證明定時(shí)任務(wù)正在執(zhí)行,無(wú)需主動(dòng)匯總,可能是真的余額不足。主動(dòng)匯總同樣會(huì)設(shè)置redis鎖,定時(shí)任務(wù)同樣會(huì)判斷。
將減頻賬戶(hù)拆分多個(gè)子賬戶(hù),減頻子賬戶(hù)設(shè)置金額報(bào)警,如果某個(gè)減頻子賬戶(hù)余額不足觸發(fā)報(bào)警,會(huì)對(duì)該子賬戶(hù)做資金歸集,將其他子賬戶(hù)余額歸集到該子賬戶(hù)(每個(gè)子賬戶(hù)設(shè)置可歸集金額限制)。如在交易過(guò)程中發(fā)現(xiàn)該子賬戶(hù)余額不足,轉(zhuǎn)向使用其他子賬戶(hù)記賬。由于拆分子賬戶(hù),余額查詢(xún)時(shí)需要匯總各個(gè)子賬戶(hù)余額返回;記錄主賬戶(hù)流水需要記賬后余額,這里需要異步計(jì)算匯總。當(dāng)減頻賬戶(hù)加錢(qián)時(shí),需要平均分配入賬到不通的子賬戶(hù)。
將雙頻賬戶(hù)拆分多個(gè)子賬戶(hù)。加錢(qián)時(shí),準(zhǔn)實(shí)時(shí)更新余額,先將子賬戶(hù)金額變動(dòng)插入臨時(shí)表中,由定時(shí)任務(wù)按一定頻率匯總發(fā)生額,將匯總的發(fā)生額更新進(jìn)對(duì)應(yīng)的子賬戶(hù),并刪除金額變動(dòng)記錄;減錢(qián)按照之前減頻賬戶(hù)的邏輯執(zhí)行。
高并發(fā)情況下,當(dāng)多個(gè)賬戶(hù)之前互相轉(zhuǎn)賬時(shí),可能會(huì)出現(xiàn)死鎖問(wèn)題。
例如:A余額賬戶(hù) —> B余額賬戶(hù)(線程1) 和 B余額賬戶(hù)—>A余額賬戶(hù)(線程2) 兩個(gè)轉(zhuǎn)賬請(qǐng)求并發(fā),賬戶(hù)系統(tǒng)對(duì)每個(gè)轉(zhuǎn)賬請(qǐng)求都會(huì)更新A、B余額,這兩個(gè)更新需要在一個(gè)事務(wù)里,正常流程線程1先更新A,再更新B,線程2先更新B,再更新A,線程1更新完A后會(huì)等待B的鎖,不提交事務(wù),線程2更新完B后會(huì)等待A的鎖,不提交事務(wù),這樣兩個(gè)線程互相等待鎖,造成死鎖。
宜信支付結(jié)算賬戶(hù)系統(tǒng)針對(duì)這種情況提出了解決辦法,對(duì)賬戶(hù)號(hào)進(jìn)行排序后再更新余額,這樣每個(gè)線程都是先更新A再更新B,解決了死鎖問(wèn)題。
宜信支付結(jié)算賬戶(hù)系統(tǒng)數(shù)據(jù)庫(kù)采用Mysql,緩存采用redis。
Mysql數(shù)據(jù)庫(kù)采用主從架構(gòu),一主二從,主庫(kù)向從庫(kù)同步數(shù)據(jù)。針對(duì)一些數(shù)據(jù)量大的表進(jìn)行分表,比較有代表性的是賬戶(hù)流水表,既要按賬戶(hù)維度查詢(xún),又要按時(shí)間維度匯總,所以針對(duì)這個(gè)特點(diǎn),冗余了一張表,一張按照賬戶(hù)分表,一張按照日期分表。
賬戶(hù)系統(tǒng)各個(gè)服務(wù)部署在同一機(jī)房,其中記賬子系統(tǒng)和異步記賬模塊部署在4個(gè)不同的物理機(jī)上,其他子系統(tǒng)和模塊部署在2個(gè)不同物理機(jī)上。最前端采用nginx實(shí)現(xiàn)負(fù)載均衡。
作者:李銳 程留允
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
分享文章:支付結(jié)算系統(tǒng)如何應(yīng)對(duì)高并發(fā)、熱點(diǎn)賬戶(hù)等問(wèn)題-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/article10/ccedgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、域名注冊(cè)、移動(dòng)網(wǎng)站建設(shè)、虛擬主機(jī)、全網(wǎng)營(yíng)銷(xiāo)推廣、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)