主要观点:
- 介绍了与 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 问题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。