云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用( 三 )


云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用

文章插图
在分析完前面两部分之后,可能会有同学有疑问:既然日志层到存储层不是同步写,是不是最终系统的一致性降低了?有没有可能发生数据丢失或不一致的问题呢?答案是不会 。因为 GaiaDB 的存储是一套支持 MVCC 的多版本系统 。所以即使回放实现上是异步 , 但是由于请求方会提供所需要的数据版本,存储层可以提供对应版本的强一致数据视图 。
GaiaDB 的存储节点支持数据页的回放功能,可以动态回放至任意目标版本后再返回,在之前的版本里,假如由于异步的因素还没有获取到这部分增量日志,存储节点也会启用优先拉取的策略实时拉取一次日志后再回放,以此来提供较好的时效性 。而在最新的 GaiaDB 版本中 , 我们也在计算层添加了同样的回放能力,存储节点尽力回放后仍不满足需求的 , 由计算节点进行剩余任务 。
这样对于存储慢节点的兼容能力就大大增强了,同时由于存储节点会尽力回放,所以也可以最大化利用存储层的算力资源 。对于刷脏逻辑目前也完全下沉到了存储层,存储节点可以自主控制刷盘策略和时机,尽量合并多次写后再进行落盘,大大节省了磁盘 I/O 负载,平均 I/O 延迟降低了 50% 。
云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用

文章插图
下图中我们可以看到 , 在综合了多项优化后 , 读写性能实现了最高 89% 的提升,其中写链路线路提升尤其明显 。这些都是在使用普通存储介质和网络环境的情况下测试得出的,主要得益于数据链路的缩短与同步转异步的自适应高吞吐能力 。
云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用

文章插图
在讨论完性能后 , 再分享一下 GaiaDB 在高可用方面的思考和设计理念 。
数据库作为底层数据存储环节,其可用性与可靠性直接影响系统整体 。而线上情况是复杂多变的,机房里时时刻刻都可能有异常情况发生,小到单路电源故障,大到机房级网络异常,无时无刻不在给数据造成可用性隐患 。
作为商业数据库,具备多级高可用能力是最核心的必备能力 。这样才能抵御不同级别的异常情况,有力保障客户业务的平稳运行 。GaiaDB 支持多副本、跨可用区、跨地域三级别高可用,创新性地实现了多可用区热活高可用、单个实例支持跨可用区部署 。在不增加成本的情况下,每个可用区均可提供在线服务,任何可用区故障都不会打破存储一致性 。下面我们来分别看一下每个级别高可用能力的实现 。
云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用

文章插图
首先是实例的多副本高可用能力 。
GaiaDB 对整体的分布式架构进行了重新设计,系统共分为三层 , 即计算层、日志层、存储层 。其中计算层本身无状态,仅负责事务处理与一致性维护,所以获得了很强的弹性能力,实现了秒级切换、多节点容灾,同时扩缩容只需要内存启动即可 。
日志层负责系统增量日志部分的持久化,实现了多数派高可用 。同时由于一致性协调角色上移到了计算层 , 所以该层全对称,任意节点故障不需要进行等待选主,也不会有重新选主带来的风暴和业务中断问题 。
再往下是存储层 , 负责数据页本身持久化与更新 。由于上层保留了增量日志,所以存储层可以容忍 n-1 副本故障 。简单来说就是只要有一个副本完好 , 加上上层提供的增量日志 , 即可回放出所有版本的完整数据,实现了相比传统多数派协议更高的可靠性能力 。
云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用

文章插图
其次是跨可用区与跨地域的高可用能力 。
GaiaDB 的多级高可用都是基于存储层物理日志的直接复制 。相比逻辑复制,数据链路大大缩短,同步延迟也不再受上层大事务或者 DDL 等操作影响,在主从同步延迟上具有很大优势 。
对于跨可用区高可用来说 , 由于 GaiaDB 具有对称部署架构,所以可以很方便地进行跨可用区部署 。这样可以在不增加存储成本的情况下实现多可用区热活,任一可用区故障都不影响数据可靠性 。
写数据流可以自适应只跨一跳最短的机房间网络,不需要担心分布式主节点不在同机房带来的两跳跨机房网络和跨远端机房问题,而读依然是就近读?。?提供与单机房部署接近的延迟体验 。由于跨机房传输的网络环境更为复杂,GaiaDB 添加了数据流的链式自校验机制,使数据错误可以主动被发现,保障了复杂网络环境下的数据可靠性 。


推荐阅读