NFTScan 成立于 2021 年 4 月,是一個(gè)多鏈 NFT 數(shù)據(jù)基礎(chǔ)設(shè)施服務(wù)商,截止到 2023 年 1 月份,NFTScan 已經(jīng)支持了 11 條區(qū)塊鏈網(wǎng)絡(luò),包括 Ethereum、Solana、BNBChain、Moonbeam、Polygon、Arbitrum、Optimism、Avalanche、Fantom、Cronos、PlatON 網(wǎng)絡(luò)。
NFTScan 旗下有 2 個(gè)核心業(yè)務(wù):NFTScan.COM 多鏈 NFT 數(shù)據(jù)瀏覽器平臺(tái)和 NFTScan OpenAPI 開(kāi)發(fā)者平臺(tái)。NFTScan 主要為 Web3 用戶(hù)提供高效簡(jiǎn)潔的 NFT 資產(chǎn)搜索查詢(xún)服務(wù),以及為 Web3 開(kāi)發(fā)者和新一代金融科技公司提供專(zhuān)業(yè)的 NFT API 數(shù)據(jù)服務(wù)。
(相關(guān)資料圖)
以前的 MySQL 解決方案的挑戰(zhàn)
此前,NFTScan 使用 Amazon Web Services (AWS) 上的 MySQL 和 Elasticsearch 作為其核心數(shù)據(jù)庫(kù)解決方案。MySQL 存儲(chǔ)了所有業(yè)務(wù)數(shù)據(jù),包括來(lái)自 B 端和 C 端用戶(hù)的用于分析和處理的數(shù)據(jù)。其中,NFT 的交易記錄和資產(chǎn)記錄是核心的業(yè)務(wù)數(shù)據(jù)模型,B 端和 C 端的查詢(xún)也大部分是圍繞這兩類(lèi)核心數(shù)據(jù)展開(kāi)的。由于 NFT 數(shù)據(jù)每天都在持續(xù)增長(zhǎng),多維度查詢(xún)會(huì)存在一些分布不均勻的現(xiàn)象,NFTScan 將 NFT 交易和資產(chǎn)相關(guān)數(shù)據(jù)以全索引方式同步到 Elasticsearch,以近乎全字段索引的方式響應(yīng)多維度 NFT 數(shù)據(jù)查詢(xún),從而解決 MySQL 在多維度檢索海量數(shù)據(jù)方面的性能與效率瓶頸。
該解決方案在使用半年后, NFTScan 逐漸發(fā)現(xiàn)其無(wú)法滿足業(yè)務(wù)的快速增長(zhǎng),存在以下缺陷:
可擴(kuò)展性差,存儲(chǔ)和維護(hù)成本高。每天新的區(qū)塊鏈數(shù)據(jù)量急劇增加,但 MySQL 無(wú)法自動(dòng)橫向擴(kuò)展以應(yīng)對(duì)不斷增加的工作負(fù)載。NFTScan 不得不手動(dòng)對(duì)表進(jìn)行分片并新增 MySQL 的主備集群,來(lái)分?jǐn)偤途?CPU 和內(nèi)存資源的使用,這大大增加了存儲(chǔ)和維護(hù)成本。
隨著成本的增加,使用率下降。Elasticsearch 部署在 AWS 上,由于 AWS 原生集群配置的限制,NFTScan不得不增加更多的 Elasticsearch 高配置數(shù)據(jù)節(jié)點(diǎn)來(lái)提供在線查詢(xún)服務(wù),這導(dǎo)致成本上升和使用率降低。
反復(fù)出現(xiàn)的精度錯(cuò)誤。Elasticsearch 數(shù)據(jù)庫(kù)更多的是為搜索而設(shè)計(jì)的,而不是為計(jì)算設(shè)計(jì),所以在聚合計(jì)算中存在精度誤差。
為什么選擇 TiDB?
經(jīng)過(guò)近一個(gè)月的調(diào)研和測(cè)試,NFTScan 最終選擇了 TiDB 來(lái)作為核心數(shù)據(jù)架構(gòu),替代原有數(shù)據(jù)庫(kù)系統(tǒng)。NFTScan 研發(fā)團(tuán)隊(duì)在調(diào)研中選擇 TiDB 主要有以下幾點(diǎn)考量因素:
高度兼容 MySQL :TiDB 在傳輸協(xié)議和 SQL 語(yǔ)法等方面與 MySQL 高度兼容,NFTScan 可以輕松地將數(shù)據(jù)遷移到 TiDB,MySQL 兼容性大大減少了研發(fā)團(tuán)隊(duì)使用新數(shù)據(jù)庫(kù)的學(xué)習(xí)成本、時(shí)間和精力,同時(shí)也能加速數(shù)據(jù)庫(kù)架構(gòu)的遷移工作;
彈性伸縮:TiDB 采用計(jì)算和存儲(chǔ)分離的分布式架構(gòu)以及底層分布式存儲(chǔ)數(shù)據(jù)的設(shè)計(jì)機(jī)制,NFTScan 可以根據(jù)讀寫(xiě)流量的實(shí)時(shí)變化靈活伸縮計(jì)算存儲(chǔ)資源,最大限度地提高了資源使用率,并大幅降低了成本;
一體化 HTAP 架構(gòu):TiDB 的 HTAP 能力可以同時(shí)處理事務(wù)和分析工作負(fù)載,一套數(shù)據(jù)庫(kù)即可滿足事務(wù)型數(shù)據(jù)庫(kù)和分析型數(shù)據(jù)庫(kù)的需求,不僅完美地滿足了 NFTScan 不斷增長(zhǎng)的業(yè)務(wù)需求,還降低了整體運(yùn)營(yíng)成本;
高可用性:TiDB 本身的數(shù)據(jù)副本同步機(jī)制和內(nèi)置的災(zāi)備方案,保證了整體數(shù)據(jù)庫(kù)服務(wù)的高可用性。
遷移方案
經(jīng)過(guò)兩個(gè)月的時(shí)間,NFTScan 完成了將底層數(shù)據(jù)庫(kù)系統(tǒng)全部切換到 TiDB 的工作,通過(guò)部署 2 臺(tái) TiDB 服務(wù)器、9 臺(tái) TiKV 服務(wù)器和 2 臺(tái) TiFlash 服務(wù)器,并在同一 region 下,跨三個(gè)可用區(qū)(AZ) 進(jìn)行部署,保證了整體架構(gòu)的高可用性。
截至 2022 年 11 月,NFTScan 的 TiDB 數(shù)據(jù)庫(kù)存儲(chǔ)了大約 6TB 的業(yè)務(wù)數(shù)據(jù),QPS 達(dá)到 5000,平均查詢(xún)時(shí)長(zhǎng)40ms,各種應(yīng)用在 TiDB 上運(yùn)行穩(wěn)定。
流暢的遷移體驗(yàn)
在整個(gè)遷移過(guò)程中,NFTScan 對(duì) TiDB 的性能與數(shù)據(jù)遷移的流暢性印象深刻。
TiDB 提供了 Dumpling、TiDB Data Migration (DM) 等一系列數(shù)據(jù)同步套件,幫助 NFTScan 將歷史數(shù)據(jù)從 MySQL 遷移到 TiDB。比如 NFTScan 的一些業(yè)務(wù)數(shù)據(jù)是不能直接遷移到 TiDB 的,必須在遷移前先進(jìn)行調(diào)整。在這種情況下,TiDB 的同步工具可以并發(fā)寫(xiě)入大量數(shù)據(jù)。在解析存儲(chǔ)實(shí)時(shí) NFT 數(shù)據(jù)時(shí),執(zhí)行效率較之前的存儲(chǔ)方案提升了約 30%。
同時(shí),TiDB 的 online schema update (在線 schema 更新)設(shè)計(jì),使得 NFTScan 可以在遷移過(guò)程中進(jìn)行異步更改字段和異步添加索引等數(shù)據(jù)定義語(yǔ)言 (DDL) 操作,而不會(huì)阻塞整個(gè)表的讀寫(xiě),這大大提高了業(yè)務(wù)邏輯調(diào)整時(shí)數(shù)據(jù)模式的靈活性。遷移完成后,NFTScan 對(duì) B 端、C 端各類(lèi)應(yīng)用程序的數(shù)據(jù)查詢(xún)進(jìn)行了改造,經(jīng)過(guò)充分調(diào)優(yōu)和測(cè)試后,逐步將生產(chǎn)環(huán)境的應(yīng)用全部切換到 TiDB。
用戶(hù)收益
TiDB 支持多維實(shí)時(shí)查詢(xún),查詢(xún)時(shí)間短。TiDB 完美地滿足了 NFTScan 高吞吐量和低延遲的核心要求。以業(yè)務(wù)端的 API 服務(wù)為例,平均查詢(xún)時(shí)間從 10-100 毫秒下降到 10 毫秒或更少。即使處理 1,000 QPS,這樣的查詢(xún)速度也能保持穩(wěn)定。
TiDB 的列式存儲(chǔ)引擎 TiFlash ,可以高效地處理分析工作負(fù)載。例如,在對(duì)某張具有數(shù)億行的表執(zhí)行復(fù)雜查詢(xún)時(shí),可以在幾秒鐘內(nèi)獲得結(jié)果。
TiDB 的智能 SQL 優(yōu)化器可以根據(jù)數(shù)據(jù)的分布情況選擇最具性?xún)r(jià)比的數(shù)據(jù)查詢(xún)執(zhí)行計(jì)劃,讓開(kāi)發(fā)者可以靈活調(diào)整和優(yōu)化 SQL 執(zhí)行計(jì)劃。