1.并發(fā)度控制
同一時刻,對同一賬戶修改的請求數(shù)越多,這個賬戶的所等待問題就越嚴(yán)重,所謂并發(fā)度控制就是要控制同一時刻對熱點賬戶請求的數(shù)量,可以通過控制上游支付系統(tǒng)并發(fā)請求數(shù)據(jù)或者賬務(wù)系統(tǒng)處理的并發(fā)請求數(shù)來實現(xiàn)。
這一方案的缺點是對業(yè)務(wù)是有損的,當(dāng)熱點賬戶出現(xiàn)的時候,支付或者賬務(wù)處理失敗率會增加,用戶的體驗會變差,較大的銀行或者第三方支付公司用地比較少。
2.匯總明細(xì)記賬
實時的交易全部是insert賬務(wù)明細(xì)(insert的開銷很小,能夠支持高并發(fā)。如果基于分布式部署,insert的并發(fā)容量理論上可以無限大),然后定時(比如每半個小時)將之前半個小時內(nèi)的賬務(wù)明細(xì)sum出一個結(jié)算總金額,一筆入賬結(jié)算到指定賬戶。
這個方案的缺點就是:交易不能實時入賬,其實如果控制好定時匯總?cè)胭~的頻度,比如分鐘級,用戶也是可以接受的。這種方式對收單類業(yè)務(wù)(賬戶加錢)非常實用,但是對支出類業(yè)務(wù)(賬戶減錢)類來說,有賬戶透支地風(fēng)險。
3.緩沖入賬
將實時同步的記賬請求進(jìn)行異步化,以達(dá)到記賬實時性和系統(tǒng)穩(wěn)定性之間平衡的記賬手段,這就是”削峰填谷“。
詳細(xì)地講,假如賬務(wù)系統(tǒng)對同一個賬戶的處理閾值為100筆/s,24小時不間斷服務(wù)(一天能處理86400000筆)。當(dāng)業(yè)務(wù)高峰期來臨的時候,熱點賬務(wù)的請求數(shù)會達(dá)到200筆/s。當(dāng)賬戶的交易低于100筆/秒的時候,賬務(wù)系統(tǒng)幾乎還是實時地處理了記賬請求,而當(dāng)交易大于100筆/秒的時候,賬務(wù)系統(tǒng)先返回結(jié)果,把賬務(wù)處理丟到可靠的處理隊列中,等并發(fā)量不大的時候慢慢消化,對用戶來說感受到的體驗還是很快就記賬成功了。
這個方案是有個前提是:熱點賬戶在某幾個高峰時間點需要緩沖記賬來削峰填谷,并且能在日間填完。一旦賬戶的日間交易量暴增,導(dǎo)致日間隊列根本來不及消化,整個隊列越來越長,那就不存在谷可以填,這時候肯定會帶來用戶大量的投訴。另外這種方案對支出類業(yè)務(wù)(賬戶減錢)來講,也會有賬戶透支地風(fēng)險。
4.熱點賬戶鎖分散
具體來講就是創(chuàng)建與熱點賬戶對應(yīng)的多個影子賬戶,所述影子賬戶與所述賬戶的數(shù)據(jù)結(jié)構(gòu)相同,將所述影子賬戶設(shè)置為隱藏,并將所述賬戶的余額分散至各個影子賬戶。當(dāng)賬務(wù)系統(tǒng)接收到賬務(wù)請求的時候,通過前置進(jìn)行hash分配(具體的hash函數(shù)會有更多方案)選擇影子賬戶進(jìn)行記賬,這樣就將原來對一個賬戶的請求分散到多個影子賬戶中,分散了賬務(wù)熱點。
這個方案也有缺點:通過算法選擇的影子賬戶扣款,影子賬戶的余額可能是不足的,但賬戶的總余額是夠的,這樣可能影響賬務(wù)處理的成功率。
5.提高服務(wù)鎖并發(fā)能力
提高單臺數(shù)據(jù)庫服務(wù)器處理能力(I/O,CPU,memory)或者選取內(nèi)存數(shù)據(jù)庫實時地處理記賬請求,然后異步地存儲到可靠數(shù)據(jù)庫上。