大廠是怎麼做支付系統的流程容錯的?
來源:JavaEdge
1 單據關聯
如某些訂單域內部的多種單據間存在關聯關係一樣,支付設計上也有單據間關聯設計。如所有逆向過程都須持有正向的單據,因此退款須關聯到原來的支付,退款支付單要關聯到原支付單。單據之間關聯只有以下用途:
狀態一致性
正如訂單域中的訂單單據如果成功,則訂單關聯的營銷單、支付單一定成功。支付場景各單據狀態也存在關聯關係,如建立退款支付單的前提是所關聯的原支付單須成功
金額一致性
金額控制是退款核心問題,易產生資損。由於支援多次部分退款,金額須防止超退:總金額不能退超,各維度的資金組成組成不能退超。
實現:每筆退款的金額,都在原單累加記錄到已退金額,記錄已退款的總金額,校驗不可超。
2 冪等
透過唯一鍵實現冪等。如:
訂單側常見的重複支付退款以訂單號關聯 PaymentNo 做重複支付校驗唯一鍵 支付側交易單以外部單號 + 商戶號為唯一鍵,支付單以交易單號 + 操作碼作為唯一鍵
冪等可重入問題:如對一筆整單退請求,上游請求退款 200 元,支付域已處理成功,上游由於超時基於同一筆支付單號進行退款重試,此時應返回成功而非業務校驗異常。
3 重試
最大努力通知,支付領域常見的流程容錯手段,分散式環境的網路抖動、服務暫時不可用都會造成業務流程處理異常。常見解決方案即將請求放入 MQ 非同步重試,重試間隔逐次拉長:
重試成功,則回撥交易 失敗或處理中,則繼續重試。所以介面冪等支援可重入很重要,才能支援重試!
如訂單收到支付成功回撥後,開始處理訂單流程。如果在下單階段僅鎖定庫存、營銷等資源,需要在支付回撥流程真正扣減資源的話,這裡需要對超時等場景進行重試(呼叫下游需要做好冪等),如資源扣減失敗則關單退款。
重試指定次數如業務單據仍未到達終態,則將訂單資訊持久到資料庫中,通知人工進行處理。如使用者卡登出,會員銷戶等問題導致退款退不出去,重試一定次數後支付單隻能置為失敗。等待產運聯絡使用者後,在支付層重新生成退款支付單進行退款。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70027824/viewspace-3003856/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 大廠做系統效能分析的思路到底是怎樣的?
- 程式碼管理流程你們是怎麼做的
- 大廠是怎麼進行SQL調優的?SQL
- 支付對賬系統怎麼設計?
- 我是怎麼做開源的
- 創業公司的開發流程分享:在HitSend是怎麼做開發的創業
- 實用的拜占庭容錯系統
- 反向尋車系統怎麼做?
- 手機工廠測試是什麼?有著怎樣的測試流程?
- 拿到大廠前端offer的前端開發是怎麼回答面試題的前端面試題
- 砸錢在知乎做營銷,遊戲大廠們到底圖的是什麼?遊戲
- 分析CRM系統營銷自動化是什麼意思?怎麼做?
- 伺服器系統探測及識別、容器判斷是怎麼做的?伺服器
- 大廠都是怎麼SQL調優的?SQL
- DevOps升級&AIOps落地,看看這些大廠都是怎麼做的?devAI
- 【大廠面試02期】Redis過期key是怎麼樣清理的?面試Redis
- 嵌入式系統開發的基本流程是什麼
- 製造業ERP系統運作流程是怎樣的
- 什麼是大資料?大資料開發是做什麼的?大資料
- 阿里的秒殺系統是怎麼設計的?阿里
- 網站建設的流程是怎麼樣的?網站
- win10系統c盤擴容後的壞處是什麼 win10c盤擴容怎麼操作Win10
- 千萬級支付對賬系統怎麼玩(上篇)?
- topthink 這樣的小組是怎麼做的
- 淺談支付系統開發基本流程
- 大資料BI系統是怎麼助力企業長久發展的大資料
- 什麼是伺服器的容錯性呢伺服器
- 我曾經是怎麼做面試官的面試
- 對於快取大家是怎麼做的?快取
- 新媒體內容運營怎麼學習?新媒體運營是做什麼的
- 支付風控,系統該如何做?
- 什麼是客戶的痛點?CRM系統如何解決痛點的四大流程
- python怎麼在windows系統中安裝 的內容PythonWindows
- 聚合支付代理是怎麼賺錢的,你知道嗎?
- win10系統怎麼給c盤擴容 c盤分割槽小了怎麼擴大Win10
- 支付系統設計:支付系統的賬戶模型模型
- 海外市場的網賺遊戲是怎麼做的?遊戲
- JVM是怎麼和作業系統互動的?JVM作業系統