当前位置: 首页 > article >正文

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索引。


http://www.kler.cn/a/14089.html

相关文章:

  • 通话蓝牙耳机什么牌子好?通话效果好的无线蓝牙耳机
  • leetcode 696. 计数二进制子串
  • Http常用面试知识总结
  • 打印完全数
  • Verilog阻塞与非阻塞赋值详解
  • 春秋云镜:CVE-2022-25488(SQL报错注入)
  • 【Java】关于物理存储方式有几种方式的一些讨论
  • 【hello Linux】进程程序替换
  • 两大消息爆出,币圈正在响应全球“去美元化”行动
  • python算法中的深度学习算法之前馈神经网络(详解)
  • 制造型企业为何需要MES管理系统,企业怎样选择合适的MES
  • Linux_红帽8学习笔记分享_7(Crontab计划任务+NTP时间同步服务器)
  • 【Python】matplotlib设置图片边缘距离和plt.lengend图例放在图像的外侧
  • 一级结构规范 合集
  • 【分布式搜索引擎02】
  • 【设计模式】23种设计模式之结构型模式
  • Hi3861 硬件 i2c 驱动 oled
  • MCAL知识点(二十二):LIN MCAL驱动配置详解
  • 2023年工商管理在职研究生择校、择专业指南
  • day18_集合