在当今数据驱动的商业环境中,数据库的性能和可靠性是企业成功的关键。GBase 8s作为一款的国产数据库系统,其SSC集群架构通过优化网络交互,显著提升了性能和可用性。本文将分两部分聚焦于GBase 8s SSC集群的网络交互信息概述和网络吞吐量计算。

在GBase 8s SSC集群中,主节点向从节点只传输网络心跳、逻辑日志当前位置信息等内容即可,并不需要传输逻辑日志,SSC从节点只需根据主节点的最新LSN号从共享磁盘读取逻辑日志即可,这样减少了网络的信息传递,也减少网络延迟等网络因素对同步性能的影响,因此,在SSC集群中,节点间网络传输相比逻辑日志写入要少很多,网络的传输量并不大,尽可能减少了网络性能对SSC集群性能的影响。

在只有一个从节点的SSC集群情况下,假定TPCC测试在400并发下性能为100万tpmc,主从节点间的网络吞吐量理论最大约为3.5MB/s,SSC主节点发送PPS为16666.7包/s。此场景下忽略了其他主从间其他的消息交互,实际测试场景下,网络吞吐量要高于此理论值。

同时,在SSC从节点支持更新的场景下,假定TPCC中只包含neworder业务并且直接在SSC从节点执行测试,如果TPCC性能达到100万tpmc,则网络吞吐量为248.9 MB/s,SSC从节点发送PPS达到400000包/s。

一、SSC集群架构与工作原理

GBase 8s SSC集群为共享存储集群,允许多个数据库实例同时访问、操作同一数据库,具有高可用、高性能、负责均衡等特性,且支持故障自动切换和故障自动重加入。

1、SSC集群架构

 

南大通用GBase 8s的SSC集群网络交互信息概述(上)_8s

图1 SSC集群架构图

 

2、SSC集群工作原理

南大通用GBase 8s的SSC集群网络交互信息概述(上)_首部_02

图2 SSC集群工作原理

相比与HAC和RHAC集群,SSC集群并不需要在主从节点间传输逻辑日志文件,主节点只需向从节点发送逻辑日志当前位置信息即可,而SSC从节点可以根据接收到的LSN从共享存储获取,具体的工作原理如下:

(1)主节点完成数据更细,并发送当前LSN (Log Sequence Number)给SSC从节点。

(2) SSC从节点接收到主节点发送的LSN,并从磁盘读取更新的逻辑日志。

(3)SSC从节点重做逻辑日志更新内存中数据。

(4)SSC从节点返回LSN ACK。

除此之外,与其他集群类型类似,SSC集群主节点和从节点之间,需要定时发送心跳信息,以维护集群状态。

二、网络交互的优化

无负载场景

SSC集群在没有业务情况下,主节点每秒通过网络给从节点发送网络心跳,在有业务时,当逻辑日志buffer刷新到磁盘时,主节点向从节点发送当前的LSN。主从间的消息时序图如下:

南大通用GBase 8s的SSC集群网络交互信息概述(上)_时序图_03

图3 时序图

心跳包由MACH11_PING和IamAlive类型消息组成,其中MACH11_PING类型消息长度为24字节,IamAlive类型消息长度为16字节。SSC从节点收到心跳包后回复ACK包,包括MACH11_PINGACK和IamAlive类型消息。

在有业务时,主节点发送的数据包由logLPG和MACH11_PING类型消息组成,SSC从节点收到后回复的数据包由logLSN和MACH11_PINGACK类型消息组成,各种消息的长度如下表:

消息类型

消息长度(字节)

MACH11_PING

24

MACH11_PINGACK

16

IamAlive

16

logLPG

28

logLSN

24

 

每个数据包的组成如下图

南大通用GBase 8s的SSC集群网络交互信息概述(上)_工作原理_04

图4 数据包组成图

 

其中SMX Header的长度为20个字节。

由上可知,在无业务的情况下,各种数据包在网络发送时长度如下:

  • 主节点发送的心跳包的长度为20+24+16=60字节,加上以太网首部、网络IP首部和TCP首部的长度总和至少为54字节(14+20+20),心跳网络包的长度为54+60=114字节;
  •  SSC从节点对心跳的ACK网络包长度为54+16+16=86字节;

在有业务的情况下,各种数据包在网络发送时长度如下:

  • LSN网络包的长度为54+20+28+24=126字节;
  • SSC从节点的LSN ACK网络包长度为54+24+16=94字节。

三、SSC从节点支持更新操作

当在SSC集群 UPDATABLE_SECONDARY 被设置为非零时,SSC从节点支持更新操作,详细的过程如下:

(1)SSC从节点server接收到更新操作时,进行语法、语义解析并将语法树转CB,包括生成执行计划。

(2)SSC从节点将执行计划和相关相信同步给主节点。

(3)主节点接收到SSC从节点发送的消息后,执行更新操作。

(4)主节点完成数据更新后,同步结果给SSC从节点。

以DML操作为例,当SSC从节点执行更新操作时,主从节点间的消息时序图如下:

 

南大通用GBase 8s的SSC集群网络交互信息概述(上)_工作原理_05

图5 SSC从节点更新时序图

 

SSC从节点执行DML操作时,各类消息的长度如下表:

消息类型

消息组成

消息长度(字节)

ProxyWriteBeginWork

Vector[0]: 消息头

Vector[1]: Begin消息内容

176

ProxyWriteInsert

Vector[0]: 消息头

Vector[1]: DML消息首部

Vector[2]: 行镜像

Vector[3]: col bitmap buffer长度

Vector[4]: col bitmap buffer内容

Vector[5]: 隔离级别(可选,每个事务发一次)

108 + 行长 + col_bitmap_buffer长度

ProxyWriteDelete

Vector[0]: 消息头

Vector[1]: DML消息首部

Vector[2]: 行镜像

Vector[3]: col bitmap buffer长度

Vector[4]: col bitmap buffer内容

Vector[5]: 隔离级别(可选,每个事务发一次)

108 + 行长 + col_bitmap_buffer长度

ProxyWriteUpdate

Vector[0]: 消息头

Vector[1]: DML消息首部

Vector[2]: 行前镜像

Vector[3]: 行后镜像

Vector[4]: col bitmap buffer长度

Vector[5]: col bitmap buffer内容

Vector[6]: 隔离级别(可选,每个事务发一次)

108 + 行长*2 + col_bitmap_buffer长度

ProxyWriteSync

Vector[0]: 消息头

Vector[1]: Sync消息内容(可选,主回复SSC从节点时添加此内容)

28(SSC→Pri)

68(Pri→SSC)

ProxyWriteFlush2LSN

Vector[0]: 消息头

Vector[1]: LSN

36

ProxyWriteCommit

Vector[0]: 消息头

28

 

每个数据包的组成同图4,SMX Header的长度为20个字节,如图5所示,一条单Insert sql的事务需要发送3个网络包,假定操作表有三列且行长为40(此时col bitmap buffer的长度为4),则3组网络包具体信息如下:

第一组网络包信息如下:

  • SSC从节点发送给主节点的网络包由ProxyWriteBeginWork、ProxyWriteInsert和ProxyWriteSync三类消息组成,加上以太网首部、网络IP首部和TCP首部的长度总和至少为54字节(14+20+20),此包的长度为54+20+176+(108+40+4)+28=430字节。
  • 主节点的回复网络包由ProxyWriteSync类型消息组成,此包的长度为54+20+68=142字节。

第二组网络包信息如下:

  • SSC从节点发送给主节点的网络包由ProxyWriteCommit类型消息组成,此包的长度为54+20+28=102字节。
  • 主节点的回复网络包由ProxyWriteSync类型消息组成,此包的长度为54+20+68=142字节。

第三组网络包信息如下:

  • SSC从节点发送给主节点的网络包由ProxyWriteBeginWork、ProxyWriteFlush2LSN和ProxyWriteCommit三类消息组成,此包的长度为54+20+176+36+28=314字节。
  • 主节点的回复网络包由ProxyWriteSync类型消息组成,此包的长度为54+20+68=142字节。

 

南大通用GBase 8s SSC集群的网络交互机制是其高性能的关键。通过减少不必要的数据传输,SSC集群能够在保持数据一致性的同时,实现快速的业务处理和故障恢复。下篇文章,我们将深入探讨SSC集群在不同业务场景下的网络吞吐量,敬请期待。