肝了一个月的ETCD,从Raft原理到实践(一)

简介: 高能预警,本文是我今年年初写了,当时花了一个月时间,所以内容会比较长,其中的Raft协议非常硬核,由于当时对文章排版不熟练,所以可读性不高,现在对文章重新整理,提炼了比较核心的内容。

%ZRRV[E25@]_M3Y2S@UG3T7.jpg

很有意思的Raft原理,带你动画还原,后面附带具体ETCD示例,欢迎来戳~~


前言


高能预警,本文是我今年年初写了,当时花了一个月时间,所以内容会比较长,其中的Raft协议非常硬核,由于当时对文章排版不熟练,所以可读性不高,现在对文章重新整理,提炼了比较核心的内容。

我相信90%的读者不会一口气看完,虽然文章精简了,但是还是比较长,只是希望想日后想学习ETCD的同学,或者面试前需要了解的同学回头翻一下就够了,那么我写这篇文章的意义就有了。

也不多BB,直接开整。


走进ETCD


什么是ETCD

etcd是一个Go言编写的分布式、高可用的一致性键值存储系统,用于提供可靠的分布式键值存储、配置共享和服务发现等功能,具有以下特点:

  • 简单:
  • 易使用:基于HTTP+JSON的API让你用curl就可以轻松使用;
  • 易部署:使用Go语言编写,跨平台,部署和维护简单。
  • 可靠:
  • 强一致:使用Raft算法充分保证了分布式系统数据的强一致性;
  • 高可用:具有容错能力,假设集群有n个节点,当有(n-1)/2节点发送故障,依然能提供服务;
  • 持久化:数据更新后,会通过WAL格式数据持久化到磁盘,支持Snapshot快照。
  • 快速:每个实例每秒支持一千次写操作,极限写性能可达10K QPS。
  • 安全:可选SSL客户认证机制。


ETCD框架

从etcd的架构图中我们可以看到,etcd主要分为四个部分:

  • HTTP Server:用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求。
  • Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。
  • Raft:Raft强一致性算法的具体实现,是etcd的核心。
  • WAL:Write Ahead Log(预写式日志),是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引以外,etcd就通过WAL进行持久化存储。WAL中,所有的数据提交前都会事先记录日志。Snapshot是为了防止数据过多而进行的状态快照;Entry表示存储的具体日志内容。

LD{Q1_X9@7ZQKSR]O4O}41X.jpg


Raft协议


基本概念

名词解释

Raft协议一共包含如下3类角色:

  • Leader(领袖):领袖由群众投票选举得出,每次选举,只能选出一名领袖;
  • Candidate(候选人):当没有领袖时,某些群众可以成为候选人,然后去竞争领袖的位置;
  • Follower(群众):这个很好理解,就不解释了。

然后在进行选举过程中,还有几个重要的概念:

  • Leader Election(领导人选举):简称选举,就是从候选人中选出领袖;
  • Term(任期):它其实是个单独递增的连续数字,每一次任期就会重新发起一次领导人选举;
  • Election Timeout(选举超时):就是一个超时时间,当群众超时未收到领袖的心跳时,会重新进行选举。

角色转换

这幅图是领袖、候选人和群众的角色切换图,我先简单总结一下:

  • 群众 -> 候选人:当开始选举,或者“选举超时”时
  • 候选人 -> 候选人:当“选举超时”,或者开始新的“任期”
  • 候选人 -> 领袖:获取大多数投票时
  • 候选人 -> 群众:其它节点成为领袖,或者开始新的“任期”
  • 领袖 -> 群众:发现自己的任期ID比其它节点分任期ID小时,会自动放弃领袖位置
  • 备注:后面会针对每一种情况,详细进行讲解。

49{~)}S4D]MG${VG_B[IPGF.png

相关文章
|
27天前
|
消息中间件 存储 Kafka
面试题:Kafka如何保证高可用?有图有真相
面试题:Kafka如何保证高可用?有图有真相
|
3月前
|
负载均衡 NoSQL Java
因为不懂Redis集群,我被diss了
Redis官方在官网里写着霸气的宣传语:从构建者那里获取世界上最快的内存数据库。相信国内没用Redis的科技公司也屈指可数。现在Redis已经走向了商业化,它所属的公司叫Redis Ltd。不过可惜的是Redis创始人在2020年就离开了Redis Labs,那个留着乱糟糟黑色头发的中年男人就是Redis的创始人。Redis的商业推广仍在继续着,大家要去现场看看嘛。大家好,我是南哥。一个Java学习与进阶的领路人,相信对你通关面试、拿下Offer进入心心念念的公司有所帮助。
143 4
因为不懂Redis集群,我被diss了
|
6月前
|
NoSQL Redis
【怒怼大厂面试官】听说你精通Redis?Redis数据同步懂吗
面试官:不用慌尽管说,错了也没关系。。。来说说Redis数据同步。是这样的,Redis有一个叫命令传播的概念,如果像面试官说的这种场景,再使用上面我提到的AOF缓冲区就有点浪费内存空间了。所以Redis会将主服务器的这条Del删除命令
【怒怼大厂面试官】听说你精通Redis?Redis数据同步懂吗
|
6月前
|
存储 算法 开发工具
学习分享|Etcd/Raft 原理篇
本文是根据近期对 Etcd-Raft 的学习把自己的理解做个简单整理和分享。
|
负载均衡 监控 算法
【阿里二面面试题】说说你对 Raft 算法的理解?
【阿里二面面试题】说说你对 Raft 算法的理解?
796 0
【阿里二面面试题】说说你对 Raft 算法的理解?
|
消息中间件 Dubbo Kafka
蚂蚁面试官:Zookeeper 的选举流程是怎样的?我当场懵逼了
面试经常会遇到面试官问 Zookeeper 的选举原理,我心想,问这些有啥用吗?又不要我造火箭! 每次面试也只知道个大概,并没有深究具体的流程,所以在面试的时候总是不能打动面试官,总是特别吃亏,所以这篇就总结一下其中的要点,也希望能帮助大家搞定面试。 有一说一, Zookeeper 这些工作原理、选举流程,也许大多数人在工作中不会用到,但了解多一点也是自己的优势,避免求职面试被面试官打压工资。Zookeeper 也是现在后端主流的分布式协调框架,很多热门框架都有直接或者间接依赖它,比如:Dubbo、Elastic Job、Kafka 等,所以掌握 ZK 选举流程也是非常有必要的。
|
消息中间件 存储 监控
Kafka节点万兆网卡打满,揭晓集群安然无恙的秘诀!!!
Kafka节点万兆网卡打满,揭晓集群安然无恙的秘诀!!!
Kafka节点万兆网卡打满,揭晓集群安然无恙的秘诀!!!
|
消息中间件 分布式计算 资源调度
|
存储 Cloud Native 算法
肝了一个月的ETCD,从Raft原理到实践(二)
高能预警,本文是我今年年初写了,当时花了一个月时间,所以内容会比较长,其中的Raft协议非常硬核,由于当时对文章排版不熟练,所以可读性不高,现在对文章重新整理,提炼了比较核心的内容。
171 0
肝了一个月的ETCD,从Raft原理到实践(二)
|
存储 JSON 网络协议
肝了一个月的ETCD,从Raft原理到实践(三)
高能预警,本文是我今年年初写了,当时花了一个月时间,所以内容会比较长,其中的Raft协议非常硬核,由于当时对文章排版不熟练,所以可读性不高,现在对文章重新整理,提炼了比较核心的内容。
338 0
肝了一个月的ETCD,从Raft原理到实践(三)