Allscoin交易所市場:關於火幣網近期幾次非正常價格成交單的技術原因說明

發表於 2022-03-23 13:29 作者: 01區塊鏈

Allscoin交易所市場


親愛的朋友們:

首先請允許火幣君說一聲:“抱歉,讓大家擔心了”。衆所周知,在5月22日火幣網上 线新功能“市價單”後,由於新功能市價單和主動單相撞,火幣網在5月26日至6月2日期間一共出現了5次非正常價格成交單的情況,雖然不影響用戶正常價格 交易,但給大家帶來的困擾,我們深感抱歉。我們認爲有必要將整個過程通過技術的角度給大家詳細說明,以免大家擔心和誤解。

火幣網的撮合引擎是基於mysql數據庫和golang編寫,採用了github.com/go-sql-driver/mysql的訪問驅動,掛 單撤單和撮合都採用最嚴格的表鎖,採用了最保守的串行化事務。這次遇到問題的市價單功能,是在4月中旬左右开始的一個項目,該項目從开發測試到上线前後經 歷了一個月,在上线前兩周多內時間內經過了足夠的測試,在測試期間內沒有發生過一起此類問題bug。

新上线的市價單撮合功能的邏輯也比較簡單,它對於市價單的主要處理過程是在撮合中每遇到一張市價單即鎖住訂單表並以”id

按照該撮合邏輯,主動單在行情深度足夠的情況下是不會有機會碰到市價單的,因爲小於市價單id的主動單已經在之前的普通單撮合中成交全部完成。但根 據實際跟蹤分析後發現在未知原因的極端隨機情況下,上述的查詢結果中包含了明顯應該在限價單撮合中已經完成撮合但是沒有被撮合過的主動單,該主動單沒有經 歷過之前的普通單撮合過程,按照價格優先的撮合原則被優先成交,導致直接撞上了市價單成交由此形成了異常成交記錄,比如萬元單就是市價賣單 id=18829359的訂單與報價萬元的主動买單 id=18829357成交(其中不連續的訂單id18829358是被用戶取消的訂單)。

這個問題在一周時間內分3天總共發生了5次,每次發生後工程師都加強了對於數據庫事務一致性和撮合相關的代碼的檢查更改,但最終沒有完全解決到問題,火幣運營部門於6月2日凌晨00:40左右停止了市價單功能 ,並決定在未完全解決這個問題之前暫時不再开放市價單功能.

隨後,火幣工程師通過歷史數據,對已經在測試中的新版撮合引擎進行了大量的壓力測試,到目前爲止沒有發現存在類似的問題,目前暫時懷疑是go的 mysql驅動本身或使用方面存在問題,但因該項目缺乏詳細的文檔和社區幫助無法進一步確認具體原因,我們已經決定上報該bug到github社區,並放 棄使用go語言繼續升級當前版本的功能。

Allscoin交易所市場 解決方案:

1、火幣網於6月2日凌晨00:40左右停止了“市價單”功能 ,並決定在未完全解決這個問題之前暫時不再开放市價單功能。

Allscoin交易所市場 2、新版撮合引擎完成測試上线後再重新开啓“市價單”功能,同時爲了更加安全和穩定,新版撮合引擎改用可靠消息隊列實現報價隊列和撮合,在提高性能和穩定性的同時避免這類由數據庫撮合帶來的問題。目前新版撮合引擎已經進入測試階段,本月內將與大家見面。

3、新版撮合引擎上线後,我們會把舊版的撮合引擎在github上开源,懂技術的朋友一方面可以探討交流,另外一方面做交易平台的同行們也可以參考(經過實測,此撮合系統雖然不支持市價單,但至少支持每秒500筆的交易處理,可以滿足大部分交易所的性能需求)。

最後感謝大家的理解和支持!

來源:火幣網官方博客

標題:Allscoin交易所市場:關於火幣網近期幾次非正常價格成交單的技術原因說明

地址:https://www.coinsdeep.com/article/977.html

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

你可能還喜歡
熱門資訊