ETCD(五)写请求执行过程

简介: 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索引。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
并行计算 开发工具 C++
无所不谈,百无禁忌,Win11本地部署无内容审查中文大语言模型CausalLM-14B
目前流行的开源大语言模型大抵都会有内容审查机制,这并非是新鲜事,因为之前chat-gpt就曾经被“玩”坏过,如果没有内容审查,恶意用户可能通过精心设计的输入(prompt)来操纵LLM执行不当行为。内容审查可以帮助识别和过滤这些潜在的攻击,确保LLM按照既定的安全策略和道德标准运行。 但我们今天讨论的是无内容审查机制的大模型,在中文领域公开的模型中,能力相对比较强的有阿里的 Qwen-14B 和清华的 ChatGLM3-6B。 而今天的主角,CausalLM-14B则是在Qwen-14B基础上使用了 Qwen-14B 的部分权重,并且加入一些其他的中文数据集,最终炼制了一个无内容审核的
无所不谈,百无禁忌,Win11本地部署无内容审查中文大语言模型CausalLM-14B
|
2月前
|
机器学习/深度学习 人工智能 API
AI 项目开发:零基础快速使用 Python 调用大模型 LLM API
在 AI 重塑行业的今天,掌握 大模型(LLM)开发技能是核心竞争力。本文作为快速 Python AI 教程,将带你从零开始,用 Python 代码完成对全球主流 AI 大模型(GPT-4o/Claude)的 API 调用。我们将快速让你了解 LLM API 原理,助你低成本快速构建 AI 系统。
858 0
|
10月前
|
缓存 前端开发
如何使用 HOC 来增强组件的功能?
如何使用 HOC 来增强组件的功能?
1750 74
|
存储 SQL 关系型数据库
MySQL存储过程与触发器:提升数据库操作效率与数据一致性
本文深入探讨了MySQL数据库中的存储过程与触发器,通过丰富的代码示例,详细介绍了存储过程的定义与调用、参数与变量的应用,以及触发器的创建、使用和实际案例。存储过程作为预定义的一组SQL语句,能够提高数据库操作的效率,实现数据逻辑和复杂计算。同时,触发器作为在特定事件触发时自动执行的SQL语句,能够保障数据一致性和逻辑完整性。通过代码实例,读者将了解如何创建、调用存储过程,如何利用参数和变量进行数据处理,以及如何创建触发器并应用于实际场景。这些技术将使读者能够在数据库管理中更高效地进行操作和保障数据的完整性,为应用程序提供可靠的数据支持。
1443 0
|
SQL 关系型数据库 数据库
使用 PostgreSQL 和 Python 实现数据库操作
【10月更文挑战第2天】使用 PostgreSQL 和 Python 实现数据库操作
|
存储 负载均衡 算法
ETCD(四)读请求处理过程
ETCD(四)读请求处理过程
566 0
|
缓存 负载均衡 应用服务中间件
Nginx 代理管理器强势登场!轻松设置反向代理,为你的网络安全与高效护航,快来探索!
【8月更文挑战第23天】Nginx 代理管理器(NPM)是一款强大的工具,用于简化反向代理的设置流程。反向代理能隐藏后端服务器的真实IP,提升安全性,实现负载均衡与缓存等功能。用户需先安装Nginx 代理管理器,然后通过其Web界面添加代理主机,指定代理名称、协议类型、服务器地址及端口等信息。对于HTTPS协议,还需上传SSL证书/密钥。完成设置后,可通过浏览器测试反向代理是否正常工作。Nginx 代理管理器还支持高级特性,如负载均衡、缓存及访问控制等。
550 1
|
Kubernetes 安全 JavaScript
Docker 与 Podman:探索用于现代 Web 开发的容器技术
在软件开发中,Docker 和 Podman 作为主流容器化技术,各具特色。本文深入对比两者优缺点,探讨其实用场景与部署Web应用的最佳实践。Docker 凭借成熟生态和跨平台能力引领潮流;Podman 以无守护进程架构提升安全与效率。通过具体示例展示如何构建和运行Node.js与Angular应用,帮助读者理解核心命令与配置要点。无论是在开发环境还是生产部署,选择合适的工具能显著增强应用的安全性和稳定性。
906 1
|
安全 算法 网络安全
什么是 SSL 加密?
【8月更文挑战第31天】
2390 0