正确消耗喷气式激流消防水带

主要观点:

  • 介绍了与 jetstream 合作的一些经验,对制作“采样”应用和需要可靠接收火 hose 中每个事件的应用视图有不同建议。
  • 详细阐述了 jetstream 相关特性及问题,如time_us属性、事件可能的重排序、可能错过事件、重连时事件可能丢失和重新排序、过载实例上连接可能突然关闭等。
  • 给出结论,如使事件处理具有幂等性、考虑自我托管 jetstream 或直接使用中继等。

关键信息:

  • 不同类型应用对本文内容的需求,“采样”应用可不读,制作应用视图可参考。
  • time_us属性是 jetstream 本地添加,不同服务器的相同事件time_us不同,不可用于同步。
  • 事件在一般情况下可能重排序,同一仓库内事件按顺序,跨仓库可能出现奇怪顺序。
  • 无法检测 jetstream 是否丢失事件,本地运行易见事件丢失情况。
  • 重连时 jetstream 可能丢失和重新排序事件,存在数据 race 问题。
  • 过载实例上连接可能突然关闭,与上述事件问题相关。
  • 结论包括使事件处理幂等、自我托管或使用中继等,同时提及 jetstream 的优缺点。

重要细节:

  • time_us在事件处理后期添加,测量其与本地时钟对比主要是测量网络延迟和时钟偏差。
  • 同一 jetstream 实例的time_us应单调递增,可安全递增游标重连,但 readme 未明确说明。
  • 并行工作调度器处理事件可能导致事件重排序,同一仓库内事件顺序一致,跨仓库可能不同。
  • 最近关于包含中继序列号的提案被拒绝,jetstream 事件与中继事件非 1:1 对应。
  • 有测试可检测 jetstream 游标切换问题,过载实例连接可能突然关闭可能与上述问题相关。
  • 中继提供序列号可用于跟踪事件,且包含数据用于加密验证,但带宽和 CPU 消耗较大。
  • 自我托管 jetstream 带宽需求低,全 atproto 中继流可能有意外情况,如序列可能的 off-by-one 问题。
阅读 7
0 条评论