AO推出去中心化超级索引器copycat@1.0

AO 推出运行在 HyperBEAM 上的去中心化索引器 copycat@1.0,旨在解决 Arweave 网关在去缓存模型下的数据检索挑战。它支持有界深度的递归索引,能够高效处理多层嵌套的 Bundle 数据,并引入了预过滤机制和内存安全限制,显著提升了 AO 数据协议的发现效率与系统稳定性。

Image

在没有缓存的情况下,AO 需要一个能够按需呈现任何数据,并以比以前快几个数量级的速度索引整个 weave 的索引器。进入 ~copycat@1.0。遗留的网关堆栈最近已迁移到由 HyperBEAM 驱动的新 arweave.net。这最终通过直接将数据从 Arweave 节点路由到最终用户实现了网关的去中心化,并使得在低端硬件上运行 Arweave 网关变得更加可行,不再需要数 TB 的磁盘空间来进行乐观缓存。

然而,新的 cacheless 模式意味着没有易于理解的数据主列表来提供给浏览器、开发者工具,以及最重要的 AO 本身。AO 对嵌套 Bundle 的依赖需要一个超优化的索引层,该层可以爬取到任何深度并递归地查找数据。

我们没有建立对中心化服务的依赖,而是扩展了 HyperBEAM 内置的 copycat 索引器,以递归地索引嵌套的 Arweave Bundle。新改进的 copycat 是一个运行在 HyperBEAM 内部的、原生且针对性能进行了优化的有界深度递归索引器。

在更广泛的 HyperBEAM 网关堆栈中,copycat 充当索引层,使嵌套的 Arweave 数据(嵌套 Bundle)变得可发现,例如 AO 数据协议。它本身不提供网关响应,但更好的嵌套索引意味着其下游读取缺失更少,AO 重型数据延迟也更短。

该功能已在 PR #734 中发布到生产环境:feat: add filtered L1 Bundle copycat depth-aware indexing by ID。

为什么这解决了后缓存时代的索引问题

在这次 copycat 升级之前,索引器在性能和覆盖范围上都存在瓶颈:

  • 在负载下速度较慢,因为偏移量(offset)计算可能会触发大量的块(chunk)请求。
  • 它实际上仅索引了 L1 Bundle 及其直接的 Dataitem。
  • 它无法可靠地遍历深度嵌套的 Bundle 树。

对于 AO 来说,呈现 L3 Dataitem(L2 Bundle 内部的数据)是最大的障碍。发布到 AO 的数据通常呈现如下形态:

  • L1 Bundle
  • 嵌套在 L1 内部的 L2 Bundle
  • L2 Bundle 内部的 Dataitem

当索引不够深入时,有效的 AO 相关项目永远不会被呈现,某些网关读取会返回空结果。

这将实现什么

不再依赖乐观缓存

遗留网关硬件模型的要求意味着,如果没有企业级机器,很难运行高性能网关。遗留网关不直接从 Arweave 节点读取,而是负责维护自己的缓存。一个单独的真相来源(source of truth)也会在下游留下漏洞,以防网关不稳定。

通过使用 Arweave 节点作为真相来源,新的由 HyperBEAM 驱动的网关模型运行起来更轻便,并能与网络最低层的矿工直接同步。在更广泛的 HyperBEAM 堆栈中,copycat 通过使嵌套 Bundle 遍历具有选择性、有界性以及在根偏移量丢失时可恢复,帮助填补了 cacheless 模式产生的索引空白。

带有有界递归的直接基于 ID 的索引

Copycat 现在支持 id=... 请求,可以递归索引嵌套 Bundle,直到达到可配置的安全深度上限:

  • ~copycat@1.0/arweave&id=<TXID>&mode=write
  • depth=safe_maxid=... 的默认值)解析为配置的递归上限
  • 显式的 depth=N 会被限制在该上限内

底层原理:

  • 默认递归上限为 copycat_depth_recursion_cap => 6
  • 深度 1 索引 L1 根下的一层
  • 更深层次通过内存中的嵌套 Bundle 后代进行递归

这使我们能够确定性地控制索引潜入的深度,即使是在异常的嵌套结构上。它还通过允许遍历到配置的最深深度,直接解决了旧的嵌套 AO-bundle 遗漏问题。

在有效载荷展开前的 L1 预过滤

新的 id=... 路径在下载完整 Bundle 字节之前应用轻量级的 L1 标头过滤器:

  • 所有者过滤器:include-ownerexclude-owner
  • 所有者别名过滤器:include-owner-aliasexclude-owner-alias
  • 支持以逗号分隔的别名(例如 neo-bundler,turbo
  • 标签过滤器:include-tag=Key:Valueexclude-tag=Key:Value

由于过滤检查发生在完整 Bundle 处理之前,不合格的根会被提前且低成本地跳过。

基于别名的所有者路由

所有者别名可以在选项中预先配置并在请求时解析:

  • add_owner_alias(Address, Alias, Opts)
  • 请求可以使用别名过滤器,而不是重复原始地址

这减少了每个请求的摩擦,并避免了热路径(hot paths)中重复的规范化工作。

针对缺失本地 L1 偏移量的可选网络恢复

基于 ID 的索引依赖于 L1 根的本地偏移量元数据。如果缺失,copycat 现在可以从网络回填并继续:

  • 请求标志:query-l1-offset=true
  • 行为:查询 /arweave/tx/<TXID>/offset,写入本地偏移量,重试查找

这消除了一个常见的操作死胡同,即已知的 L1 根甚至无法开始索引,因为其本地偏移量元数据尚未预先植入。

性能和资源配置文件的改进

1. 过滤优先执行避免了不必要的大量读取

请求流专为效率而设计:

  1. 解析偏移量并获取轻量级 TX 标头。
  2. 应用所有者/标签包含和排除过滤器。
  3. 验证 TX 是否为 Bundle 类型。
  4. 强制执行内存安全上限。
  5. 只有在此时才加载完整字节并进行递归。

昂贵的完整 Bundle 读取被推迟到候选者通过每个低成本门控之后。

2. 内存使用受可配置的安全上限约束

如果 Bundle 的 L1 有效载荷超过配置的上限,则会跳过该 Bundle:

  • copycat_memory_cap => 6 * 1024 * 1024 * 1024(目前默认为 6GB)
  • 通过 set_memory_safe_cap/2 进行运行时覆盖

选择 6GB 默认值是为了匹配在实际 Bundler 流量分布中观察到的上限,并在高并发下保持处理安全。

3. 深度控制防止失控的递归成本

深度默认为 safe_max,并受递归上限(copycat_depth_recursion_cap,默认 6)限制。这使得最坏情况下的嵌套遍历保持在有界且可预测的范围内。

4. Block 模式现在也获得了深度感知行为

此更新还将目标深度应用到了区块处理中。具体而言:

  • depth <= 2:轻量级基于标头的索引路径
  • depth > 2:加载 L1 字节并在请求时向更深处递归

这为常见的索引保留了快速路径行为,同时仅在明确请求时启用更深层次的索引。

对 AO 及其他方面的影响

对于 AO 基础设施,改进后的索引器允许操作员直接按目标 L1 根索引数据并追踪到任意深度。这意味着更高的选择性、更少的 IO 浪费、更安全的资源上限,以及对索引内容和时间的更好控制。

  • 原文链接: x.com/aothecomputer/stat...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
aothecomputer
aothecomputer
江湖只有他的大名,没有他的介绍。