GaussDB 技术解读系列之应用无损透明(ALT)
本文作者 :华为云 GaussDB 研发高级工程师 藏琦
1.背景
GaussDB 作为一款企业级分布式数据库,提供了“同城跨 AZ 双活、两地三中心、双集群强一致”等极致的高可用容灾能力。当某个数据库节点由于故障无法对外提供服务时,为了继续保证数据库服务的可用性,JDBC 驱动会将业务后续的数据库连接请求发送到其它可用节点上。但故障发生后,已经与故障节点建立会话的连接无法自动切换到可用节点上,导致使用这些连接的业务单元发生报错。如果业务单元缺少连接重试或业务一致性校验,可能会引起应用中断,甚至业务数据不一致的问题,造成用户严重的业务损失。
因此,华为云 GaussDB 数据库提供了一种在数据库故障情况下的客户端连接转移方案 —— ALT(Application Lossness Transparent,应用无损透明)。该方案的原理是,当数据库集群的某个节点由于故障无法对外提供服务,若此时集群内还存在其它可用节点,则将故障节点上的会话连接自动迁移到目标节点上,客户端无需再次发出连接请求,仍然可以继续执行数据库操作。整个过程中,客户端应用程序是无感知的,就像是经历了一次略有延迟的 SQL 请求处理,极大地提高了数据库服务的可用性。
2.技术架构
我们先来看下 ALT 的技术架构和运行原理:
图 1 - ALT 架构示意图
从上图中可以看到,GaussDB 集群引入了一个独立组件 GNS(GaussDB Notification Service),用于检测获取数据库各节点的实时状态信息。当应用程序调用 JDBC 接口首次向集群中的任意节点建立连接时,JDBC 驱动会与 GNS 服务建立集群状态订阅链路。当 GNS 检测到集群状态发生变化,会通过订阅链路将状态变化事件发送给 JDBC 驱动,事件处理线程收到任务后,再通过集群连接管理器中保存的引用副本对受到影响的连接进行管理和迁移。
GNS 组件采用的是多节点对等多活的部署方式,每个 GNS 服务都拥有集群的全量状态数据,JDBC 驱动只需要与其中任意一个 GNS 建立订阅服务,就可以管理应用程序在该集群所有节点上的连接。
3.关键能力
在了解了 ALT 的整体架构和运行原理之后,我们再来看看它具备哪些关键能力,这些能力可以为客户带来什么样的业务价值。
快速应用通知
ALT 提供了一种数据库状态变化的主动消息通知机制。JDBC 驱动通过 GNS 服务来订阅业务所用数据库集群的状态,当集群中的节点发生状态变化时,GNS 将变化事件推送给 JDBC 驱动,后者再根据集群的最新状态对目标数据库上的连接进行管理和迁移。
同时,JDBC 驱动也向应用程序提供了集群状态变化的回调函数注册接口。应用程序可以针对某些数据库连接,向 JDBC 驱动注册状态变化的回调函数。当集群状态发生变化时,JDBC 驱动会对注册的函数进行调用,通过注册回调函数,可以很方便地在业务侧实现数据库状态变化的邮件通知、告警平台上报等运维管理操作。
连接无感迁移
当检测到 GaussDB 数据库发生故障或即将进行停机维护时,JDBC 驱动的事件处理线程分析每条受影响的连接,确定是否有满足连接要求的其它数据库节点,如果存在,则将连接迁移至可用节点,并且恢复连接的会话状态信息。在主动停机维护场景下,使用者还可以通过参数来配置等待可用节点出现的连接挂起时长,从而提高集群统一维护场景下的服务可用性。
事务断点续传
连接开启 ALT 后,JDBC 驱动和 GaussDB 服务端都会跟踪记录当前会话的事务状态信息。如果数据库正在处理 SQL 请求时发生故障,当连接迁移到新节点后,ALT 根据记录的事务状态信息将会话恢复至故障前,事务则从中断的位置继续执行,避免了由于数据库故障导致的业务中断和应用层的数据不一致现象。
ALT 特性给客户带来的价值可以总结为:
(1)避免数据库故障时,无法及时获取服务端状态而导致 RTO 过大;
(2)加速 JDBC 指定节点类型(targetServerType)的连接建立;
(3)集群停机维护时的业务连续性保证;
(4)数据库故障时的业务连续性保证;
(5)集群容灾切换时的快速应用通知。
4.ALT 特性演示
JDBC 开启 ALT 方式
样例:URL=jdbc:opengauss://host1:port1,host2:port2,host3:port3/database?enableALT=true&gns=gns_host1:gns_port1, gns_host2:gns_port2
当应用程序使用 JDBC 驱动访问 GaussDB 数据库时,只需要在连接 URL 中添加配置项 enableALT 和 GNS 监听地址即可开启 ALT 服务。ALT 服务的最小订阅粒度是连接级别的,JDBC 驱动支持向同一集群同时建立 ALT 连接和普通连接。
演示场景:
GaussDB 集中式集群进行 switchover 操作时,观察使用 ALT 连接的 SQL 请求执行情况。
演示步骤:
应用程序与数据库主节点分别建立普通 JDBC 连接和启用 ALT 特性的连接,使用两条连接同时执行下述 SQL 命令,观察集群完成 switchover 后,数据库连接是否可以正常使用。
1.客户端发送 SQL 请求:查看当前访问的数据库实例信息
2.客户端发送 SQL 请求:创建和使用数据库对象
3.客户端发送 SQL 请求:使用数据库对象
4.客户端发送 SQL 请求:查看当前访问的数据库实例信息
对比结果:
(1)普通 JDBC 连接:集群进行 switchover 后,数据库连接断开,应用程序无法再使用该连接发送 SQL 请求。
图 2 – 普通 JDBC 连接日志
(2)启用 ALT 特性的连接:集群进行 switchover 后,数据库连接自动迁移到新的主节点上,应用程序可以继续使用该连接发送 SQL 请求。
图 3 – ALT 连接日志
GaussDB 作为一款企业级分布式数据库,具备五高两易(高可用、高安全、高性能、高弹性、高智能,易部署、易迁移)的核心优势。在满足金融核心业务的可靠性要求方面,GaussDB 与工行联创推出了国内首个双集群强一致方案,实现集群级故障完全隔离 RPO=0,而全新的应用无损透明方案,又做到了系统故障应用无感知,真正实现了业务 7*24 小时不中断,为企业带来更极致的高可用体验。
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/e073534c9337e22b5fffedd2a】。文章转载请联系作者。
评论