在 ETCD 源码学习过程,不会讲解太多的源码知识,只讲解相关的实现机制,需要关注源码细节的朋友可以自行根据文章中的提示,找到相关源码进行学习。
Transport 主要实现节点之间的数据传输。
主要文件
/pkg/transport/transport.go 覆写了 net 中 RoundTrip 函数,其他 /pkg/transport/ 下的文件主要作用是实现一些网络连接的参数设置,比如读写超时、连接超时、长连接等。
/etcdserver/api/rafthttp/transport.go 定义了一些数据传输的接口,比如节点添加、发送消息等。
/etcdserver/api/rafthttp/peer.go 伙伴节点数据传输逻辑实现。
/etcdserver/api/rafthttp/remote.go 远程节点数据传输逻辑实现。
/etcdserver/api/rafthttp/stream.go 长连接传输实现(传输数据量比较小的数据,比如 MsgApp)。
/etcdserver/api/rafthttp/pipeline.go 短连接传输实现(传输数据量比较大的数据,比如MsgSnap)。
/etcdserver/api/rafthttp/msgappv2_codec.go or msg_codec.go 消息 encoder/decode 实现。