Clean Architecture
軟體世界雖然沒有silver bullet,但我們還是期待有高擴展性、測試性、維護性的系統,我將系統分為repository、usecase、delivery三層,並依照domain interface進行彼此的相依,以滿足大多情境的需求
教學
撮合系統
將後端exchange domain與開源前端gitbitex-web串接
- 預覽網頁(❗僅用最低效能運行預覽,不是 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 等服務獨立出來,理論上可用更便宜的機器