前后对接数字几_开源数字货币交易所开发学习笔记(1)——系统架构
前言
部門領導讓我研究數字貨幣交易所的開發(fā)技術,今天好不容易把碼云(Gitee)上開源數字貨幣交易所CoinExchange的代碼編譯成功并搭建出來了,在排查問題的過程中,不斷的查看代碼以及使用到的技術,因此對系統的整個架構有了一定的初步認識,這里做個筆記記錄一下。
系統整體架構
這是開源項目CoinExchange上作者放的一張邏輯架構圖,猛一看其實沒什么感覺,但是當我通過代碼層級的閱讀,以及各種軟件的安裝,對這個圖的認識更加深刻了。
數據存儲
首先,我們從數據存儲這一塊看,該項目使用了三種數據存儲方式,另外還有一個數據存儲是內存,在撮合交易引擎中,直接通過Java的并發(fā)鏈表存儲的。
MySQL主要存儲業(yè)務數據,一共有65張表。
MongoDB主要存儲委托成交明細和K線數據(成交量、成交價),如下所示是K線數據,按照一定的時間周期統計所得。
消息通訊
因為項目是基于SpringCloud微服務架構開發(fā),所以這套交易系統有很多的服務,這些服務之間的通信本可以通過Euruka服務注冊中心調用相應的服務,但是這套系統使用了Kafka,Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統,它可以處理消費者在網站中的所有動作流數據。大概是因為交易系統中對委托的處理需要非常迅速的處理能力和穩(wěn)定性,所以這個項目使用了Kafka。
通過代碼層面,可以看到,用戶通過Exchange-api服務下單以后,它會將委托訂單保存到數據庫,同時會把委托訂單發(fā)送到Kafka,通過Kafka傳送給消費者Exchange(撮合引擎),當Exchange(撮合引擎)完成撮合以后,它會將委托成交明細發(fā)送給Kafka,接著由消費者Market(行情引擎)完成數據的存儲(持久化)。
這樣的設計可以讓Exchange(撮合引擎)只需要專心處理撮合就可以,也能夠充分發(fā)揮它的性能。
前后端分離
整套系統的前端與后端完全分離開,這是比較主流的開發(fā)方式,可以讓后端開發(fā)人員與前端開發(fā)人員各自專注于自己的業(yè)務實現。目前可以看到前端主要有四個:用戶PC端、用戶Android端、用戶IOS端、管理員PC端。它們都是通過Api與服務對接,傳輸數據是通過Json。
作為飽受上面代碼的受害者,前后端分離的設計可以說是解放了我們這些程序員。
區(qū)塊鏈錢包接口
項目中對每個幣種的RPC接口做了一層抽象,作為抽象層的wallet項目,屏蔽了不同幣種的對接問題,區(qū)塊鏈錢包節(jié)點的RPC調用方式千奇百怪,項目中通過wallet把生成地址、掃塊、充值監(jiān)控、余額歸集等操作抽象出來,當我們想接入新的幣種的時候,只需要對Wallet-RPC-XXX項目進行復制粘貼就可以了。
前端技術實現
前端作者也用了比較流行的vue框架,對前端項目實現了很好的MVC解耦,開發(fā)人員不用頻繁的操作html元素,只需要專注于對數據的處理就可以了,讓前端的開發(fā)可以變得很優(yōu)雅。比如下面,我截取了一段代碼:
交易機器人
從作者的架構圖可以看出來,交易機器人通過同步獲取到了各大交易所的交易數據,進而在自身交易所種繪制相應的K線,在我跟作者的溝通過程中,我了解到了機器人的大概設計原理,尤其是其中有很多參數的設計,非常關鍵,可以讓盤面表現出跟大型交易所一樣的行情展示效果。
總結
通過這幾天的編譯、調試,對整個交易所系統架構有了一定的理解,但是理解的肯定還不夠深刻,后面繼續(xù)學習&分享。
總結
以上是生活随笔為你收集整理的前后对接数字几_开源数字货币交易所开发学习笔记(1)——系统架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀荣耀摘星手怎么获得
- 下一篇: 晶体植入手术多少钱啊?