
移动端多设备断网协同压测弱网与丢包环境下的数据自愈在本地优先Local-First与 CRDT 协同架构中最严苛的考验是当多个移动设备在经历长达数小时的严重弱网Weak Network、随机 30% 数据丢包、以及频繁的网络断开与重连后多端的数据状态能否 100% 自动收敛并达成确定性一致为了验证「Tide Todo」底层 CRDT 状态机在恶劣网络环境下的鲁棒性我在多台真实设备iPhone 15、iPad Pro、MacBook Air上搭建了一套基于网络链路损伤模拟器Network Link Conditioner的极限压测平台。今天把这次多设备断网协同压测的测试用例设计、实测数据与冲突自愈复盘完整公开出来。-------------------------------------------------------------------- | 弱网与丢包环境下多端 CRDT 数据自愈压测模型 | -------------------------------------------------------------------- | [设备 A (iPhone)]: 模拟 3G 弱网 (延迟 800ms, 丢包率 25%) | | └── 连续执行 20 次待办添加、修改标题与打卡盖章 | | | | [设备 B (MacBook)]: 模拟完全断网 (离线 45 分钟) | | └── 连续执行 15 次待办拖拽排序、批量删除与情绪记录 | | | | [触发全网恢复: 两台设备同时恢复千兆 WiFi 高速连接] | | | | | v (启动 CRDT 增量向量时钟 Vector Clock 同步协议) | | [同步仲裁器: 逐条合并 35 条跨网络冲突 Mutation] | | ├── 0 数据覆写丢失 | | ├── 0 乱序颠倒 (基于浮点索引与字段级时间戳仲裁) | | └── 耗时 160 毫秒内多端数据达到 100% 数学级一致 | --------------------------------------------------------------------1. 极限测试场景一交叉字段并发修改Cross-Field Concurrent Edits场景设定在断网期间用户在 iPhone 上给任务 A 加上了标签#生活同时在电脑上把任务 A 的标题修改为“去海边买新鲜柠檬”。实测结果网络重连后合并算法自动将两端的修改聚合为带#生活标签且标题为“去海边买新鲜柠檬”的完整任务。没有发生任何字段丢失。2. 极限测试场景二并发删除与修改Concurrent Delete vs Update场景设定iPhone 端删除了任务 B而电脑端在离线状态下把任务 B 标记为已完成。仲裁策略在我们的 CRDT 状态机中“删除墓碑Tombstone”拥有最高的终态权重。网络同步后任务 B 被安全移入回收站同时记录了被删除前的最后状态避免了僵尸数据的复活。export function resolveDeleteConflict(item: CrdtTodoState): boolean { // 若墓碑时间戳大于任何更新时间戳则确认物理销毁 return item.isTombstone item.deletedAt item.lastModifiedAt; }3. 压测结论连续执行10 轮极限断网并发压测共计 350 次高冲突操作数据一致性达成率100.0%。数据丢失率0.0%。在极端恶劣环境下依然坚不可摧你的产品才能真正让用户放心地记录下生命中的每一个珍贵瞬间。