Skip to content

17 · Relay Mesh 与共享算力

buzz-relay-mesh 为需要会话归属和跨节点数据通道的能力提供底座:Iroh/QUIC 传输、签名节点身份、Redis readiness directory、租约与 generation fence、可靠 tunnel。当前 Huddle 和部分 Desktop mesh LLM 已接线;更完整的跨 Relay Agent/算力市场仍应视为愿景。

1. 为什么普通 PubSub 不够

Redis PubSub 适合广播事件,不适合“某个有状态 session 只能由一个 runtime 持有”:

  • 音频房间有 peer/jitter/codec 状态。
  • 模型推理有 KV cache、上下文与资源占用。
  • 长连接 tunnel 需要明确 owner 与失败切换。

Mesh 增加了 identity、directory、lease、fence 与 point-to-point transport。

2. 传输层

核心参数:

  • Iroh/QUIC。
  • ALPN buzz/mesh/1
  • wire version 1
  • 单 stream/payload 有边界(可靠 tunnel 消息约 1 MiB,底层 stream 总体上限更高)。
  • 大消息分块,避免一次分配任意长度。

QUIC 提供加密、stream 与 NAT 友好的连接;应用层仍要验证 peer identity、community/session 和 generation。

3. 节点身份与 readiness

每个 mesh runtime 有签名身份和 runtime ID,周期发布 readiness:

text
readiness record {
  node/runtime id,
  endpoint/address,
  capabilities/profile,
  timestamp/expiry,
  signature
}

默认约 15 秒刷新,过期窗口约 3 倍。消费者验证 Relay/节点签名并丢弃过期记录;Redis key 只是发现渠道,不自动可信。

4. Membership 与 failure detection

节点之间维护 membership/gossip,并用 phi accrual suspicion(阈值约 8)判断对端可能失效。phi 不是绝对死亡证明:网络抖动会造成怀疑,因此真正的 session takeover 仍依赖租约过期和 generation,而不是单凭 gossip 删除 owner。

并发双向建连用确定性 tie-break,避免两个节点各保留一条重复连接。

5. Session directory

Redis directory key 按 (community, session) 作用域,记录:

  • owner runtime。
  • lease expiry。
  • monotonic generation。
  • 可选 profile/endpoint。

状态转移:

text
Absent --acquire--> Owned(node A, gen 1)
Owned --renew-----> Owned(node A, gen 1)
Owned --expire/takeover--> Owned(node B, gen 2)
late A renew/send --fence--> Rejected

community 进入 key 和签名上下文,防相同 session UUID 跨租户冲突。

6. Fencing token

只用 TTL 有一个经典漏洞:A 的租约实际过期,但 A 因 GC pause/网络分区不知道;B 接管后 A 恢复并继续写。generation 使下游能比较:

  • B 使用 gen 2。
  • A 的 gen 1 请求被拒绝。

Fence 必须在实际副作用点检查,而不只在 acquire 时检查。Huddle mesh send/renew 代码显式传播 FenceVerdict

7. Reliable tunnel

Tunnel 为跨节点 session 数据提供 request/stream 通道:

  • frame/payload length bound。
  • chunking/reassembly bound。
  • request correlation。
  • lease renewer 监测所有权丢失。
  • cancellation/connection close 传播。

“reliable”指建立在 QUIC stream 上的有序可靠传输,不代表业务操作 exactly-once。断线重试仍需 request ID/幂等语义。

8. Huddle 接线

任意 Relay 接到 join 后查 directory:

  • 若本 node owner,进入本地 room。
  • 若其他 node owner,经 mesh tunnel 转发。
  • owner 失效时申请更高 generation 接管。
  • 旧 node 晚到数据被 fence。

这使客户端不必预先知道房间在哪个 pod,也无需 sticky load balancer 承担唯一正确性。

9. Mesh LLM

Desktop mesh_llm 有 catalog、discovery、coordinator、identity、progress、recovery、transport policy 与 usage 模块;Rust feature mesh-llm 默认关闭,因为会引入 llama.cpp/native 依赖和大量额外 crate。

当前更适合描述为共享计算基础设施与本地试验接线:已有 discovery/transport/recovery 结构,但生产级调度仍需资源证明、模型兼容、隐私、计费、恶意节点、数据驻留和结果验证。

10. 实现、部分实现与愿景

能力状态
节点身份、QUIC transport、readiness、membership已实现基础设施
session lease/generation/fence、reliable tunnel已实现基础设施
Huddle 跨节点 ownership已接线,需规模化运维验证
Desktop mesh LLMfeature-gated / 部分实现
任意 Agent 跨 Relay 市场化调度愿景

11. 安全边界

  • Redis readiness 记录必须验签、验时效。
  • QUIC peer identity 与应用 Relay identity 必须绑定。
  • tunnel frame 必须含 tenant/session/generation 并做长度限制。
  • 远端模型节点看到的 prompt/上下文是高敏数据,传输加密不等于节点可信。
  • takeover 要以 lease + fence 为准,不以网络猜测为准。

12. 源码入口

独立源码研究笔记 · 非 Buzz 官方文档