在当今数据驱动的商业环境中,数据库的性能和可靠性是企业成功的关键。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集群架构
图1 SSC集群架构图
2、SSC集群工作原理
图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。主从间的消息时序图如下:
图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 |
每个数据包的组成如下图
图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从节点执行更新操作时,主从节点间的消息时序图如下:
图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集群在不同业务场景下的网络吞吐量,敬请期待。
标签:网络,节点,Vector,集群,长度,8s,交互,GBase,SSC From: https://blog.51cto.com/u_17026136/12058172