Gossip在云溪数据库中的运用

浪潮云溪数据库作为新一代分布式数据库,采用无中心对等网络架构。因此使用对等网络协议gossip作为处理集群各个节点间元数据同步的方案。
什么是元数据
元数据是指关于数据的组织及其关系的信息,简言之,元数据就是关于数据的数据。各个节点将自己的元数据传播到其他节点,并接收其他节点的元数据。在得到完整的集群元数据后可以对集群进行管理、调度、监控,以及制定sql分布式计划等。元数据主要包括以下几类:

数据地址:用于分布层寻找所需数据的位置,执行分布式计划; 节点心跳:节点的心跳信息,用于集群了解所有节点的状态; 集群配置:各节点共享集群配置信息; 节点信息:节点的详细信息,包括节点硬件信息、任务等数据; 存储信息:Store的详细信息,包括Store中的range信息,已使用,未使用的磁盘容量等; 共享信息:业务中需要共享的数据,例如表的一些配置,缓存刷新标记等;

什么是gossip协议
从 gossip 单词就可以看到,其中文意思是八卦、流言等意思,我们可以想象下绯闻的传播(或者流行病的传播);gossip 协议的工作原理就类似于这个。gossip 协议通过一传十,十传百的方式将信息传播到整个网络中,并在一定时间内使得系统内的所有节点数据一致。大名鼎鼎的 Bitcoin 使用了 Gossip 协议来传播交易和区块信息。
Gossip在云溪数据库中的运用
文章图片

为什么使用gossip协议
可扩展性(Scalable)
gossip 协议是可扩展的,一般需要 O(logN) 轮就可以将信息传播到所有的节点,其中 N 代表节点的个数。每个节点仅发送固定数量的消息。在数据传送的时候,节点并不会等待消息的 ack,所以消息传送失败也没有关系,因为可以通过其他节点将消息传递给之前传送失败的节点。
容错(Fault-tolerance)
网络中任何节点的重启或者宕机都不会影响 gossip 协议的运行。能够容忍较高的丢包率。
健壮性(Robust)
gossip 协议是去中心化的协议,所以集群中的所有节点都是对等的,没有特殊的节点,所以任何节点出现问题都不会阻止其他节点继续发送消息。任何节点都可以随时加入或离开,而不会影响系统的整体服务质量(QOS)。
最终一致性(Convergent consistency)
gossip 协议实现信息指数级的快速传播,因此在有新信息需要传播时,消息可以快速地发送到全局节点,在有限的时间内能够做到所有节点都拥有最新的数据。
云溪数据库中gossip是如何实现的
连接数
每个节点发起的最大连接数由节点数决定,连接数b的3次方等于节点数n,并且最大允许b个节点连接自己。因此每个节点和2b个节点相连接。例如125个节点的集群,每个节点主动连接5个节点,并接受另外5个节点的连接。
节点选择
节点通常选择离自己最远的节点发起连接,并且定期结束离自己最近的节点,重新选择最远的节点连接。
发送方式
采用增量发送,通过version控制,每次只发送最新的数据。
【Gossip在云溪数据库中的运用】发送步骤
  1. 节点A连接节点B后,向其发送自己的新信息(key,value,version),节点 B 在收到信息后对比自己的version,更新比自己新的数据。
  2. 节点B有新信息后,对比节点A的version,将自己的比节点A新的信息(key,value,version) 发送给A,A更新本地数据。
    如果把两个节点数据同步一次定义为一个周期,理论上一个周期内可以使两个节点完全一致。
如何使用元数据
通过上述内容,已经可以了解云溪数据库由于全对等网络架构,每个节点都通过gossip模块获取到完整的集群元数据,其他模块可以通过gossip模块直接获取元数据,也可以监控数据变化,在数据变化时及时获取到最新内容的推送。例如:
·集群初始化后,初始节点将集群信息和配置写入gossip,要加入集群的节点首先连接gossip获取集群信息和配置后加入集群,并写入缓存,加入集群后再启动数据库服务。集群信息和配置发送变化后,会推送给所有节点,刷新缓存。 ·每个节点启动后也将自身的节点信息,存储信息,心跳信息按照不同的的频率周期性写入gossip,并同步到所有节点。同时,各个模块根据自身需要获取元数据。 ·分发层需要获取数据地址并缓存,确定所需数据所在的节点后,才能执行计划。 ·副本层在做range的分裂,合并,平衡等操作时需要存储信息和节点心跳,操作完成后会写入新的数据地址信息,并通知分发层刷新缓存。 ·raft模块需要监控心跳信息,判断其raft group是否正常,在心跳发送变化时及时作出处理。 ·sql层中,会使用大量缓存,如果数据发送变化需要刷新缓存时,会通过gossip通知其他节点同步刷新缓存。 ·制定分布式计划需要确定节点心跳正常,节点停止命令通过设置节点状态为停止中,通过gossip通知整个集群,其他节点得知后停止向这个节点发送新的命令。 ·集群管理功能通过元数据向客户展示整个集群的运行状态。

Gossip在云溪数据库中的运用
文章图片

————————
关于云溪数据库的更多详情可以查看:
官方代码仓库:https://gitee.com/ZNBase/zn-kvs
官网:http://www.znbase.com/
联系邮箱:haojingyi@inspur.com

    推荐阅读