首页 > 其他分享 >【ETCD】当客户端从follower节点发起写请求时候,ETCD集群是如何处理此次的写请求呢?

【ETCD】当客户端从follower节点发起写请求时候,ETCD集群是如何处理此次的写请求呢?

时间:2024-12-19 11:01:27浏览次数:5  
标签:事务 请求 写入 follower 节点 Follower ETCD Leader

当客户端从follower节点发起写请求时候,ETCD集群是如何处理此次的写请求呢?
从follow节点发起写请求

目录

1. 客户端发起请求

  • 功能:客户端向ETCD集群中的某个Follower节点发起写请求(通过gRPC端点)。
  • 原因:客户端需要将数据写入ETCD,通常是键值对的形式。
  • 作用:这是整个写入流程的起点,触发ETCD的数据一致性流程。即使请求落到Follower节点,集群内部会确保正确处理。

2. Follower节点转发请求

  • 功能:Follower节点接收到请求后,将其转发至当前集群的Leader节点。
  • 原因:Raft一致性协议要求,只有Leader节点可以处理写入请求,Follower节点只能处理读取请求或转发写入请求。
  • 作用:确保ETCD遵循Raft协议,将写请求交由Leader处理,避免数据冲突。

3. 转发给Leader节点

  • 功能:Follower节点将请求通过内部集群通信转发给Leader节点。
  • 原因:Leader节点是整个Raft集群中负责写入操作的核心节点,只有Leader才能协调数据一致性。
  • 作用:将客户端写请求正确路由到能处理该请求的Leader节点,避免写入失败。

4. Leader节点处理请求

4.1 写入预写日志(WAL)
  • 功能:Leader节点首先将事务数据写入自己的WAL(Write Ahead Log)。
  • 原因:WAL是Raft协议中关键的一环,用于保证在节点宕机时能够恢复未完成的操作。
  • 作用:通过持久化事务数据,确保即使系统崩溃,数据不会丢失,满足可靠性要求。
4.2 发送复制请求
  • 功能:Leader节点通过Raft协议将数据广播给其他Follower节点,请求它们将事务写入各自的WAL中。
  • 原因:Raft协议需要在集群中多数节点都持久化数据后,才能认为事务成功。
  • 作用:确保集群内多数节点拥有该事务的副本,从而提供容错能力。

5. Follower节点持久化数据

  • 功能:Follower节点将接收到的事务数据写入自己的WAL。
  • 原因:WAL是数据一致性的核心部分,所有节点都需要将事务数据持久化到WAL中。
  • 作用:让Follower节点保存事务副本,为Leader确认数据复制成功提供依据。

6. Leader确认复制完成

  • 功能:Leader节点等待多数(通常是集群的多数节点)Follower节点确认已将事务数据写入它们的WAL。
  • 原因:Raft协议要求,只有当集群中超过半数节点持久化数据时,事务才能被标记为提交。
  • 作用:通过多数节点的确认,保证数据在分布式环境中的一致性和容错能力。

7. Leader节点确认提交

  • 功能:Leader节点在满足多数派原则后,将事务标记为“已提交”。
  • 原因:Raft协议设计通过多数派投票机制确保数据提交安全且可靠。
  • 作用:事务一旦提交,集群中的所有节点都必须最终应用该事务,防止数据丢失。

8. Follower节点标记为已提交

  • 功能:Leader节点将提交信息广播给Follower节点,Follower节点将事务标记为“已提交”。
  • 原因:确保集群中的所有节点都知道该事务已经成功提交。
  • 作用:Follower节点同步事务状态,为之后应用事务到实际存储打下基础。

9. 通知etcd服务器应用提交的条目

  • 功能:Leader节点通知etcd服务器将已提交的事务应用到MVCC存储和后端。
  • 原因:WAL仅保证事务持久化,数据最终需要应用到存储引擎才能对外生效。
  • 作用:将已提交的事务应用到实际存储,完成对数据的更新。

10. 应用条目到MVCC存储和后端

  • 功能:etcd服务器将事务数据应用到MVCC存储,并异步同步到BoltDB文件。
    • MVCC存储:多版本并发控制存储,支持高效的并发读写。
    • BoltDB文件:将MVCC存储中的数据异步写入磁盘,确保持久化。
  • 原因:MVCC存储提供高性能的读写能力,BoltDB则提供数据的最终持久化保障。
  • 作用:完成整个写入操作,同时通过异步方式提升性能,避免阻塞写入路径。

11. 返回成功响应

  • 功能:etcd服务器返回成功的gRPC响应给客户端,通知写操作完成。
  • 原因:让客户端知道写入已经成功提交到集群,保证操作的可观测性。
  • 作用:为客户端提供可靠的反馈,标志整个写入流程的结束。

总结

这个过程展现了ETCD在分布式环境中处理写请求的完整流程:

  • 通过Raft协议实现一致性和容错能力。
  • 利用WAL和MVCC存储实现高性能和高可靠性。
  • 异步持久化进一步提高写入效率。

这种设计确保ETCD既能满足高可用性的要求,也能在分布式环境中提供一致性和可靠性。

标签:事务,请求,写入,follower,节点,Follower,ETCD,Leader
From: https://blog.csdn.net/zhangshenglu1/article/details/144579981

相关文章

  • servlet的请求转发和响应重定向
    文章目录1.简介2.请求转发2.1forword的请求转发2.2include的请求转发2.3其他3.响应重定向4.区别5.总结1.简介请求转发(RequestForwarding):请求转发是指服务器端将请求从一个Servlet转发到另一个Servlet、JSP页面或HTML页面,整个过程在服务器内部进行,对......
  • 鸿蒙ArkWeb 跨域请求
    鸿蒙ArkWeb基础-跨域请求ArkWeb内核出于安全考虑,默认限制file协议和resource协议的跨域访问。这意味着,如果Web组件尝试加载来自不同域的file协议或resource协议资源,将会被拦截,从而导致资源无法加载。例如,假设您的Web组件部署在域A上,而您想要加载域B上的本地资源,如图片或脚本文......
  • 操作系统(14)请求分页
    前言    操作系统中的请求分页,也称为页式虚拟存储管理,是建立在基本分页基础上,为了支持虚拟存储器功能而增加了请求调页功能和页面置换功能的一种内存管理技术。一、基本概念分页:将进程的逻辑地址空间分成若干个大小相等的页,同时也将物理内存空间分成若干个大小相......
  • Vue2 应用开发必备技能:构建优雅的 Axios 请求封装模块
    Vue2应用开发必备技能:构建优雅的Axios请求封装模块前言第一步:安装Axios第二步:创建Axios封装模块1.引入Axios2.创建Axios实例3.请求拦截器4.响应拦截器5.导出封装的实例第三步:封装具体接口请求第四步:在Vue组件中使用总结前言在Vue2项目中,数据请......
  • 重复请求的幂等问题
    问题背景某验收系统,客户发起验收流程时,由于前端没有做防重点击的限制,导致申请按钮连续点击了多次,重复发起了多条流程历史逻辑后端为了保证接口幂等,在发起验收流程的代码中加了几层逻辑如下:判断验收记录状态是否为待发起,如果不是,则立刻返回失败发起流程的入口加了一层用户......
  • java如何请求接口然后终止某个线程
    Java请求接口并终止线程在Java开发中,处理多线程操作是常见需求。有时我们需要在请求某个接口后,根据接口返回结果或其他条件,终止某个线程的执行。本文将详细介绍如何在Java中请求接口并终止特定线程的方法。一、请求接口1.1使用 HttpURLConnectionJava提供了多种方式进行HTTP......
  • 实现一个批量请求函数 multiRequest(urls, maxNum)
    在前端开发中,处理多个异步请求的一种常见需求是批量请求,并限制并发请求的数量以避免对服务器造成过大压力或浏览器资源耗尽。你可以使用Promise.all、Array.prototype.map和Array.prototype.reduce等方法来实现一个批量请求函数multiRequest,该函数接受一个URL数组和一个最......
  • 上传文件能使用GET请求吗?为什么?
    在前端开发中,上传文件通常不使用GET请求,而是使用POST或PUT请求。这是因为GET请求和POST/PUT请求在语义和设计目的上存在根本的区别。以下是几个关键原因:请求方法的语义:GET请求:主要用于从服务器获取数据,而不是发送数据。GET请求通常不包含请求体(body),即使有请求体,大多数服务器......
  • springboot/springcloud通过feign调用时请求头加header参数
    在使用springcloud时需要跟踪同一请求的路径,所以需要把请求头沿着请求传递下去,由于使用的时feign,在此记录下找到的两个方法。方法1、直接加RequestHeader下面加粗部分,请求时设置@FeignClient(value="org-service")publicinterfaceOrgFeign{@RequestMapping(method=......
  • 使用AOP防止请求重复提交
    使用AOP防止请求重复提交常见的重复提交场景网络延迟:用户在提交订单后未收到确认,误以为订单未提交成功,连续点击提交按钮。页面刷新:用户在提交订单后刷新页面,触发订单的重复提交。用户误操作:用户无意中点击多次订单提交按钮。防止重复提交的需求幂等性保证:确保相同的请求多次......