etcd-v3.5.9源代码分析

news/2025/3/18 12:45:23/文章来源:https://www.cnblogs.com/janeysj/p/17401891.html

Github上下载etcdv3.5.9源代码,包含server和client两部分。
先放ETCDv3 读写流程图镇楼

读流程

写流程

Etcd Server

server->etcdmain->main.go:Main():startEtcdOrProxyV2() ->etcd.go:startEtcd()->StartEtcd()->etcdserver目录下server.go:NewServer() 初始化该节点为follow,创建管理lease(小顶堆)的lessor,WAL,MVCC,authStore,KV等等.

raft协议主要体现在etcd/raft/raft.go文件中,每个节点初始化为follower, 随机事件进入参选状态candidate并给自己投票,当获得多数票数后成为leader,并定时发送心跳。当其他follower收不到心跳时,该follower再次进入candidate.那这个leader发现了新的 Leader 任期号,那么它就需要转换到 Follower。etcd3.4引入PreVote预投票机制,防止原leader A Crash时,选出新leader,而当老leader A 恢复后再次触发新一轮 Leader 选举,影响服务的可用性。在这种情况下,因 A 节点数据落后较多,预投票请求无法获得多数节点认可,因此它就不会进入 Candidate 状态,导致集群重新选举。

存储数据库boltdb

etcd 数据存储在 boltdb, boltdb 基于 B+ tree、各类 page 实现查找、更新、事务提交. 核心数据结构包括page、node、bucket 等。
boltdb 文件指的是你 etcd 数据目录下的 member/snap/db 的文件, etcd 的 key-value、lease、meta、member、cluster、auth 等所有数据存储在其中。etcd 启动的时候,会通过 mmap 机制将 db 文件映射到内存,后续可从内存中快速读取文件中的数据。写请求通过 fwrite 和 fdatasync 来写入、持久化数据到磁盘。

boltdb 结构图
boltdb 提供了非常简单的 API 给上层业务使用,当我们执行一个 put hello 为 world 命令时,boltdb 实际写入的 key 是版本号,value 为 mvccpb.KeyValue 结构体。

Debug

  1. 在 etcd 3.4 中,logger 默认为 capnslog,trace 特性只有在当 logger 为 zap 时才开启,因此你需要设置 --logger=zap. 打开之后可以看到 range/put/txn 等操作的耗时。
  2. etcd 默认参数并不会采集各个接口的延时数据,我们可以通过设置 etcd 的启动参数 --metrics 为 extensive 来开启,获得每个 gRPC 接口的延时数据。同时可结合各个 gRPC 接口的请求数,获得 QPS。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/720220.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【长亭雷池WAF】介绍及“动态防护”功能深度体验

一、介绍 什么是雷池 雷池(SafeLine)是长亭科技耗时近 10 年倾情打造的 WAF,核心检测能力由智能语义分析算法驱动。 Slogan: 不让黑客越雷池半步。 什么是 WAF WAF 是 Web Application Firewall 的缩写,也被称为 Web 应用防火墙。 区别于传统防火墙,WAF 工作在应用层,对基…

Goland无法Debug

起因 今天用goland,Debug代码出现如下报错 其原因是因为正在使用的Delve试调器版本太旧,无法兼容当前的Go语言版本1.22.1 Delve是Go语言的一个调试工具,用于提供源码级别的调试功能 Go语言每隔一段时间会发布新版本,而相应的调试器Delve也可能会更新以提供新的特性或修复已…

2.6倍!WhaleTunnel 客户POC实景对弈DataX

作为阿里早期的开源产品,DataX是一款非常优秀的数据集成工具,普遍被用于多个数据源之间的批量同步,包括类似Apache DolphinScheduler的Task类型也对DataX进行了适配和增强,可以直接在DolphinScheduler里面利用通用的数据源调用DataX进行数据批量同步。 作为DolphinSchedule…

App_Code.dll没有生成问题

场景:VS2019需要生成App_Code.dll,用来更新网站接口,但是【发布/重新生成】网站后,Bin目录里头都没有找到这个App_Code.dll。 解决: 发布的时候勾选一下【在发布前删除所有现有文件】和【在发布期间预编译】即可

P4003 [清华集训 2017] 无限之环 解题报告

oj:https://gxyzoj.com/d/gxyznoi/p/P93 它要判断什么时候不漏水,就是需要建一种图,使得原图的最大流是答案 因为是网格图,考虑黑白染色,可以将\((i+j)\)对2取模的结果作为颜色,将所有颜色为1的点向源点连边,颜色为0的点向汇点连边 接下来考虑如何判断是否漏水,因为有四…

一文搞懂5种内存溢出案例,内含完整源码

在开发中需要尽量避免出现内存溢出,导致程序出现异常。本文分享自华为云社区《10分钟搞懂各种内存溢出案例!!(含完整源码,建议收藏)》,作者:冰 河。 作为程序员,多多少少都会遇到一些内存溢出的场景,如果你还没遇到,说明你工作的年限可能比较短,或者你根本就是个假…

SARscape5.7中DS-InSAR:E-PS操作说明

PS-InSAR方法测量PS点的形变,SBAS-InSAR方法测量分布式散射体DS(Distributed Scatters)的形变。随着技术的发展,在这一领域取得了许多研究进展,SARscape5.7版本开始,提供了能够同时提取PS和DS测量值的新方法,即增强型永久散射体(E-PS)和增强型短基线(E-SBAS)。 E-PS…

揭秘PW1558A:集成电源管理的6A双向限流过压保护IC

描述PW1558A 是一款先进的 28V 6A 额定双向负载开关, 提供过载、 短路、 输入电压浪涌、 过大冲击电流和过热保护, 为系统供电。 内置的 24mΩ超低 RDS(ON)电源开关有助于减少正常操作期间的功率损耗。 该设备具有两个输入/输出端口 VBUS1 和 VBUS2, 其绝对 MAX 大额定值为 …

物理隔离条件下文件交换的防泄密U盘,企业该如何选择?

对于网络安全要求高的企业和单位,往往采用物理隔离的方式进行网络建设,如政府单位、军工、科研所、航空航天企业、以及部分金融机构、医疗单位、电力企业、生物制药实验室等。但物理隔离后,仍然存在着隔离网间的数据交换需求,此时,仅能借助物理工具的方式进行文件交换,而…

第三届机器人、人工智能与信息工程国际学术会议(RAIIE 2024)

2024年第二届机器人、人工智能与信息工程国际学术会议(RAIIE 2024)将于2024年7月5-7日在新加坡举行。【ACM独立出版/Fellow大咖云集】2024年第二届机器人、人工智能与信息工程国际学术会议(RAIIE 2024) 2024 3rd International Symposium on Robotics, Artificial Intellig…

PyQT5之QRadioButton

import os.pathfrom PyQt5 import QtWidgets from PyQt5 import QtCore, QtGui import sys import cv2class ButtonPanel(QtWidgets.QWidget):def __init__(self, *args, **kwargs):super().__init__(*args, **kwargs)select_btn = QtWidgets.QPushButton("图像选择"…