GaiaEx AcademyGaiaEx Academy
交易系統的軟體工程設計模式
開發者程式設計12 min read

交易系統的軟體工程設計模式

交易所所用的事件溯源、CQRS 與架構模式

分享文章

為什麼模式在交易系統中如此重要

金融軟體出錯的代價很高:重複下單、餘額不一致、悄無聲息的部分失敗。設計模式不是用來擺設的獎盃——它們是針對反覆出現的失敗模式的應對方案:用事件溯源實現可審計性,用 CQRS 讓讀取與寫入分別獨立擴充套件,用熔斷器阻止連鎖宕機,用冪等性確保重試不會造成重複交易。

CQRS + event log (conceptual) 寫入側 命令 校驗 追加事件 事件日誌 不可變 有序 讀取側 投影 快取 / SQL API 查詢 讀取方可以稍有延遲;寫入方在日誌中始終是事實來源。
命令產生事實;消費者據此構建物化檢視以實現快速查詢。

Pub/Sub 與松耦合

撮合引擎、風險檢查和行情釋出器之間不應在一團亂麻裡互相直接呼叫。一條釋出/訂閱匯流排讓撮合引擎只管發出成交,下游服務可以訂閱,而無需瞭解上游的實現細節——但你仍然必須選擇投遞保證(至少一次 vs 恰好一次)以及供重放使用的保留策略。

熔斷器與隔板

熔斷器在反覆失敗後停止呼叫一個生病的依賴,給它恢復的時間,同時保護你的執行緒池。隔板隔離資源池,使一個失控的分析任務無法把下單提交餓死。

Circuit breaker states CLOSED 放行呼叫 失敗 OPEN 快速失敗 超時 HALF 試探呼叫 半開狀態透過試探來決定是重新關閉還是再次開啟。
在失敗爆發時跳閘;冷卻;在放行全部流量前先用一次呼叫來測試。

狀態機與冪等性

訂單和轉帳有合法的生命週期。把允許的狀態轉移編碼進有限狀態機,讓非法跳轉無法發生。再為客戶端請求配上冪等鍵,這樣網路重試就不會建立出重複的有效訂單。

撮合引擎:價格-時間優先

中心化交易場所按價格-時間優先,把新進訂單與掛在簿上的流動性撮合。鏈上撮合器(如許多 Layer 1(一層 / 主鏈)DEX 的設計)必須是確定性的:每個驗證者重新執行同一序列,併到達完全相同的狀態——GaiaEx 從 Hyperliquid 的規則中繼承了這一模型。

務實地採用

不要在第一天就盲目照搬每一個模式。先從清晰的邊界、結構化日誌,以及圍繞資金流動的測試做起。當對帳的痛苦出現時再加上事件日誌;當外部 API 不穩定時再加上熔斷器。模式解決的是真實的擦傷,而不是想象出來的傷。