开发者社区> 问答> 正文

在Martin Kleppmann提到的案例中,存储系统是如何通过Token机制来防止数据不一致的?

在Martin Kleppmann提到的案例中,如果Client1在GC后尝试写入数据,存储系统是如何通过Token机制来防止数据不一致的?

展开
收起
萝卜丝丸子 2024-08-28 10:54:42 15 0
1 条回答
写回答
取消 提交回答
  • 当Client1首次获取锁时,锁服务为其分配了一个Token值(假设为33),Client1在尝试写入数据时会将这个Token值作为请求的一部分发送给存储系统。然而,在GC期间,Client1的锁可能被释放,Client2随后成功获取锁并获得了一个新的、更大的Token值(假设为34)。Client2写入数据时,存储系统会更新其内部记录的Token值为34,并允许该写入操作。当Client1的GC完成后,如果它尝试再次写入数据,它会携带原始的Token值33。此时,存储系统会检查Client1的Token值是否小于或等于当前记录的Token值(即34),由于33小于34,存储系统会拒绝Client1的写入请求,从而防止了数据不一致的发生。image.png

    2024-08-28 15:17:25
    赞同 108 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载