Golang 系統設計
🎸

Golang 系統設計

Clean Architecture

notion image
軟體世界雖然沒有silver bullet,但我們還是期待有高擴展性、測試性、維護性的系統,我將系統分為repository、usecase、delivery三層,並依照domain interface進行彼此的相依,以滿足大多情境的需求

教學

撮合系統

notion image
將後端exchange domain與開源前端gitbitex-web串接
  • 可達到 100,000PRS。撮合引擎以記憶體計算
  • 可回放事件。以 event sourcing 的方式實現,撮合引擎為讀取 event 的有限狀態機,可 warm backup 多台 server 聽取 event,來達到 high availability
  • 可分散式。不同的domain可部署至不同機器

壓測

notion image
單機啟動 server、mysql、kafka、redis、mongodb,並進行買賣單搓合,並以k6壓測:
  • exchange 機器: EC2 c5.18xlarge
  • k6 機器: EC2 m5.8xlarge
  • RPS (max): 102,988.52
如果將 mysql 或 kafka 等服務獨立出來,理論上可用更便宜的機器

教學