AO 推出运行在 HyperBEAM 上的去中心化索引器 copycat@1.0,旨在解决 Arweave 网关在去缓存模型下的数据检索挑战。它支持有界深度的递归索引,能够高效处理多层嵌套的 Bundle 数据,并引入了预过滤机制和内存安全限制,显著提升了 AO 数据协议的发现效率与系统稳定性。
在没有缓存的情况下,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 升级之前,索引器在性能和覆盖范围上都存在瓶颈:
对于 AO 来说,呈现 L3 Dataitem(L2 Bundle 内部的数据)是最大的障碍。发布到 AO 的数据通常呈现如下形态:
当索引不够深入时,有效的 AO 相关项目永远不会被呈现,某些网关读取会返回空结果。
遗留网关硬件模型的要求意味着,如果没有企业级机器,很难运行高性能网关。遗留网关不直接从 Arweave 节点读取,而是负责维护自己的缓存。一个单独的真相来源(source of truth)也会在下游留下漏洞,以防网关不稳定。
通过使用 Arweave 节点作为真相来源,新的由 HyperBEAM 驱动的网关模型运行起来更轻便,并能与网络最低层的矿工直接同步。在更广泛的 HyperBEAM 堆栈中,copycat 通过使嵌套 Bundle 遍历具有选择性、有界性以及在根偏移量丢失时可恢复,帮助填补了 cacheless 模式产生的索引空白。
Copycat 现在支持 id=... 请求,可以递归索引嵌套 Bundle,直到达到可配置的安全深度上限:
~copycat@1.0/arweave&id=<TXID>&mode=writedepth=safe_max(id=... 的默认值)解析为配置的递归上限depth=N 会被限制在该上限内底层原理:
copycat_depth_recursion_cap => 6这使我们能够确定性地控制索引潜入的深度,即使是在异常的嵌套结构上。它还通过允许遍历到配置的最深深度,直接解决了旧的嵌套 AO-bundle 遗漏问题。
新的 id=... 路径在下载完整 Bundle 字节之前应用轻量级的 L1 标头过滤器:
include-owner,exclude-ownerinclude-owner-alias,exclude-owner-aliasneo-bundler,turbo)include-tag=Key:Value,exclude-tag=Key:Value由于过滤检查发生在完整 Bundle 处理之前,不合格的根会被提前且低成本地跳过。
所有者别名可以在选项中预先配置并在请求时解析:
add_owner_alias(Address, Alias, Opts)这减少了每个请求的摩擦,并避免了热路径(hot paths)中重复的规范化工作。
基于 ID 的索引依赖于 L1 根的本地偏移量元数据。如果缺失,copycat 现在可以从网络回填并继续:
query-l1-offset=true/arweave/tx/<TXID>/offset,写入本地偏移量,重试查找这消除了一个常见的操作死胡同,即已知的 L1 根甚至无法开始索引,因为其本地偏移量元数据尚未预先植入。
请求流专为效率而设计:
昂贵的完整 Bundle 读取被推迟到候选者通过每个低成本门控之后。
如果 Bundle 的 L1 有效载荷超过配置的上限,则会跳过该 Bundle:
copycat_memory_cap => 6 * 1024 * 1024 * 1024(目前默认为 6GB)set_memory_safe_cap/2 进行运行时覆盖选择 6GB 默认值是为了匹配在实际 Bundler 流量分布中观察到的上限,并在高并发下保持处理安全。
深度默认为 safe_max,并受递归上限(copycat_depth_recursion_cap,默认 6)限制。这使得最坏情况下的嵌套遍历保持在有界且可预测的范围内。
此更新还将目标深度应用到了区块处理中。具体而言:
depth <= 2:轻量级基于标头的索引路径depth > 2:加载 L1 字节并在请求时向更深处递归这为常见的索引保留了快速路径行为,同时仅在明确请求时启用更深层次的索引。
对于 AO 基础设施,改进后的索引器允许操作员直接按目标 L1 根索引数据并追踪到任意深度。这意味着更高的选择性、更少的 IO 浪费、更安全的资源上限,以及对索引内容和时间的更好控制。
- 原文链接: x.com/aothecomputer/stat...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!