彩虹橋上的棱鏡塔:Web3 與中間件 — Kafka
來源:Confluent Kai Wahner
編譯:Masterdai
一:背景和展望
早在2016年InfoQ的國際會議上,Kai Wahner 發表了一場演講名為《區塊鏈------中間件的下一件大事》。他在當時提出了一種新穎的基於區塊鏈數據和中間件的參考架構,這一套架構現如今被大量的技術集成商和供應商所採用。
然而,他並沒有加入任何一家加密初創公司。而是在2017年加入了Confluent,因為他認為"通過事務和分析型工作負載來處理任何規模的動態數據是更加重要的範式轉變。"對於加入Confluent 這個決策Kai認為他是正確的,正如同Kai在博客中寫道,"現如今大部分的企業都利用Kafka作為MQ、ETL和ESB工具的替代中間件,或者使用無服務Kafka實現雲原生iPaaS。"
故事並沒有在這裡戛然而止,區塊鏈、加密技術和NFT的出現和規模化採用激增了對中間件等開源基礎軟件的需求。出於充分的理由(規模性、可靠性、實時性),有許多的加密市場網站、區塊鏈監控基礎設施和托管銀行建立在Kafka之上。 這些客戶成功的關鍵就在於將區塊鏈、加密貨幣與企業服務軟件、數據庫和數據湖進行了集成。
如果我們把Chainlink 這類預言機比作一道連接鏈上網絡和鏈下世界的彩虹橋,而像Kafka 、Flink 這樣的中間件就是用來折射虹光的棱鏡塔。
二:什麼是中間件
中間件是位於操作系統和在其上運行的應用程序之間的軟件,其支持分佈式應用程序之間的通信和數據管理。它有時候也被稱為管道,因為將兩個應用程序連接在一起,因此數據和數據庫可以輕鬆地在"管道"之間傳遞。常見的中間件包括數據庫中間件、應用服務器中間件、面向消息中間件等等。換句話說,它實現了一組\一個應用程序與另一個\一組應用之間的對話和通信,就像是一個跨國派對中的中間介紹人加翻譯。而Kafka就是消息中間件的一種。
Apache Kafka
Kafka 是一個開源分佈式事件流處理平台,最初由2011年在LinkedIn創建並且開源。
Kafka 通過三個關鍵功能使得用戶可以搭建一個實現端到端解決方案的事件流
發布(寫入)和訂閱(讀取)事件流,包括從其他系統持續導入或導出數據。
持久並且可靠的存儲事件流。
處理瞬時發生或者回顧發生的事件流。
事件流:以流式事件的形式將數據從各個數據源(數據庫、傳感器、移動設備、雲服務、應用程序)進行抓取;為後續的檢索進行持久的存儲;以實時和可追溯的方式操縱處理和響應事件流;並且根據需要將事件傳遞到不同目標的技術。事件流確保了數據的連續流動和表達,從而使正確的信息在正確的時間出現在正確的位置。
Apache Kafka 的用例
消息傳遞 :Kafka可替代傳統的消息代理。消息代理常被適用於數據存儲和處理的解耦,緩衝未處理響應的消息等等。
網站活動跟蹤 :將跟蹤用戶活動的管道重建為一組實時的發布---訂閱源。將用戶在站點的活動(頁面查看、搜索、點擊等其他操作)發布到中心主題,每一個活動類型都有一個主題。這些訂閱源可以用於訂閱一系列用例,包括實時處理、監控以及加載到Haadop或者離線數倉系統進行處理和報告。
日誌聚合 :使用Kafka作為日誌聚合方案的替代品。日誌聚合通常從服務器收集日誌文件,並將它們放在一個中心位置(文件服務器或者HDFS)進行處理。Kafka抽象出文件的細節,並將日誌或事件數據抽取為更清晰的數據流,這使其在多個數據源和分佈式數據庫情況下擁有更低延遲的數據處理。
三:kafka和web3的關係
下圖是一個非常經典的Dapp技術實現原理,但他卻給了很多人一個錯覺。似乎只需要一個前端來向以太坊網絡請求數據,就能夠實現鏈上和鏈下行為的交互了。在實際的開發過程中,往往會更加複雜,並且會在區塊鏈後端和前端之間增加一層結構。
在這樣的一層結構中我們可以實現:
Kafka 以側鏈或者鏈下的方式來進行大規模實時數據計算;區塊鏈技術與企業其他軟件部分的集成,包括CRM、大數據分析、和任何其他自定義的業務應用程序。即Kafka作為區塊鏈集成的中間件。
在加密企業架構中更加普遍的用例是利用Kafka作為區塊鏈與企業應用程序之間的可擴展實時數據中心。下面是一些例子,並且探討一些Kafka可以提供幫助的技術用例
3.1.Kafka作為元宇宙的數據中樞
零售商家和用戶之間的交流必定是實時的,無論你是想要賣實體的衣服、手機、或者在NFT交易市集之中和虛擬人商家進行討價還價。而以下架構通過編排各種加密和非加密應用程序之間的信息流來實時支持任何規模的虛擬世界架構。
3.2.Kafka在加密交易、市場中作為數據中樞的角色
用戶在移動錢包執行比特幣交易。實時應用程序監控鏈下數據、關聯數據、在儀表盤中顯示並發送推送通知。另外一個完全獨立的部門在批處理的過程中回放來自Kafka日誌的歷史事件,以使用專用分析工具進行合規性檢查。
Kafka 生態系統中提供了許多功能,可以將來自區塊鏈和加密世界的數據與來自傳統IT的數據一起使用。
四:Kafka可以提供的技術用例
監控區塊鏈基礎設施、加密貨幣和Dapp的健康狀況,以避免停機,保護基礎設施並使得區塊鏈數據可訪問。------基礎設施維護
通過Kafka Stream或ksqlDB進行流處理可以在Defi、NFT等相關交易市場進行實時數據處理。------鏈上數據分析
Kafka作為預言機的集成通道:例如從Chainlink傳遞到Kafka再到IT基礎設 施。
通過Kafka 主幹上的節流和隨機數管理來處理背壓(在數據流從上游生產者向下游消費者傳輸的過程中,上游生產速度大於下游消費速度,導致下游的Buffer溢出),並將事務流式傳輸到鏈上。------Gamefi和Socialfi
同時處理多個鏈:並行監控和關聯以太坊、solana、Bsc區塊鏈上的交易。------跨鏈相關
我們可以看到,未來隨著新一代gamefi、defi、socialfi、移動端Dapp的增長,過去僅僅是將鏈上數據攝取到數據庫和數據湖的方法已經不能滿足現有新應用的需求了。在架構設計中充分地利用消息中間件的特性,可以滿足大部分用戶對於實時性、可靠性的需求。
五:加密和Defi世界中Kafka的真實案例
TokenAnalyst : 加密市場的可視化
EthVM:區塊鏈瀏覽器和分析引擎
Kaleido:用於區塊鏈和智能合約的REST API 網關
Chainlink:用於將智能合約從區塊鏈連接到現實世界的Oracle 網絡
5.1.TokenAnalyst -- 加密市場的可視化
TokenAnalyst 是一個鏈上數據分析工具,用於可視化和提供企業級API服務。該項目於2020年5月宣布停止運營,其團隊大部分成員加入Coinbase。不過他的案例仍然值得借鑒------其利用Kafka堆棧(Connect、Streams、ksqlDB、Schema Registry)將來自比特幣和以太坊的區塊鏈數據與其分析工具集成在一起。
"訪問鏈上數據需要節點,而這並不如人們想象中斷那麼容易(各個版本和地區之間的數據差異)。此外,另一個挑戰是使他們與網絡保持同步。為了實現零停機,並且確保最高標準的數據質量和可靠性,我們決定使用Kafka 和Confluent 平台。"
TokenAnalyst 開發了一個名為Ethsync的內部解決方案。每個節點加上 Ethsync 都將數據推送到其對應的 Kafka 主題。如同下圖所示,其需要運行多個節點以實現冗餘。推送到主題的塊更新並且客戶端接受為新的有效塊的塊。但是,由於區塊鏈的性質,可能會發生區塊鏈的分叉(一條替代鏈變長並導致另一條鏈失效)。因此,以前有效的塊可能會變得無效。(筆者注:這個問題現在的很多項目方也會遇到。)
基於Kafka Streams 的區塊確認器 :為了防止在下游聚合計算中使用無效塊,TokenAnalyst開發了基於 Scala 中的Kafka Streams 的塊確認器組件。它通過臨時保留塊來解決重組場景,並且僅在達到一定數量的確認塊(挖掘該塊的子塊)時才傳播它們。
確認器不僅解決了驗證規範鏈的問題,並且能夠通過確認丟棄和已經註冊的塊,來輸出具有有效一次性語義(Exactly-once semantics)的確認塊。通過該組件可以使其充分利用容錯恢復機制,適用於零停機環境的滾動部署。
5.2.EthVM -- 區塊鏈瀏覽器和分析引擎
比特幣和以太坊等公共去中心化區塊鏈的美妙之處在於其透明度,防篡改日誌使得區塊鏈瀏覽器能夠監控和分析所有的交易。
EthVM 是一個開源的以太坊區塊鏈數據處理和分析引擎,由 Apache Kafka 提供支持。該工具支持區塊鏈審計和決策。EthVM 驗證交易和智能合約的執行,檢查餘額並監控gas 價格。該基礎設施是使用Kafka Connect、Kafka Streams 和 Schema Registry 構建的。還包括一個客戶端可視化塊資源管理器。
EthVM使用Kafka的契機來源於Boerge Svingen 在Confluent博客上發表的一篇名為《在紐約時報上使用Apache Kafka 發布》的文章,其描述了標誌性的紐約時報如何從混雜的API、服務、生產者和消費者轉變為用Kafka驅動的基於日誌的架構。
而區塊鏈本質上就是一個不斷增長的記錄列表,合併成塊並且用密碼學來鏈接------用程序員的話說就是鏈表。在Kafka的術語中,以太坊客戶端就是生產者------負責創建日誌的新條目。
5.3.Kaleido -- 用於加密和智能合約的 Kafka 原生網關
Kaleido 提供企業級區塊鏈 API 來部署和管理智能合約、發送以太坊交易和查詢區塊鏈數據。它隱藏了以太坊交易提交、Web3客戶端庫、nonce管理、RLP 編碼、交易簽名和智能合約管理的區塊鏈複雜性。
Kaleido 為鏈上邏輯和數據提供 REST API。它由完全托管的高吞吐量Apache Kafka 基礎架構提供支持。
在基於區塊鏈的分佈式事務系統中,對事件的檢測和反應是不可避免的要求。沒有一個參與者或應用程序可以控制狀態變化,鏈上的智能合約邏輯不可能直接與鏈下系統通信------否則邏輯的確定性就會受到損害。
事件(通過事務"日誌"傳遞)是編程模型的核心部分,使用豐富的類型系統很容易發出。
這些事件不僅可以用來觸發邏輯,還可以作為數據流從鏈中流出。
用於在web端和移動端的高效數據檢索
實時分析引擎和數據湖
無服務或傳統計算來觸發應用程序和業務流程
Kaleido 提供了兩種內置功能來處理這些事件,無需直接使用複雜的原始 JSON/RPC 接口、處理檢查點重啟/恢復或RLP 解碼和類型映射。(分別是Chainlink和 Event streaming)
事件流 :使用與REST API 網關集成的REST API 進行訂閱,並通過簡單的Webhook 將事件傳遞到任何HTTP 接口,或者通過Apache Kafka 支持的加密App 2 App Messaging 層。
5.4.Chainlink -- 用於將智能合約從區塊鏈連接到現實世界的 Oracle 網絡
Chainlink 是用於將智能合約連接到現實世界的行業標準預言機網絡。"借助 Chainlink,開發人員可以構建混合智能合約,將鏈上代碼與由去中心化 Oracle 網絡提供支持的大量安全鏈下服務相結合。由數十萬人組成的全球去中心化社區管理,Chainlink 引入了更公平的合約模型。它的網絡目前為去中心化金融 (DeFi)、保險和遊戲生態系統等領域的智能合約提供數十億美元的價值。Chainlink網絡的完整願景可以在Chainlink 2.0白皮書中找到。"
Chainlink並沒有在任何公開的博客文章和會議中討論其設計架構。我們只能從其招聘人員的工作棧要求中窺見其設計------Chainlink 正在從傳統的基於時間序列的監控過渡到事件驅動的架構。
六:小結
在這些節點設施服務商出來之前,普通人想要獲取鏈上的數據信息是非常困難的。而現在,任何一個能夠上網的人都可以通過區塊鏈瀏覽器或者鏈上數據分析工具看見相對實時的區塊數據。
然而,能夠看見數據和大規模的使用數據是完全不同的概念。
"神祇們不會攀爬世界之樹。他們用彩虹橋穿行於幾大世界之間。只有神才能用彩虹橋。如果冰霜巨人或者別的巨人試圖通過彩虹橋爬上阿斯加德,他們的腳就會被燒傷。"
儘管我們現在有了節點托管、Web3API等服務的幫助,鏈上和鏈下之間進行高效實時溝通的成本依然很大。如同北歐神話中的彩虹橋,它依然是某些神祇們的專屬通道。原因就在於鏈上數據和鏈下業務之間存在大量的空白環節。Kafka僅僅只是消息傳遞的一個環節,在此之間還有數據的實時抓取、清洗和存儲。而過去服務於傳統IT業務的中間件、數據庫等並不一定完全適用於現有的Web3 IT架構。隨著越來越多的企業和業務邁入加密領域,未來也可能會出現一種全新的基於區塊鏈網絡的開源中間件和數據分析架構。
我希望有一天,人人都能擁有開啟彩虹橋的能力。我們將自由的穿梭在世界之樹所締造的九界之間,與眾生靈交流。