1. etcd数据通道
在etcd 的实现中, 根据不同的用途,定义了各种不同的消息类型些不同的消息,最终都将通过 protocol buffer 格式进行编码。
大消息如传输 Snapshot 的数据 就比较大,甚至会超过1GB ,而小消息则如 Leader Follower 节点之间的心跳消息可能只有几十 KB。
etcd 在实现中,对这些消息采取了分类处理的方式,它抽象出了两种类型的消息传输通道,即 Stream类型通道和 Pipeline 类型通道。
Stream: 用于处理数据量较少的消息,例如心跳、日志追加消息等。点到点之间维护一个HTTP长连接。 Pipeline:用于处理数据量大的消息,如Snapshot。不维护长连接。 Snapshot这种数据量大的消息必须和心跳分开传,否则会阻塞心跳消息。
Pipeline也能用于传小消息前提是Stream不能用了。