火幣CTO巨建華訪談:數字貨幣交易平臺的基礎架構和技術挑戰
在最近舉辦的「比特幣產業峯會暨火幣網一週年慶」活動期間,InfoQ就數字貨幣交易平臺的基礎架構和技術挑戰採訪了火幣CTO巨建華,他分享了本身在行業領域的寶貴經驗和精彩觀點。前端
InfoQ:首先請作一下自我介紹。算法
相關廠商內容sql
微信數百億條消息收發背後的Yard平臺設計
網易嚴選售後核心模型的抽象及架構迭代
Go語言團隊主管透露下一代Go/Go2關鍵改變
華爲:開源產品雲化最大的坑以及思路分析
區塊鏈浪潮來襲,企業技術leader如何理性抉擇?
相關贊助商數據庫
巨建華:我前後畢業於電子科技大學和中國人民大學,曾就任於海虹控股、中國搜索、大麥網和YOKA時尚網等知名IT企業,多年以來一直從事互聯網電子商務、搜索和門戶網站相關技術研發工做。後端
在工做期間成功構建了目前國內最大票務網站大麥網的全國聯網票務系統,部署在數千個場館節點,支撐了全國70%以上的演出和體育賽事的售票;5年互聯網金融軟件領域創業經歷,主持開發了多款基於上證所Level-2高速行情數據的軟件產品;2013年進軍醫療行業應用開發,推出基於知識庫的艾默康智能處方評估系統被應用於100多家大型醫院得到了較高的行業知名度;2014年加入火幣網後,對火幣網的比特幣交易系統進行了徹底的重構,使之具有了更加高速,穩定和開放的能力。緩存
InfoQ:相比傳統金融交易平臺,火幣網比特幣交易系統(如下簡稱火幣網)的不一樣點在哪裏?安全
巨建華:因爲市場性質的不一樣,致使火幣網和傳統的金融交易平臺在業務營運方式較大差別,比特幣是一種全球性的數字資產,它的價格行情會受到全球市場的影響,啓動了金融槓桿交易後這種價格波動的影響被放大了多倍,這致使了交易系統必知足整年24x7任什麼時候刻不間斷的交易服務,系統服務的中斷意味着行情將受到劇烈的波動加大交易的風險,所以咱們在系統設計上須要儘量的避免停機維護,從硬件到軟件都作到了完整的冗餘和高可用,每個系統都充分圍繞着高可用和容錯來設計和實現,咱們作到了全部系統模塊的高可用和核心交易系統的快速故障轉移。服務器
相對於傳統金融交易平臺,火幣作數字加密貨幣金融業務的同時也是一家互聯網公司,衆所周知互聯網產品的創新迭代是很是快速的,在快速迭代的產品開發過程咱們推出了大量不一樣的創新金融業務,這也致使了很是複雜的資產結算邏輯,在高峯期時天天的交易額達到了10個億人民幣的規模下,咱們不能像傳統證券交易所那樣當天賣出證券資產後次日才能提現,由於比特幣領域太新,在沒有法律承認的第三方資金監管的狀況下,用戶但願本身的資產隨時掌握在本身手裏才踏實,這帶來了用戶對法幣和虛擬貨幣充值提現的實時結算需求,使咱們結算和風控系統的設計也變得很是複雜,實現結算提現加比特幣資產的不可追回特性,致使出現任何問題很是致命的,所以咱們比傳統金融平臺來講在技術上存在更大的挑戰。微信
InfoQ:火幣網的技術難點有哪些? 如何解決的?網絡
巨建華:火幣網的技術難點主要在於對比特幣的撮合交易引擎和比特幣數字資產的管理這兩方面。
和傳統證券交易所同時進行數千個商品的撮合交易不一樣,在火幣網目前只有比特幣和萊特幣這兩種主流數字貨幣在交易,這意味着天天10個億的交易額到將來交易額不斷增加的時候,全部用戶都是對這兩種商品在報價交易,因爲撮合交易的規則要求徹底遵循時間優先和價格優先的原則進行撮合成交,這致使咱們在單個品種天天的交易額在很大程度上超過了大部分如今流通的股票證券交易,不能像傳統的證券交易所經過增長集羣節點將不一樣的商品放到不一樣的服務器上實現交易系統容量的提高,這個難題咱們經過選擇對單進程計算最佔優點的硬件,在對算法進行了大量的改進實現了單機撮合性能的數量級提高,確保了對將來交易業務增加的支撐。
比特幣自己是一個分佈式網絡,普通用戶使和比特幣只須要下載和安裝一個錢包客戶端,或者使用在線錢包服務便可知足使用比特幣的需求,可是因爲比特幣網絡還處於發展初期,並無很是有效的開源軟件能夠支撐住比特幣交易所這樣集中式的大量比特幣資產充值和提現的業務需求,所以咱們須要按照比特幣協議,從新設計並量身打造出交易所錢包軟件,高效安全的知足數十萬用戶的充值和提現需求。
InfoQ:火幣網的技術棧是怎樣的?
巨建華:火幣網最初是基於LNMP搭建的交易平臺,在關鍵的錢包和撮合引擎方面使用C++實現,隨着業務的發展和業務增加帶來的營運壓力提高,咱們逐漸根據業務的特色進行了相應的技術升級。
首先咱們升級到了面向服務的架構,原來的PHP做爲Web層實現與用戶的交付,將業務層轉向用Java開發的後端服務中,這種架構下咱們能夠在保持很是高效的前端產品迭代週期上,並確保整個服務平臺的穩健。
在服務框架方面咱們分別採用了Rest.li和Thrift,根據不一樣的應用場景靈活選用,並經過ZooKeeper實現了服務的配置管理和集羣管理。 和大部分互聯網企業同樣,咱們在實際業務中大量使用了Redis作持久化的存儲和數據緩存,經過Haproxy和LVS結合Keepalived實現關鍵系統的軟件負載均衡。
消息服務方面咱們分別使用了RabbitMQ和Appolo,用於實現訂單和行情數據的發佈管理,經過Node.js和QuickFix這兩個開源項目咱們實現了實時的行情推送,併爲用戶提供了可靠的交易API服務。
Python承擔了部份運維管理和平常數據處理任。
數據庫層面咱們使用MongoDB承擔了所有行情數據的存儲和分發,經過MySQL、InnoDB實現了業務數據的存儲。同時咱們的交易終端覆蓋Windows/Mac OS X/Android/iOS,在桌面和移動端爲用戶提供了更好的交易體驗。
InfoQ:安全性對於數字貨幣來講相當重要,火幣網是如何從技術方面保障安全的?
巨建華:安全對於交易所來講是很是重要的一面,日本最大交易所MtGox由於安全問題的倒閉在世界範圍內影響了比特幣的價格走勢,爲整個比特幣交易領域敲響了警鐘。
火幣網在成立初期就創建了安所有,由經驗豐富的安全專家帶隊參與到了火幣網開發和運營的方方面面,從代碼安全到系統監控甚至社交攻擊防禦,處處都有安所有門的影子。 在火幣網發展速度最快的時候,咱們面臨了大規模的DDOS攻擊,最高時攻擊的流量達到80多G,咱們在改進自身系統和的同時,也引入烏雲、安全寶、加速樂等安全領域的公司的專業服務,這些工做使火幣網一直以來未發生過安全隱患。 在解決自身安全問題的同事,咱們也在風控系統中增長了對用戶的安全監控,好比有用戶賬號被盜之後若是存在異常的登錄提現等行爲,咱們客服系統上會有相應的報警,客服人員會在第一時間和用戶進行電話覈實。
InfoQ:對於7x24的服務承諾,火幣網在架構和運維方面是如何作的?
巨建華:咱們在全部的系統架構都爲高可用作了大量的設計,在前端Web層面和後臺數據緩存和業務服務層均容許作任意的節點失效。在數據庫層面咱們經過複製和數據分區的方式實現了主備層面的高可用,在出現故障後經過相應的業務日誌檢查便可迅速經過ip漂移實現數據庫的故障恢復。
運維方面,從硬件層面的IDC機房線路到防火牆等網絡設咱們都實現了自動化的主備切換的能力,使用Zibbix完善了監控系統,除了對全部服務器和網絡設備的監控外,還根據業務場景提供了數百個監控點,使咱們能夠在第一時間得到系統的運行情況和問題報告。 工做時間上咱們運維和客服都是24小時待命的,確保了不會出現管理上的空檔期帶來的意外故障,併爲用戶提供了隨時能夠聯繫報故障的渠道,使咱們能快速響應用戶的問題。
InfoQ:對於火幣網的重構過程,你有哪些經驗收穫能夠分享給你們?
巨建華:火幣網的重構工做主要體現對技術平臺的升級和技術團隊的建設上,經過初期的問題分析、方案制定和人員招聘,咱們只花了比較短的時間,這個過程當中管理團隊的支持顯得很是重要。 重構過程最重要一環,是火幣網重構完成的升級工做主要的挑戰在於過程當中不能暫停業務,所以從重構初期到完成成級,咱們沒有發佈過一次停機服務的公告。 不停機的重構加上覆雜的業務環境,使咱們在重構升級的過程當中常常面臨一些兩難和折中的選擇,在這些過程當中也產生和遺留下了一些問題,在這個過程當中我所得到的主要經驗如下幾點比較重要:
充分和原業務和技術團隊溝通,深刻了解業務瞭解是重構的前提
架構設計和實現上須要支持灰度升級,隨時回滾
創建儘量真實的測試環境
對可能產生的問題作好規劃和演練是重構成功的前提
InfoQ:火幣網下一步的發展路線圖是什麼?
巨建華:火幣網下一步將經過完成在整個產業鏈的佈局,推進比特幣整個產業務鏈的發展。具體在技術層面來講,咱們將進行新一代交易系統的設計,使之具有更好的性能和自動災難切換的能力,同時咱們將加大在礦場投資管理、比特幣錢包及比特幣支付、虛擬貨幣基金、虛擬商品期貨等金融衍生品領域的技術研發力度,爲提高比特幣在金融領域和現實世界中的應用提供有力的技術支持。
InfoQ:目前互聯網金融很火,不少IT人員都想進入該領域,你從本身的職業生涯角度,會有哪些建議?
巨建華:目前互聯網行業廣泛缺乏高級IT人才,在互聯網金融領域更是如此,可是和社區門戶、搜索以及電商等領域不一樣,互聯網金融領域對於安全和穩定有着超乎尋常的需求,對於基礎技術的掌握要求更加深刻。
舉個例子,不少人都很是熟悉的MySQL數據庫,在傳統互聯網領域只須要了解通常的主從複製和sql語句編寫調優便可,可是在將MySQL用到存儲用戶資產、時刻進行高併發的交易時就要求對於數據庫事務有着深刻的瞭解才能在確保數據的準確性和一致性的前提下,保證計算的精度和性能。在金融領域對於主從複製成功的數據庫還須要數據正確性的較驗在其它領域是不多見的。 多數中小型的互聯網金融企業由於成本方面的緣由在大量的使用MySQL數據庫而不是Oracle這樣的解決方案,所以值得但願進入互聯網金融領域的人員深刻學習,可是當成長到必定規模之後Oracle、DB2又會在必定程度上成爲主流,也是須要掌握的。
Java平臺是互聯網金融領域技術平臺的主力軍,幾乎全部主流的金融平臺都是使用Java開發的,對於想進入互聯網金融領域的IT人員來講最好可以系統的掌握Java平臺的開發和設計。
對於金融知識的掌握也是進入互聯網金融領域的一大挑戰,若是不瞭解金融產品的基礎知識,就沒法理解複雜的業務邏輯,難以勝任高級的系統架構師和開發人員的職位,這些都是挑戰同時也是機遇。
在10月份舉行的QCon上海2014大會上,巨建華將做爲特邀講師在「互聯網思惟對金融的挑戰」專題中進行有關「火幣網比特幣交易系統的構建實踐」的演講分享。