彩虹桥上的棱镜塔
Web3与中间件—Kafka
“奥丁召来了弗雷的使者,光精灵史基尼尔。他向史基尼尔描述了一条叫做格莱普尼尔的绳索。史基尼尔骑着马,通过彩虹桥到达了萨法塔夫汉。向矮人们描述怎样制造一条前所未有的绳索。 ” ————《北欧众神》
1.背景和展望
早在2016年InfoQ的国际会议上,Kai Wahner 发表了一场演讲名为《区块链——中间件的下一件大事》。他在当时提出了一种新颖的基于区块链数据和中间件的参考架构,这一套架构现如今被大量的技术集成商和供应商所采用。
然而,他并没有加入任何一家加密初创公司。而是在2017年加入了Confluent,因为他认为“通过事务和分析型工作负载来处理任何规模的动态数据是更加重要的范式转变。” 对于加入 Confluent 这个决策Kai在认为他依旧是正确的。
正如同Kai在博客中写道,“现如今大部分的企业都利用Kafka作为MQ、ETL和ESB工具的替代中间件,或者使用无服务Kafka实现云原生iPaaS。”
故事并没有在这里戛然而止,区块链、加密技术和NFT的出现和规模化采用激增了对中间件等开源基础软件的需求。出于充分的理由(规模性、可靠性、实时性),有许多的加密市场网站、区块链监控基础设施和托管银行建立在Kafka之上。这些客户成功的关键就在于将区块链、加密货币与企业服务软件、数据库和数据湖进行了集成。
如果我们把Chainlink 这类预言机比作一道连结链上网络和链下世界的彩虹桥,而像Kafka 、Flink 这样的中间件就是用来折射虹光的棱镜塔。
2.什么是中间件
中间件是位于操作系统和在其上运行的应用程序之间的软件,其支持分布式应用程序之间的通信和数据管理。它有时候也被称为管道,因为将两个应用程序连结在一起,因此数据和数据库可以轻松的在“管道”之间传递。常见的中间件包括数据库中间件、应用服务器中间件、面向消息中间件等等。换句话说,它实现了一组\一个应用程序与另一个\一组应用之间的对话和通信。就像是一个跨国派对中的中间介绍人加翻译,而Kafka就是消息中间件的一种。
Apache Kafka
Kafka 是一个开源分布式事件流处理平台,最初由2011年在LinkedIn创建并且开源。 Kafka 通过三个关键功能使得用户可以搭建一个实现端到端解决方案的事件流
发布(写入)和订阅(读取)事件流,包括从其他系统持续导入或导出数据。
持久并且可靠的存储事件流。
处理瞬时发生或者回顾发生的事件流。
事件流:以流式事件的形式将数据从各个数据源(数据库、传感器、移动设备、云服务、应用程序)进行抓取;为后续的检索进行持久的存储;以实时和可追溯的方式操纵处理和响应事件流;并且根据需要将事件传递到不同目标的技术。事件流确保了数据的连续流动和表达,从而使正确的信息在正确的时间出现在正确的位置。
Apache Kafka 的用例
消息传递:Kafka可替代传统的消息代理。消息代理常被适用于数据存储和处理的解耦,缓冲未处理响应的消息等等。
网站活动跟踪:将跟踪用户活动的管道重建为一组实时的发布—订阅源。将用户在站点的活动(页面查看、搜索、点击等其他操作)发布到中心主题,每一个活动类型都有一个主题。这些订阅源可以用于订阅一系列用例,包括实时处理、监控以及加载到Haadop或者离线数仓系统进行处理和报告。
日志聚合:使用Kafka作为日志聚合方案的替代品。日志聚合通常从服务器收集日志文件,并将它们放在一个中心位置(文件服务器或者HDFS)进行处理。Kafka抽象出文件的细节,并将日志或事件数据抽取为更清晰的数据流,这使其在多个数据源和分布式数据库情况下拥有更低延迟的数据处理。
3.kafka和web3的关系
下图是一个非常经典的Dapp技术实现原理,但他却给了很多人一个错觉。似乎只需要一个前端来向以太坊网络请求数据,就能够实现链上和链下行为的交互了。在实际的开发过程中,往往会更加复杂,并且会在区块链后端和前端之间增加一层结构。
在这样的一层结构中我们可以实现:
Kafka 以侧链或者链下的方式来进行大规模实时数据计算;区块链技术与企业其他软件部分的集成,包括CRM、大数据分析、和任何其他自定义的业务应用程序。即Kafka作为区块链集成的中间件。
在加密企业架构中更加普遍的用例是利用Kafka作为区块链与企业应用程序之间的可扩展实时数据中心。下面是一些例子,并且探讨一些Kafka可以提供帮助的技术用例
Kafka作为元宇宙的数据中枢
零售商家和用户之间的交流必定是实时的,无论你是想要卖实体的衣服、手机、或者在NFT交易市集之中和虚拟人商家进行讨价还价。而以下架构通过编排各种加密和非加密应用程序之间的信息流来实时支持任何规模的虚拟世界架构。
Kafka在加密交易、市场中作为数据中枢的角色
用户在移动钱包执行比特币交易。实时应用程序监控链下数据、关联数据、在仪表盘中显示并发送推送通知。另外一个完全独立的部门在批处理的过程中回放来自Kafka日志的历史事件,以使用专用分析工具进行合规性检查。
Kafka 生态系统中提供了许多功能,可以将来自区块链和加密世界的数据与来自传统IT的数据一起使用。
4.Kafka可以提供的技术用例
监控区块链基础设施、加密货币和Dapp的健康状况,以避免停机,保护基础设施并使得区块链数据可访问。(基础设施维护)
通过Kafka Stream或ksqlDB进行流处理可以在Defi、NFT等相关交易市场在进行实时数据处理。(链上数据分析)
Kafka作为预言机的集成点:例如从Chainlink 传递到Kafka 再到IT基础设施。
通过 Kafka 主干上的节流和随机数管理来处理背压(在数据流从上游生产者向下游消费者传输的过程中,上游生产速度大于下游消费速度,导致下游的Buffer 溢出),并将事务流式传输到链上。(Gamefi和Socialfi 都会用到)
同时处理多个链:并行监控和关连以太坊、solana、Bsc区块链上的交易(跨链相关)
我们可以看到,未来随着新一代gamefi、defi、socialfi、移动端Dapp的增长,过去仅仅是将链上数据摄取到数据库和数据湖的方法已经不能满足现有新应用的需求了。在架构设计中充分的利用消息中间件的特性,可以满足大部分用户对于实时性、可靠性的需求。
5.加密和Defi世界中Kafka的真实案例
TokenAnalyst : 加密市场的可视化
EthVM:区块链浏览器和分析引擎
Kaleido:用于区块链和智能合约的 REST API 网关
Chainlink:用于将智能合约从区块链连接到现实世界的 Oracle 网络
Token Analyst – 加密市场的可视化
Token Analyst 是一个链上数据分析工具,用于可视化和提供企业级API服务。该项目于2020年5月宣布停止运营,其团队大部分成员加入Coinbase。不过他的案例仍然值得借鉴——其利用Kafka堆栈(Connect、Streams、ksqlDB、Schema Registry)将来自比特币和以太坊的区块链数据与其分析工具集成在一起。
“访问链上数据需要节点,而这并不如人们想象中断那么容易(各个版本和地区之间的数据差异)。此外,另一个挑战是使他们于网络保持同步。为了实现零停机,并且确保最高标准的数据质量和可靠性,我们决定使用 Kafka 和 Confluent 平台。”
Token Analyst 开发了一个名为Ethsync的内部解决方案。每个节点加上 Ethsync 都将数据推送到其对应的 Kafka 主题。如同下图所示,其需要运行多个节点以实现冗余。推送到主题的块更新并且客户端接受为新的有效块的块。但是,由于区块链的性质,可能会发生区块链的分叉(一条替代链变长并导致另一条链失效)。因此,以前有效的块可能会变得无效。(笔者注:这个问题现在的很多项目方也会遇到。)
基于Kafka Streams的区块确认器:为了防止在下游聚合计算中使用无效块,TokenAnalyst开发了一个基于 Scala 中的 Kafka Streams 的块确认器组件。它通过临时保留块来解决重组场景,并且仅在达到一定数量的确认(挖掘该块的子块)时才传播它们。
确认器不仅解决了验证规范链的问题,并且能够通过确认丢弃和已经注册的块,来输出具有有效一次性语义(Exactly-once semantics)的确认块。通过该组件可以使其充分利用容错恢复机制,适用于零停机环境的滚动部署。
EthVM – 区块链浏览器和分析引擎
比特币和以太坊等公共去中心化区块链的美妙之处在于其透明度,防篡改日志使得区块链浏览器能够监控和分析所有的交易。
EthVM 是一个开源的以太坊区块链数据处理和分析引擎,由 Apache Kafka 提供支持。该工具支持区块链审计和决策。EthVM 验证交易和智能合约的执行,检查余额并监控 gas 价格。该基础设施是使用 Kafka Connect、Kafka Streams 和 Schema Registry 构建的。还包括一个客户端可视化块资源管理器。
EthVM使用Kafka的契机来源于Boerge Svingen 在Confluent 博客上发表的一篇名为《在纽约时报上使用 Apache Kafka 发布》的文章,其描述了标志性的纽约时报如何从混杂的 API、服务、生产者和消费者转变为有Kafka驱动的基于日志的架构。
而区块链本质上就是一个不断增长的记录列表,合并成块并且用密码学来链接——用程序员的话说就是链表。在Kafka的术语中,以太坊客户端就是生产者——负责创建日志的新条目。
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 层。
Chainlink – 用于将智能合约从区块链连接到现实世界的 Oracle 网络
Chainlink 是用于将智能合约连接到现实世界的行业标准预言机网络。
“借助 Chainlink,开发人员可以构建混合智能合约,将链上代码与由去中心化 Oracle 网络提供支持的大量安全链下服务相结合。由数十万人组成的全球去中心化社区管理,Chainlink 引入了更公平的合约模型。它的网络目前为去中心化金融 (DeFi)、保险和游戏生态系统等领域的智能合约提供数十亿美元的价值。Chainlink 网络的完整愿景可以在Chainlink 2.0白皮书中找到。”
Chainlink并没有在任何公开的博客文章和会议中讨论其设计架构。我们只能从其招聘人员的工作栈要求中窥见其设计——Chainlink正在从传统的基于时间序列的监控过渡到事件驱动的架构。
5.小结
在这些节点设施服务商出来之前,普通人想要获取链上的数据信息是非常困难的。而现在,任何一个能够上网的人都可以通过区块链浏览器或者链上数据分析工具看见相对实时的区块数据。
然而,能够看见数据和大规模的使用数据是完全不同的概念。
“神祇们不会攀爬世界之树。他们用彩虹桥穿行于几大世界之间。只有神才能用彩虹桥。如果冰霜巨人或者别的巨人试图通过彩虹桥爬上阿斯加德,他们的脚就会被烧伤。”
尽管我们现在有了节点托管、Web3API等服务的帮助,链上和链下之间进行高效实时沟通的成本依然很大。如同北欧神话中的彩虹桥,他依然是某些神祇们的专属通道。**原因就在于链上数据和链下业务之间存在的空白环节。Kafka仅仅只是消息传递的一个环节,在此之间还有数据的实时抓取、清洗和存储。**而过去服务于传统IT业务的中间件、数据库等并不一定完全适用于现有的Web3 IT架构。随着越来越多的企业和业务迈入加密领域,未来也可能会出现一种全新的基于区块链网络的开源中间件和数据分析架构。
我希望有一天,人人都能拥有开启彩虹桥的能力。我们将自由的穿梭在世界之树所缔造的九界之间,与众生灵交流。
参考文献
3.https://www.infoq.com/articles/blockchain-middleware/
4.https://www.confluent.io/en-gb/blog/reliable-fast-access-to-on-chain-data-insights/
5.https://www.bitcoininsider.org/article/66671/ethvm-first-open-source-block-explorer-powered-kafka