題目1 公司的手續(xù)費賬戶如何保證并發(fā)
一, 現場回答
每個商戶設置一個手續(xù)費賬戶的子賬戶, 這樣, 在并發(fā)的時候, 不同的商戶是可以并發(fā)的. 所有商戶的手續(xù)費進行sum, 就是總賬戶.
二. 思考后回答
手續(xù)費業(yè)務作為非核心業(yè)務, 沒有其他業(yè)務風險. 可以進行批量合并后進行更新.
具體做法是這樣的, 所有的手續(xù)費入賬都會形成流水,可以每隔1秒(如果認為延遲大, 可以設置小一些), 將前一秒的數據匯總到一個新的匯總流水表, 表中有上一次賬戶的數值和本次更新后的數值. 然后連帶更新賬戶數值, 達到最終的賬戶變更.
注意事項:
- 每次計算都是基于上一時間單位(默認一秒)的結果,
- 會有定時對系統(tǒng)匯總表進行監(jiān)控, 如果最近更新時間與當前時間時間差超過閾值, 進行報警
- 如果應用掛了, 那么要從上一次匯總后的數據開始再次開始進行匯總
題目2, 有一個資金池的賬戶, 對手續(xù)費賬戶進行補貼, 如何保證并發(fā)
一. 現場回答
設置一個zset , 將資金池的手續(xù)費賬戶分為多份, 分數是該子賬戶的余額, 用不同的子賬戶作為單獨的交易對象, 進行手續(xù)費支付, 這樣可以將并發(fā)擴大n倍. 如果出現無法支付, 則選擇兩個最小的賬戶進行合并,進行重試.
二, 思考后回答
資金池賬戶和手續(xù)費賬戶有很大的相似點, 在滿足一定條件時, 他們的操作可以是一樣的.
進行如下設置:
(弱)實時統(tǒng)計該資金池的的交易情況, 分別得出 平均7天的補貼額度, 一天的補貼額度, 還有1小時的補貼額度
當余額大于7天補貼額度, 采用快速流水方式, 就是業(yè)務過來直接生成流水日志, 沒秒鐘對流水日志進行匯總, 并更新賬戶.
當余額小于7天, 會對賬戶所有者進行通知, 進行續(xù)費
當余額在1-7天的范圍內, 進行快限速流水方式, 如果歷史記錄沒有問題, 實時記錄和快速流水方式相同. 但如果應用出現過問題, 導致當前處理數據與當前時間存在時間差, 那么實時的就會進入限流方式. 直至時間差小于閾值, 進入快速方式
當余額小于1天的補貼金額, 進行通知續(xù)費
當余額在1小時至一天的范疇的時候, 進行快阻式流水方式, 如果記錄沒有問題, 采用快速流水方式. 但如果應用出現過問題, 導致當前處理數據與當前時間時間差超過閾值, 那么實時會進行阻塞, 暫停該賬戶交易, 直至時間差小于閾值, 進入快速方式
當余額小于1小時的補貼范圍, 進入慢速模式, 所有的該賬戶的業(yè)務要使用隊列, 保證順序. 慢速模式下, 每一筆補貼都要從賬戶扣除后, 才形成流水, 每秒的流水也只有匯總功能, 不進行更新賬戶.
-
圖標如下
賬戶 快速模式 快限模式 快阻模式 慢速模式 余額范圍 >7天 1-7天 1小時-1天 小于一小時 無歷史數據滯留 批量處理 批量處理 批量處理 隊列串行 有歷史數據滯留_實時部分 批量處理 限流 阻塞交易, 直至更新完成 /