简单介绍下consul底层的通信协议Gossip
明天早上还有个维护,今天需要早点休息,简单写写consul内部的通讯协议吧。
Consul是一个微服务发现的解决方案,它的主要特点是:服务发现、健康检查、键值存储、安全服务通信、多数据中心。关于consul的细节我们这里不多说,大家想了解的可以看看consul相关的博客,这里推荐几个:
https://www.cnblogs.com/cuishuai/p/8194345.html
http://www.liangxiansen.cn/2017/04/06/consul/
今天我们主要说说consul底层的通讯协议gossip协议,gossip协议也称之为流行病协议,它的信息传播行为类似流行病,或者森林的大火蔓延一样,一个接着一个,最终导致全局都收到某一个信息。
在gossip协议的网络中,有很多节点交叉分布,当其中的一个节点收到某条信息的时候,它会随机选择周围的几个节点去通知这个信息,收到信息的节点也会接着重复这个过程,直到网络中所有的节点都收到这条信息,才算信息同步完成。
从我们的描述中不难看出来,在某个时刻下,网络节点中的信息可能是不对称的,gossip协议不是一个强一致性的协议,而是最终一致性的协议,理解了这一层,我们去看consul的日志的时候,就能有一些端倪了,因为consul服务网络在运行的过程中,如果有新的服务注册进来,那么其他的节点会收到某个服务或者节点加入的信息。下面的图比较形象的展示了consul服务网络中节点通讯的方式:
Gossip协议的优点和缺点分别如下:
优点:
扩展性好,加入网络方便
容错性好,某个节点离开网络,不会影响整体的消息传播
去中心化,Gossip协议的网络中,不存在中心节点的概念,每个节点都可以成为消息的第一个传播者,只要网络可达,信息就能散播到全网。
一致性收敛:这种一传十、十传百的消息传递机制,能够保证消息快速收敛,并保证最终一致性。
缺点:
消息延迟:这个是由它的特性决定的,消息的扩散需要时间,这中间各个节点的消息是不一致的。
消息冗余:A节点告知B的信息,B可能会反过来告知A,这个时候A本身已经包含这个消息,却还要处理B的请求,这会造成消息的冗余,提高节点处理信息的压力。