當區塊鏈流量激增30倍時,如何保持 Dapp 的正常運行

最近,EOS 主網上的空投已達到先前基準的30倍。 EOS dapp 依賴的各種基礎架構服務都很費力的在想辦法跟上這種變化,但是有的已經完全崩潰並保持崩潰。 dfuse 也受到了這種流量衝擊的影響,但是我們保持繼續運行,而且處理交易的速度能實時跟上網絡上的頻率(最近幾天甚至能達到每秒 500 次轉賬)。

在本文中,我們將介紹 EOS 主網上具體發生的情況,以及隨着 EOS 流量激增,dfuse 面臨着存儲、查詢功能的計劃和索引以及濫用管理所面臨的挑戰。

EIDOS 空投

自11月1日以來,EOS 上的流量從平均每秒5次轉賬達到了每秒500多個水平,而且突然而來的高峯期接近了每秒1000。這是由於 EIDOS 代幣的獨特空投方式。該空投利用名爲  eidosonecoin 的智能合約,鼓勵用戶向其發送 EOS 代幣,發送到 EIDOS 智能合約的 EOS 都會退回到原賬戶,並且還會收穫少量的 EIDOS。因爲這個 EIDOS 空投模式每次要求轉賬的 EOS 量很小(0.0001 EOS),並且 EIDOS 代幣可以在多個交易所交易,因此大量用戶被吸引參與 EIDOS 空投。

除了網絡交易速率的急劇增加外,用戶還尋求與 EIDOS 合約進行反覆交互,每個交易中打包了大量操作,進一步增加了網絡活躍度。

日常合約活躍性圖表(基於 contract::action) - 來自 labs.eostitan.com

EOS 流量在11月11日飆升至每秒 1000 次轉賬。原因是一個惡意行爲者利用了 eosio 系統帳戶可用的無限 CPU 資源和 EOS 平臺上命名空間拍賣中的 bidname 和 bidrefund 操作中存在的 bug。使用戶可以在不消耗自己的任何 CPU 資源的情況下挖 EIDOS,從而使網絡飽和,超出了BP節點定義的限制。

該漏洞已在11月13日通過 Block.one 發佈的一個補丁修正了,方法是向 bidname  帳戶收取 CPU 資源費用。這之後交易量就穩定在每秒500次,而且看似在剩餘14個月的 EIDOS 空投期內會保持在這個水平左右,直到 EIDOS 價格下降,人們對它不再感興趣。

帳戶CPU使用情況——圖表由 EOS Rio 通過 Hyperion 提供

通過由紅色標示的 eosio帳戶可以看到攻擊者正在使用多少資源

這個“新常態”代表每個區塊現在都包含幾MB的數據(EIDOS 空投開始之前爲100-150KB,也就是說增加了10-15倍)。 EOS的出塊時間快到0.5秒,這意味着 EOS 主網現在每天通過網絡傳輸約25GB的區塊鏈數據。對於像 dfuse 這樣的服務而言,每天攝取大量數據並將其與已經很龐大的數據集集成在一起顯然是一個巨大的挑戰。

空投造成的影響

EIDOS 空投導致 EOS 網絡進入並保持長時間處於擁塞模式。所有帳戶都只能按比例分配總 CPU 資源。這直接影響賬戶抵押的 EOS 能夠執行的交易數量。

10月18日至11月14日之間的平均CPU利用率——來自 labs.eostitan.com

此外,在需求超過供應的情況下,這個情況還促使 dapp 向 REX 借用 CPU 資源。當前, REX 處於“流動性緊縮”狀態, 已經不能用作資源出租了

支付給 REX 的費用中反映出 REX 的使用情況——截圖來自 eosauthority.com

這也影響了 dapp 的用量。EOS 網絡上的活躍用戶數量有所減少,因爲許多用戶發現他們缺乏執行交易所需的 CPU 資源。

還要注意,dapp 不是隻在鏈上進行交易,而會去讀取交易。由於原生 EOS 節點的搜索功能非常有限,因此通常可以藉助 dfuse 和其它的 API 服務來滿足相關需求。但是,這些服務大多數都無法維持當下的新日常流量,有一些已經完全停止服務了。

dfuse 所遇到的挑戰與找到的解決方案

11月1日,我們的 dfuse 系統運行的負載與以往的正常水平一致。在我們的案例中,因爲 dfuse 建立在專有的存儲和查詢層(dfuse DB)上,而不是簡單地跨許多本機區塊鏈節點進行負載平衡請求,這意味着我們擁有大量未使用容量的緩衝區。結果,我們的系統能夠處理最初的5倍流量激增,而不會達到飽和和隨之而來的故障級聯。

然而,警報響起,我們的團隊看到了流量的激增,意識到我們的閒置容量已變得低於最初定義的安全閾值以下了。

初步調查顯示,不僅傳入數據激增了5倍以上,而且傳出流量(dfuse 用戶查詢和搜索的響應)也以相似的比例增長,因爲許多用戶查詢返回的數據量很大。網絡同時上的交易越來越大。

我們的團隊立即開始與客戶聯繫,以提醒他們的 API 調用正在產生更多的用量,會導致成本增加,並在某些情況下與客戶合作微調他們的查詢。其他客戶確實需要所有數據,讀取所有的 eosio.token 的轉賬。

 

此期間 dfuse API 反饋條目數的增長

幸運的是,我們的核心開發團隊最近進行了一系列內部改進,對 dfusedb 中的核心數據結構進行了重新設計,使其空間利用率提高了4倍以上,而沒有增加搜索時間。這有助於我們應對鏈上新的流量水平。

但是,由於我們的用戶需要他們的搜索和查詢的反饋保持高速,所以我們擔心查詢量的增長會影響性能。我們的核心工程團隊把精力專注在解決此問題上,找到了進一步改善 dfuse DB 的針對區塊鏈的查詢計劃程序組件的方法。

這促使團隊找到了更分佈式的索引策略,現在即使面對大量的數據集,用這個策略也保持了 dfuse 的性能水平不降低。這不僅是搭建更多節點的問題,而且還在於智能地分配搜索和索引任務。因此,dfuse 還是保持住了1秒內查詢全鏈歷史的性能。

隨着區塊鏈數據集規模的增加,響應規模更大,導致一些 dfuse 的“免費版套餐”用戶可能會更快地耗盡其免費反饋條目數,我們也發現濫用率顯着增加。我們檢測到有用戶每天都會創建新的帳戶,然後立即就用盡了每個帳戶的免費配額。我們的團隊迅速改善我們服務的使用配額管理,從而更公平地在免費和付費用戶之間分配資源。

如何保持 Dapp 的正常運轉

爲 dapp 選擇 API 和基礎結構服務時,需要選擇即使在不利的網絡條件下也能保持完全準確性和高性能的服務,併爲您提供最強大和高表現力的服務,由公認的行業領導者運營並有一個充滿激情和敬業精神的團隊,致力於爲我們的客戶和整個生態系統創造價值。

Dfuse 爲您的 dapp 提供了一個現代化的基礎架構層,即:

  • 快速

  • 可擴展

  • 爲您提供對區塊鏈事件的高精度、細粒化的流式訪問,

  • 支持主動的 Webhook 類型的回調,

  • 具有業內最高的可靠性。

立即註冊免費帳戶,嘗試 dfuse。如有任何疑問/建議,請通過微信Twitter電報羣與我們聯繫。我們想了解您的數據需求以及我們如何幫助您的 dapp 落地。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章