Clean Architecture
軟體世界雖然沒有silver bullet,但我們還是期待有高擴展性、測試性、維護性的系統,我將系統分為repository、usecase、delivery三層,並依照domain interface進行彼此的相依,以滿足大多情境的需求
教學
- 你的 Backend 可以更有彈性一點 - Clean Architecture 概念篇
- 奔放的 Golang,卻隱藏著有紀律的架構! - Clean Architecture 實作篇
- 讓你的 Backend 萬物皆虛,萬事皆可測 - Clean Architecture 測試篇
Matching System
source code:
- 預覽網頁(❗僅用最低效能運行預覽,不是 production 運作規格): https://preview.exchange.messfar.com
- 可達到 100,000PRS。撮合引擎以記憶體計算
- 可回放事件。以 event sourcing 的方式實現,撮合引擎為讀取 event 的有限狀態機,可 warm backup 多台 server 聽取 event,來達到 high availability
- 可分散式。不同的domain可部署至不同機器
壓測
單機啟動 server、mysql、kafka、redis、mongodb,並進行買賣單搓合,並以k6壓測:
- exchange 機器: EC2 c5.18xlarge
- k6 機器: EC2 m5.8xlarge
- RPS (max): 102,988.52
如果將 mysql 或 kafka 等服務獨立出來,理論上可用更便宜的機器