ETCD(五)写请求执行过程

这篇具有很好参考价值的文章主要介绍了ETCD(五)写请求执行过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写请求过程

客户端执行写请求指令

etcdctl put hello world —endpoints 192.168.1.1:12379

ETCD(五)写请求执行过程
执行流程

  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索引。文章来源地址https://www.toymoban.com/news/detail-420457.html

到了这里,关于ETCD(五)写请求执行过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA使用WebSocket实现多客户端请求

    工作前提:两个服务之间实现聊天通讯,因为介于两个服务,两个客户端 方案1:多个服务端,多个客户端,使用redis把用户数据ip进行存储,交互拿到redis数据进行推送 方案2: 一个服务端,多个客户端,拿到客户端的id和需要推送的id进行拼接存储 此文章使用的是方案2 1. 引

    2024年02月11日
    浏览(32)
  • SpringBoot3 响应式网络请求客户端

     SpringBoot是一个基于Spring的快速开发框架,它可以帮助我们快速构建、部署和运行Java应用程序。HTTP接口是Web应用程序与外部系统进行通信的一种方式,通过HTTP协议,我们可以实现客户端与服务器之间的数据交互。 SpringBoot 整合提供了很多方式进行远程调用 轻量级客户端方

    2024年02月15日
    浏览(21)
  • 客户端请求+返回 服务端之间的请求和返回 实现rpc通信

    背景:         1.无论什么类型的游戏,我们都会有rpc通信的需求。         2.由于客户端直连的是游戏服,如果工会,匹配之类的服务是单独的服务的话,必然要进行游戏服到业务服之间的转发,我们是否需要再转发时单独定义Req和Res就是我们考虑到的需求。         3.在

    2024年01月25日
    浏览(27)
  • 获取客户端请求IP及IP所属城市

    添加pom依赖       dependency             groupIdorg.lionsoul/groupId             artifactIdip2region/artifactId             version2.6.5/version         /dependency public class IpUtil {     private static Searcher searcher;     private static final String DEFAULT_UNKNOWN=\\\"unknown\\\";     private static final int IP_MIN_LENGT

    2024年02月08日
    浏览(34)
  • MYSQL连接报错:客户端不支持服务器请求的身份验证协议;考虑升级MYSQL客户端数据库

    在进行MYSQL数据库连接时,有时候可能会遇到如上所述的错误:“客户端不支持服务器请求的身份验证协议;考虑升级MYSQL客户端数据库”。这个错误通常发生在客户端使用的MYSQL版本与服务器所要求的身份验证协议不兼容的情况下。幸运的是,您可以通过升级MYSQL客户端来解

    2024年02月03日
    浏览(39)
  • QT实现客户端服务器HTTP(get请求、post请求)

    服务器代码如下: QtHttpForS.h QtHttpForS.cpp main.cpp QtHttpForS.ui 客户端代码: QtHttpForC.h QtHttpForC.cpp mian.cpp QtHttpForC.ui 程序运行效果: GET请求: POST请求: POST请求使用postman测试: 注意: 可以发现,在使用postman进行POST请求发送时,服务器接收到的请求头与QTSocket的POST请求的请求头

    2023年04月22日
    浏览(44)
  • 10. Linux下实现简单的http客户端请求

    本文Linux下实现简单的http客户端请求 HTTP(超文本传输协议)是一种用于在网络上进行数据通信的协议。HTTP 协议定义了客户端和服务器之间如何交换信息,包括请求和响应格式、使用的方法、状态码等。 在 HTTP 协议中,资源(Resource)指的是由 URL (统一资源定位符)所标识

    2024年02月16日
    浏览(35)
  • 【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】

    使用Navicat连接时报1251错误,如下图: Navicat是一款流行的数据库管理工具,它能够方便地连接和管理各种数据库。然而,有时候当我们尝试连接MySQL数据库时,可能会遇到错误1251:客户端不支持服务器请求的身份验证协议的问题。这个问题可能会让一些用户感到困惑,影响到

    2024年02月13日
    浏览(28)
  • TCP/IP客户端和服务器端建立通信过程

    使用Qt提供的类进行基于 TCP 的套接字通信需要用到两个类: QTcpServer 类用于监听客户端连接以及和客户端建立连接,在使用之前先介绍一下这个类提供的一些常用API函数: 构造函数 给监听的套接字设置监听 listen() 函数 在代码中 通过启动监听按钮 设置监听 参数: address :

    2024年02月07日
    浏览(43)
  • 使用Http Interface客户端解析text/html类型请求

    前言 Spring6和Spring Boot3的正式发布也有一段时间了,最低支持的java版本也是直接跳到了17。而且最近java21也出来了,作为一个javaer,你不会还在坚守java8吧? Http Interface是Spring6新推出的一个声明式http客户端,写法有点像Retrofit。最近也是在一个新的项目里引入了Http Interface,但

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包