Coinbase是如何在其加密貨幣交易平臺上應對擴充套件性挑戰的

weixin_33807284發表於2018-08-16

在2017年的數字貨幣熱潮中,數字貨幣交易公司Coinbase在他們的平臺上遇到了擴充套件性方面的挑戰。工程團隊主要通過升級和優化MongoDB、熱點流量隔離解決了這些挑戰,並構建了捕獲和回放工具以應對未來的流量暴增。

\\

在2017年5月至6月間,Coinbase的客戶流量飆升超出了預期的水準,超過了通常最大流量的五倍並導致了停機 。團隊首先解決了一些簡單的問題:垂直擴充套件、升級MongoDB以提升效能、優化索引以及基於熱點的流量隔離。現有的監控系統不足以識別上下文資訊,所以團隊通過程式碼instrumentation技術進行了增強,以便於記錄丟失的資料。儘管有了這些改善,在2017年12月比特幣價格飆升階段,Coinbase還是再次遇到了多次當機。從此之後,團隊致力於通過捕獲和回放工具模擬流量的模式來處理更高的流量。

\\

在最初的停機期間,Coinbase的Ruby應用和MongoDB都遇到了更高的延遲,在耗時方面,Ruby和MongoDB是大致均等的。為了更好地理解這些跨元件呼叫的上下文資訊,團隊通過修改MongoDB的資料庫驅動記錄了額外的資料。這幫助他們將問題的範圍縮小至一個未經優化的響應物件,該物件增加了網路負載。這個問題的解決使應用程式的效能得到了很大的提升。另外,通過在物件-關係對映層(Object Relational Mapping,ORM)和驅動層增加基於Memcached的快取提升了大規模讀取的吞吐量。增補缺失的索引也改善了響應時間。到2017年6月,團隊已經將MongoDB叢集升級到3.2,它擁有更快的WiredTiger儲存引擎。Coinbase使用Redis來實現限速等服務,這些服務在停機期間曾經受到Redis的單執行緒模型影響

\\

為了應對未來可能出現的流量暴增,團隊開發了名為Capture和Cannon的工具,它們可以從生產環境的系統中捕獲流量,並根據需要針對新系統進行回放,以測試系統的彈性。Capture和Cannon都是基於mongoreplay的,mongoreplay工具能夠從網路介面捕獲針對MongoDB例項的流量,並記錄所呼叫的命令。這些日誌可以基於其他的MongoDB例項進行回放。流量能夠跨應用伺服器進行捕獲,然後合併到單個檔案之中。捕獲到的流量和磁碟快照都儲存到了AWS S3之中,Cannon隨後能夠基於它們進行回放。

\\

Coinbase維護了一個公開的狀態資訊頁面,地址是https://status.coinbase.com/

\\

檢視英文原文:How Coinbase Handled Scaling Challenges on Their Cryptocurrency Trading Platform

相關文章