etcd网络层(四)——Peer接口的实现

peer结构体是Peer接口的实现,peer是远程raft节点的代表,本地raft节点通过peer给远程raft节点发送消息

每个peer有两个发送消息的基本机制:stream和pipeline

stream是长连接,它始终可以传输消息。除了通常的stream,还有优化的stream用于leader发送msgApp消息,因为msgApp占了大部分的消息

pipeline是一系列客户端发送请求到远程节点,在传输完成后会立即关闭连接,主要负责数据量较大、发送频率较低的消息。如MsgSnap消息等。

 

peer结构体及字段的含义如下:

type peer struct {
	lg *zap.Logger

	localID types.ID   //当前节点ID
	// id of the remote raft peer node
	id types.ID    //该peer实例对应的节点ID,对端ID

	r Raft  //Raft接口,在Raft接口实现的底层封装了etcd-raft模块

	status *peerStatus  //peer的状态

	/*
	每个节点可能提供了多个URL供其他节点正常访问,当其中一个访问失败时,我们应该可以尝试访问另一个。
	urlPicker提供的主要功能就是在这些URL之间进行切换
	*/
	picker *urlPicker

	msgAppV2Writer *streamWriter
	writer         *streamWriter   //负责向Stream消息通道中写消息
	pipeline       *pipeline   //pipeline消息通道
	snapSender     *snapshotSender // snapshot sender to send v3 snapshot messages 负责发送快照数据
	msgAppV2Reader *streamReader
	msgAppReader   *streamReader  //负责从Stream消息通道中读消息

	recvc chan raftpb.Message  //从Stream消息通道中读取到消息之后,会通过该通道将消息交给Raft接口,然后由它返回给底层etcd-raft模块进行处理
	propc chan raftpb.Message //从Stream消息通道中读取到MsgProp类型的消息之后,会通过该通道将MsgApp消息交给Raft接口,然后由它返回给底层的etcd-raft模块进行处理

	mu     sync.Mutex
	paused bool   //是否暂停向其他节点发送消息

	cancel context.CancelFunc // cancel
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值