问答

Raft算法以超半数写入即确认保存成功, 那如果访问的正好是没写入

作者:admin 2021-04-22 我要评论

假设有A, B, C, D, E 5个节点(当前状态都是x), 客户端发送一个状态更新请求 x-y, 写入了A, B, C三个节点, 然后被确认保存了(A, B, C都committed). 如果在D, E还...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

假设有A, B, C, D, E 5个节点(当前状态都是x), 客户端发送一个状态更新请求 x->y, 写入了A, B, C三个节点, 然后被确认保存了(A, B, C都committed).

  1. 如果在D, E还未同步到y的时候(D, E中没有uncommited的状态), 客户端去D拿状态了, 此刻D的状态还是x, 这时候怎么保证一致性?
  2. 如果D中的y状态尚处于uncommitted, 客户端去D拿状态了, 此时又是怎么处理?
加两个问题:
3 . A是Leader, 5个节点的数据是: A(0), B(0), C(0), D(0), E(0);
写入3并确认, 节点: A(0, 3), B(0, 3), C(0, 3), D(0), E(0);
如果此时A挂了, 在B, C, D, E中重新选举, 那么D, E会成为新Leader吗? 如果E成为了Leader, E的数据并不全, 怎么办?

4 . A是Leader, 5个节点的数据是: A(0), B(0), C(0), D(0), E(0);
写入3并确认, 节点: A(0, 3), B(0, 3), C(0, 3), D(0, 3-uncommitted), E(0, 3-uncommitted);
如果此时A挂了, 那么D, E会成为新Leader吗? 如果E成为了Leader, E还有一条uncommitted的数据怎么处理?

###

Raft 是个强 Leader 模型,只由 Leader 处理客户端请求,就算客户端连接了 Follower,Follower 也会把请求转发给 Leader 处理。

Raft 论文 5.1 节:

The leader handles all client requests (if a client contacts a follower, the follower redirects it to theleader).

第 3 个问题:D、E 不会成为 Leader,因为它们的日志比 B、C 的日志更旧,B 和 C 不会投票给 D 和 E。看最后一句:
image

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Raft算法以超半数写入即确认保存成功,

    Raft算法以超半数写入即确认保存成功,

  • react项目中使用axios中post请求问题。

    react项目中使用axios中post请求问题。

  • 多维数组包含对象如何批量修改属性值内

    多维数组包含对象如何批量修改属性值内

  • nestjs使用websocket,浏览器一直发送请

    nestjs使用websocket,浏览器一直发送请

腾讯云代理商
海外云服务器