技术分享|Flow接入节点(Access node)重构介绍

原文链接:https://github.com/onflow/flow/blob/master/specs/access-node-architecture/index.md

翻译:Maris ,Flow中文社区技术大使。转载请备注来源。

概要

Flow 接入节点(Access node)自上线后没有发生大的变化,其作为 Flow 通用网关的目标已经达成。即便如此,有明显迹象表明 Flow 的这一部分的设计扔需要持续的改进,以更好地支持可扩展性,并提高服务和代码的模块化设计水平。此外,这也是flow愿景的一部分,即设置无权限和无抵押的节点类型,让构建者可以更加便捷、低门槛的访问Flow。

在本文档中,我们建议重新构建访问节点以启用无权限操作。我们利用 DPS(流数据供应服务)进行状态索引和本地脚本执行,大大减少了执行节点的负载。提议的更改还可以显着改进 Flow 操作的水平可扩展性。

这种新架构将现有的访问节点模块拆分为以下组件:

  • Flow 区块链数据服务(Flow Blockchain Data Service),封装了与 Flow 网络的所有直接交互和参与状态同步协议,并提供 API 允许辅助组件查询区块链状态并订阅更新。

  • Flow数据供给服务(Flow Data Provisioning Service ,DPS) ,使用来自 Flow Flow 区块链数据服务的执行状态更新来构建完整的执行状态索引,从而能够在任意块高度上快速执行本地脚本。

  • Flow API 服务,提供一种用户友好的方式来查询区块链状态,并将交易发送到网络。

Flow API 服务和 DPS 设计为可选的辅助组件,在部署基础架构时,为它们的配置使用提供多样和灵活的选择。

总体目标

  • 将现有的 Access Node 代码完全分离为 un-stake Observer Service和 staked Access Node。

  • 将Access API从Access Node中分拆成独立模块,设计为独立的进程/服务,它将能处理任何Blockchain Data Service. 我们将其称为Flow API Service。

  • 封装了通过共识追随者和执行状态同步提供的Blockchain Data Service实时同步系统。通过Protocol API和State Streamer接口,可以对对这些状态进行访问。

  • 该State Streamer接口是一个通用组件,它可以允许任何消费者,例如DPS访问由Blockchain Data Service.

不考虑的目标点

  • 不涉及长期历史访问(请参阅其他问题)

  • 不解决公共节点的运营问题(速率限制、访问控制等)

目标要点

  • Blockchain Data Service处理从对等网络接收的原始协议和执行状态数据。 这些状态数据,通过Protocol API以及流式接口,发送给调用者。

  • 使用State Streamer Registration API和State Streamer客户端访问Blockchain Data Service状态。

  • DPS索引执行状态,实时的通过State Streamer进行传递。这些索引状态通过DPS API来响应脚本调用请求.

构架设计

详细设计

到目前为止,接入节点已经提供了以下内容:

  • 作为 Flow 网络中的质押节点

  • 基于协议状态参与质押gossip网络

  • 处理来自公共调用者的实时访问 API 请求

    • 执行基本请求验证

    • 将脚本执行委托给上游执行节点

    • 将交易委托给收集节点以进行网络处理

脚本委派EN执行是一个明显相对简单的成果,它限制了访问节点的可扩展性并影响了事务吞吐能力。此外,Access API 请求处理的扩展受到 Access Node 内代码紧密耦合的限制。DPS 的引入向可查询的本地持有状态迈出了第一步,该状态可用于扩展 Access Node。随后,执行状态同步提供了一种去中心化的方式来在网络上共享执行状态。

■ 权责修改

区块链链的同步管理,主要依赖于Blockchain Data Service提供的一套统一的功能,这些功能是Access Node基于Observer Service构建的,并且可以用作可信链状态的独立模块。

区块链数据服务

  • 遵循协议共识,执行状态同步

  • 服务于State Streamer API

  • 服务于Protocol API

新Access Node版本基于上述原始节点功能设计:

接入节点

  • 作为 Flow 网络中的质押节点参与

  • 随时跟踪协议状态和执行数据

  • 接受新交易,验证它们,并将它们转发到收集节点

  • 连接公共质押 libp2p 网络

    • 通过公开状态同步和执行数据同步协议的公共 libp2p 网络,提供对 Flow 区块链协议和执行状态的访问

    • 将来自质押网络的消息子集,中继到公共网络

Observer Service的命名也体现了其网络非参与的角色。

观察节点服务

  • 作为公共数据的消费者参与 Flow 网络,无需质押或许可

  • 随时跟踪协议状态和执行数据

  • 接受新交易,并进行验证,并将交易转发给Access Nodes

FLOW API 服务

  • 部署为独立服务

  • 提供外部 Flow Access API(gRPC/REST)

  • 如果DPS已部署,则查询DPS API执行状态查询,否则返回错误

  • 查询运行协议状态Protocol API的节点上的下游Blockchain Data Service

  • 代理发送交易请求

    • Access Nodes代理事务到下游Protocol API

    • Observer Services代理事务到下游Access Node

DPS提出了两个有限的更改:将共识追随者提取到Blockchain Data Service. 然后弃用基于 GCP 的执行状态同步,并将所有链同步逻辑切换到State Streamer.

数据供应服务 (DPS)

  • 部署为一组独立的服务

  • 通过State Streamer API连接到Access Node或Observer Service

  • 基于State Streamer API订阅协议和执行状态更新

状态流和流注册 API

  • 提供用于订阅协议和执行状态更新的 API

  • 提供 1:1 的数据服务(可能是 gRPC over web sockets)

  • 许可范围(不打算向公众公开)

  • 提供抽象层,因此客户端无需直接与 Flow 网络交互

  • API 通过Execution Data Module和的数据Protocol State Module进行数据对接

重构详细构架图

初始点

重构步骤 1

非结构性考虑:

  • 形式化 State Client 和 State API 规范

  • 根据配置声明,在引导程序中建立正确的 libp2p 网络Access Node初始化Observer Service

区块链核心服务构建

构建Flow API服务

附属问题

  • 历史数据访问问题:

    • 虽然此新架构不支持在此初始修订版架构中直接访问历史状态,但我们正在与社区合作伙伴协作来实现这一目标。

猜你喜欢

转载自blog.csdn.net/weixin_57551966/article/details/125396062
今日推荐