这是我参与「第五届青训营 」笔记创作活动的第1天 本节课其中三个重要内容中的第二个讲的是Kitex, 这是一个微服务RPC框架,其服务注册与发现对接了主流的服务注册与发现中心ETCD。ETCD 一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。使用 Raft算法 实现了强一致、高可用的服务存储目录。本文主要针对Raft算法的学习做一下记录。
Raft算法用于解决分布式中的一致性问题。分布式集群的节点有三类,分别是追随者、候选人、领导者。领导者负责从客户端接收更新等请求,并将该请求保存到日志,之后负责分发该日志到所有的追随者。追随者收到后会再给领导者回复,如果此时领导者收到了大部分追随者的回复则“提交”操作完成,即意味着提交到各自日志的操作完成了,之后领导者会根据日志更新数据,并再次发送消息给所有的追随者,追随者收到消息后也会根据日志去更新数据,之后会再次发送信息给领导者,领导者收到后表示“应用”操作完成,然后领导者会通知客户端。两大内容如下:
领导者选举:设置选举超时,这控制着是否进入选举。应用场景为:大家都是追随者,超过各自的选举超时后会成为候选人,然后征集投票,多者为领导者,称为领导者后边发送固定心跳给所有追随者。心跳时间要比选举超时短,如果反过来的话心跳时间长则会导致追随着不及时刷新选举超时,就会频繁选举。
日志复制:日志复制的目的或者说要求就是领导者与追随者一致。