I3.10.4reconnect mass conflict设计

长期离线积累的本地变更在重新联网时可能引发大规模冲突

别名: 长期离线 · 重连冲突爆炸 · sync storm · 一周后同步

概念解释

离线不是几分钟的缝,而是一天、一星期、一次旅行。本地权威在这段时间里正常工作,改动在磁盘上越积越厚。重新联网的那一刻,这些改动与云端和其他设备上同期发生的改动对撞,冲突数量从「偶尔一句」变成「一整本对不上」。大规模冲突是长期离线的结构后果,不是同步实现的偶然 bug。

这条要人在重连前看见这场对撞的规模,并有办法按批处理,而不是让同步在沉默中重放几百次拒绝。

机制

冲突概率大致随两边独立变更的集合大小上升。短离线,两边各改几处,交集小。长离线,两边都把文档当自己的真来用,交集变成大面积重叠:同一段落、同一任务、同一组权限。重连把时间压缩成一次交换,所有重叠同时变成冲突事件。人的处理带宽是一件一件看,系统的到达带宽是一齐涌入。不匹配就会:要么自动取一造成静默大面积丢失,要么弹一百个对话框把人赶跑。

旅行场景还叠了时钟和意图老化。一周前的本地决定可能已经被本人在另一台在线设备上改过;重连时「本地真」并不等于「人现在还想要的真」。大规模冲突因此不仅是合并问题,是过期意图与现行意图的对质。没有预览,重放会把过期意图重新激活。

边界

单人单设备、云端在离线期间没有任何写入,重连是单向上传,冲突规模为零,只需一份待发送摘要。自动可合并的正交改动(一人改样式、另一人加附件)不应计入「需要人看的大规模」。真正的爆炸发生在同一语义单位被两边都当正文改过。备份导入、设备迁移会人为制造「长期离线」——那台老电脑上的仓库突然连上,效果相同。只读离线没有本地变更可爆发。冲突若被加密到当前用户无法阅读,大规模处理会变成不可操作;至少要能按对象列出「这一份对不上」,即使看不了内容。

怎么落地

  • 重连先做一次只读预览:多少对象将写入、多少将冲突、冲突清单可点开。不要直接重放。
  • 提供按批策略:全部保留本地、全部接受远端、逐项处理。默认不要静默重放。
  • 对明显过期的本地意图(本人已在其他设备上改过同一处)单独标出来,避免一周前的草稿覆盖今天的定稿。
  • 验证:设备 A 离线七天改二十处,设备 B 在线改其中十二处。A 重连。若没有任何预览、文档在几秒内变成某一侧的二十处、另一侧的劳动找不到,就是大规模静默覆盖。若弹出二十个互不相连的对话框且无法跳过,就是把规模丢给人。合格形态:一张清单,十二处标成冲突,八处自动进入,人可以从清单开始。

延伸

  • 同组I3.10.1 本地优先架构把本地存储作为权威副本,网络同步是补充而非前提 · I3.10.2 本地优先能让核心操作在完全无网络时依然可用而不仅是可查看 · I3.10.3 本地与云端的最终一致性需要用户能理解的收敛过程而非黑箱
  • 相邻I3.04 同步冲突 · I3.11 同步冲突与合并
  • 站内检索reconnect conflict · sync storm · long offline

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/I3.10.4