ETCD(五)写请求执行过程

写请求过程

客户端执行写请求指令

etcdctl put hello world —endpoints 192.168.1.1:12379

在这里插入图片描述
执行流程

  1. 首先客户端通过负载均衡选择一个etcd节点发起gRPC put方法调用;
  2. 服务器收到请求后经过gRPC拦截器、Quota模块校验,进入KV Server模块;
  3. KVServer模块会根据请求方法,发起对应的API请求给Raft模块,这里是PUT api;
  4. Raft模块会做执行一些集群操作处理,只有leader节点能处理写请求,leader节点首先将数据持久化到WAL日志中,并且状态变成已提交;
  5. 其他follower会同步WAL日志;
  6. 各个节点的Apply模块会异步将数据更新在状态机中(boltdb).

etcd还有个buffer模块,可以保存暂未提交的数据,此时可能boltdb里面没有,但是在buffer里面可以提前拿到。可以用来提高并发效率。

Quota模块

该模块主要是做一个大小检查,校验现在的db大小还能不能保存处理该写请求的结果。超过了会有报警。

KVServer模块

KV模块主要有两个功能:

  1. 打包请求提案:将请求根据API的不同打包发给Raft模块。
  2. Preflight Check(限速、鉴权、检查):
  • 限速

    如果Raft模块已提交索引(commit index)超过应用到boltdb中的索引(applied index)5000,就会返回错误给client。

  • 鉴权

    如果使用到了用户权限功能,就会在KVServer模块开启鉴权操,判断该请求是否有权限操作。

  • 大包检查

    判断是否写入的包大小超过了限定大小(1.5M大小)。超过了会返回错误信息给客户端。

WAL模块

会将需要修改的数据内容持久化到WAL日志文件中,Leader也会把数据内容、leader任期号、已提交索引广播给各个follower节点。

WAL中还有一个consistent index索引是用来确保数据一致性的关键字段。

consistent index 是一个单调递增的整数,用于表示 Raft 日志中的一条记录。它在 etcd 集群中的每个节点上都是唯一的。当 etcd 集群中的一个节点收到客户端的读请求时,它会先检查自己的 consistent index 与集群中其他节点的 consistent index 是否一致。如果一致,说明该节点的数据是最新的,可以直接返回给客户端。如果不一致,说明该节点的数据可能已经过时,需要先从其他节点同步数据,然后再返回给客户端。

客户端重启恢复,确保数据一致、幂等性、提案重复问题都要通过consistent index来保证。

Apply模块

当一半以上的节点持久化WAL日志后,leader就会将该请求提案状态设置为已提交状态。leader节点的apply模块会异步将WAL日志应用到状态机。follower节点apply模块会将WAL日志持久化到boltdb模块。同时更新applied index索引。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aries_Ro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值