蓝盟IT小贴士,来喽!
在EtcdServer.run函数中,它最终将进入无限循环,等待raftNode.aplica返回的通道被激活,并且raftNode继承raft.Node的实现。通过对筏处理等的分析,可以了解到EtcdServer正在向筏报告。在筏库发送数据之后,它充当一个应用层,消耗上层准备使用的数据。
从那时起,总体流程就很清楚了:
EtcdServer通过GRPC协议从外部接收客户端请求。它具有类型为raftNode的成员,该成员继承了raft.Node的实现。
客户端通过EtcdServer发送的数据的修改将通过raftNode发送,并且EtcdServer与侦听该频道的Raft库进行通信,并且Ready结构将通过EtcdServer传递成功发送了哪些数据。
由于每个请求将具有对应的标识,并且该标识已链接到通道,因此成功提交的请求将通过该标识找到对应的通道,以唤醒发送过程,并最终通知客户数据提交成功。
上面介绍了EtcdServer的一般过程,然后介绍了WAL的实现。
之前已经对其进行了分析。筏etcd成功发送数据后,它将通知上一个应用程序层(在这种情况下为EtcdServer),然后执行持久性数据存储。数据的持久性可能需要一些时间,因此在响应应用程序层之前,EtcdServer中的raftNode将首先将此数据写入WAL日志。这样,即使在持久性期间丢失了数据,当恢复开始时,也可以根据WAL记录恢复数据。