導讀
NFTScan 是一家多鏈 NFT 資料基礎設施服務商,為 Web3 使用者提供高效簡潔的 NFT 資產搜尋查詢服務,為 Web3 開發者和新一代金融科技公司提供專業的 NFT API 資料服務。
TiDB 作為一種分散式 HTAP 資料庫,可以同時滿足海量資料儲存和高併發讀寫的需求, 在高可用性、分散式架構、ACID 事務支援和實時多維查詢等方面,都具備優勢,適配 Web3 行業的場景需求。
NFTScan 在快速發展中發現傳統的 MySQL 資料庫無法滿足業務的快速增長,而 TiDB 能夠提供毫秒級多維查詢的能力,為 NFTScan 提供了更高效的服務,於是選擇 TiDB 作為核心資料架構。本文介紹了 NFTScan 資料架構面臨的挑戰、選型的思考、遷移至 TiDB 的過程以及遷移後獲得的收益。一體化的 HTAP 架構能夠替代 MySQL + Elasticsearch 的能力,成為支撐線上資料服務的最佳選擇。
NFTScan 成立於 2021 年 4 月,是一個多鏈 NFT 資料基礎設施服務商,截止到 2023 年 1 月份,我們已經支援了 11 條區塊鏈網路,包括 Ethereum、Solana、BNBChain、Moonbeam、Polygon、Arbitrum、Optimism、Avalanche、Fantom、Cronos、PlatON 網路。
NFTScan 旗下有 2 個核心業務:NFTScan.COM 多鏈 NFT 資料瀏覽器平臺和 NFTScan OpenAPI 開發者平臺。NFTScan 主要為 Web3 使用者提供高效簡潔的 NFT 資產搜尋查詢服務,以及為 Web3 開發者和新一代金融科技公司提供專業的 NFT API 資料服務。
目前,NFTScan 資料庫收錄了 100 萬+ 個 NFT 合約地址,7 億多枚 NFT 資產資料,17 億多鏈 NFT 鏈上互動記錄。並且這個數字還在以每日 3000 個 NFT 合約地址和 200 萬個 NFT 資產的速度在遞增。從上述資料可以看出,NFTScan 有著增量大,活躍度高兩大特點。這樣的業務特點決定了我們對資料庫技術架構要求極高,需要具備全面、實時、高效等特性,並滿足高併發、低延時等需求。選擇一個合適的,能滿足業務需求的資料儲存體系對 NFTScan 來說至關重要。
以前的 MySQL 解決方案的挑戰
此前,NFTScan 使用 Amazon Web Services (AWS) 上的 MySQL 和 Elasticsearch 作為其核心資料庫解決方案。MySQL 儲存了所有業務資料,包括來自 B 端和 C 端使用者的用於分析和處理的資料。其中,NFT 的交易記錄和資產記錄是核心的業務資料模型,B 端和 C 端的查詢也大部分是圍繞這兩類核心資料展開的。由於 NFT 資料每天都在持續增長,多維度查詢會存在一些分佈不均勻的現象,NFTScan 將 NFT 交易和資產相關資料以全索引方式同步到 Elasticsearch,以近乎全欄位索引的方式響應多維度 NFT 資料查詢,從而解決 MySQL 在多維度檢索海量資料方面的效能與效率瓶頸。
該解決方案在使用半年後, 我們逐漸發現其無法滿足業務的快速增長,存在以下缺陷:
- 可擴充套件性差,儲存和維護成本高。每天新的區塊鏈資料量急劇增加,但 MySQL 無法自動橫向擴充套件以應對不斷增加的工作負載。我們不得不手動對錶進行分片並新增 MySQL 的主備叢集,來分攤和均衡 CPU 和記憶體資源的使用,這大大增加了儲存和維護成本。
- 隨著成本的增加,使用率下降。Elasticsearch 部署在 AWS 上,由於 AWS 原生叢集配置的限制,我們不得不增加更多的 Elasticsearch 高配置資料節點來提供線上查詢服務,這導致成本上升和使用率降低。
- 反覆出現的精度錯誤。Elasticsearch 資料庫更多的是為搜尋而設計的,而不是為計算設計,所以在聚合計算中存在精度誤差。
為什麼選擇 TiDB?
經過近一個月的調研和測試,我們最終選擇了 TiDB 來作為核心資料架構,替代原有資料庫系統。NFTScan 研發團隊在調研中選擇 TiDB 主要有以下幾點考量因素:
- 高度相容 MySQL:TiDB 在傳輸協議和 SQL 語法等方面與 MySQL 高度相容,NFTScan 可以輕鬆地將資料遷移到 TiDB,MySQL 相容性大大減少了研發團隊使用新資料庫的學習成本、時間和精力,同時也能加速資料庫架構的遷移工作;
- 彈性伸縮:TiDB 採用計算和儲存分離的分散式架構以及底層分散式儲存資料的設計機制,NFTScan 可以根據讀寫流量的實時變化靈活伸縮計算儲存資源,最大限度地提高了資源使用率,並大幅降低了成本;
- 一體化 HTAP 架構:TiDB 的 HTAP 能力可以同時處理事務和分析工作負載,一套資料庫即可滿足事務型資料庫和分析型資料庫的需求,不僅完美地滿足了 NFTScan 不斷增長的業務需求,還降低了整體運營成本;
- 高可用性:TiDB 本身的資料副本同步機制和內建的災備方案,保證了整體資料庫服務的高可用性。
遷移方案
經過兩個月的時間,我們完成了將底層資料庫系統全部切換到 TiDB 的工作,透過部署 2 臺 TiDB 伺服器、9 臺 TiKV 伺服器和 2 臺 TiFlash 伺服器,並在同一 region 下,跨三個可用區(AZ) 進行部署,保證了整體架構的高可用性。
截至 2022 年 11 月,NFTScan 的 TiDB 資料庫儲存了大約 6TB 的業務資料,QPS 達到 5000,平均查詢時長 40ms,各種應用在 TiDB 上執行穩定。
流暢的遷移體驗
在整個遷移過程中,我們對 TiDB 的效能與資料遷移的流暢性印象深刻。
TiDB 提供了 Dumpling、TiDB Data Migration (DM) 等一系列資料同步套件,幫助 NFTScan 將歷史資料從 MySQL 遷移到 TiDB。比如 NFTScan 的一些業務資料是不能直接遷移到 TiDB 的,必須在遷移前先進行調整。在這種情況下,TiDB 的同步工具可以併發寫入大量資料。在解析儲存實時 NFT 資料時,執行效率較之前的儲存方案提升了約 30%。
同時,TiDB 的 online schema update (線上 schema 更新)設計,使得 NFTScan 可以在遷移過程中進行非同步更改欄位和非同步新增索引等資料定義語言 (DDL) 操作,而不會阻塞整個表的讀寫,這大大提高了業務邏輯調整時資料模式的靈活性。遷移完成後,NFTScan 對 B 端、C 端各類應用程式的資料查詢進行了改造,經過充分調優和測試後,逐步將生產環境的應用全部切換到 TiDB。
使用收益
- TiDB 支援多維實時查詢,查詢時間短。TiDB 完美地滿足了 NFTScan 高吞吐量和低延遲的核心要求。以業務端的 API 服務為例,平均查詢時間從 10-100 毫秒下降到 10 毫秒或更少。即使處理 1,000 QPS,這樣的查詢速度也能保持穩定。
- TiDB 的列式儲存引擎 TiFlash ,可以高效地處理分析工作負載。例如,在對某張具有數億行的表執行復雜查詢時,可以在幾秒鐘內獲得結果。
- TiDB 的智慧 SQL 最佳化器可以根據資料的分佈情況選擇最具價效比的資料查詢執行計劃,讓開發者可以靈活調整和最佳化 SQL 執行計劃。