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请求:查看当前访问的数据库实例信息
SQL> show listen_addresses;
2.客户端发送SQL请求:创建和使用数据库对象
SQL> create table alt_test_switchover(mes text);
SQL> insert into alt_test_switchover values('message before switchover');
<-- 集群操作:switchover -->
3.客户端发送SQL请求:使用数据库对象
SQL> insert into alt_test_switchover values('message after switchover');
SQL> select mes from alt_test_switchover;
4.客户端发送SQL请求:查看当前访问的数据库实例信息
SQL> show listen_addresses;
对比结果:
(1)普通JDBC连接:集群进行switchover后,数据库连接断开,应用程序无法再使用该连接发送SQL请求。

图2 – 普通JDBC连接日志
(2)启用ALT特性的连接:集群进行switchover后,数据库连接自动迁移到新的主节点上,应用程序可以继续使用该连接发送SQL请求。

图3 – ALT连接日志
GaussDB作为一款企业级分布式数据库,具备五高两易(高可用、高安全、高性能、高弹性、高智能,易部署、易迁移)的核心优势。在满足金融核心业务的可靠性要求方面,GaussDB与工行联创推出了国内首个双集群强一致方案,实现集群级故障完全隔离RPO=0,而全新的应用无损透明方案,又做到了系统故障应用无感知,真正实现了业务7*24小时不中断,为企业带来更极致的高可用体验。
GaussDB技术解读系列之应用无损透明(ALT)的更多相关文章
- 恒天云技术分享系列4 – OpenStack网络攻击与防御
恒天云技术分享系列:http://www.hengtianyun.com/download-show-id-13.html 云主机的网络结构本质上和传统的网络结构一致,区别大概有两点. 1.软网络管理 ...
- Alamofire源码解读系列(六)之Task代理(TaskDelegate)
本篇介绍Task代理(TaskDelegate.swift) 前言 我相信可能有80%的同学使用AFNetworking或者Alamofire处理网络事件,并且这两个框架都提供了丰富的功能,我也相信很 ...
- Alamofire源码解读系列(八)之安全策略(ServerTrustPolicy)
本篇主要讲解Alamofire中安全验证代码 前言 作为开发人员,理解HTTPS的原理和应用算是一项基本技能.HTTPS目前来说是非常安全的,但仍然有大量的公司还在使用HTTP.其实HTTPS也并不是 ...
- Alamofire源码解读系列(十二)之时间轴(Timeline)
本篇带来Alamofire中关于Timeline的一些思路 前言 Timeline翻译后的意思是时间轴,可以表示一个事件从开始到结束的时间节点.时间轴的概念能够应用在很多地方,比如说微博的主页就是一个 ...
- UWP 手绘视频创作工具技术分享系列 - SVG 的解析和绘制
本篇作为技术分享系列的第一篇,详细讲一下 SVG 的解析和绘制,这部分功能的研究和最终实现由团队的 @黄超超 同学负责,感谢提供技术文档和支持. 首先我们来看一下 SVG 的文件结构和组成 SVG ( ...
- UWP 手绘视频创作工具技术分享系列 - Ink & Surface Dial
本篇作为技术分享系列的第四篇,详细讲一下手绘视频中 Surface Pen 和 Surface Dial 的使用场景. 先放一张微软官方商城的图,Surface 的使用中结合了 Surface Pen ...
- Cube 技术解读 | Cube 小程序技术详解
本文为<Cube 技术解读>系列第三篇文章,之前上线的<支付宝新一代动态化技术架构与选型综述>与<Cube卡片技术栈解读>欢迎大家回顾. 魔方卡片(Cube)已在「 ...
- 【转】Entity Framework技术导游系列开篇与热身
转自:http://blog.csdn.net/bitfan/article/details/12779517 Entity Framework走马观花 之 把握全局 ================ ...
- 恒天云技术分享系列5 – 虚拟化平台性能对比(KVM & VMware)
恒天云技术分享系列:http://www.hengtianyun.com/download-show-id-14.html 概述 本性能测试报告将详细陈述各虚拟化平台基准性能测试的主要结论和详细结果. ...
- MFC技术内幕系列之(四)---MFC消息映射与消息传递内幕
//////////////////////////////////////////////////////////////////////////////////// ...
随机推荐
- 多维评测指标解读第17届MSU世界编码器大赛全高清10bit赛道结果
超高清视频纤毫毕现的关键一环. 01 主要指标多项第一,带宽节省48% 近日,第17届MSU世界编码器大赛全高清10bit赛道成绩揭晓,阿里自研的H.266/VVC编码器Ali266在该赛道最高效的1 ...
- 【虹科干货】谈谈Redis Enterprise实时搜索的过人之处
我们都知道,用户在使用应用程序时候,对于速度有着越来越高的要求,真可谓是"一秒也等不及".而开发团队又该怎样来满足这种对于实时性的期望呢? 文章速览: Redis Enterpri ...
- meet
以后就放弃csdn了,就来这里记录自己的成长,就当成一个树洞吧,开心与难过,学习与生活,进步与成长,留下时间的痕迹!冲!冲!冲!
- 数据库安装以及Navicat for MySQL 15安装
1.数据库安装 2.安装数据库遇到的问题,解决方案:1,2 3.Navicat for MySQL安装 4.注册码
- spring---面向切面(AOP @Pointcut 注解篇)
2.1 第一个实例 接下来,我们先看一个极简的例子:所有的get请求被调用前在控制台输出一句"get请求的advice触发了". 具体实现如下: 1.创建一个AOP切面类,只要在类 ...
- Jail 【Python沙箱逃逸问题合集】
借助NSS平台题目,以2022年HNCTF为例展开分析 背景: 由于目前很多赛事有时候会出现一些pyjail的题目,因此在这里总结一下以便以后遇见可以轻松应对. 注:由于Python3中的unicod ...
- 中龙技术 | HSCSEC CRY + MISC WP
CRYPTO[HSC-1th] Easy SignIn 5445705857464579517A4A48546A4A455231645457464243566B5579556C7053546C4A4E ...
- 01Java学习_概述
概述 目录 概述 三个阶段 概述 历史(了解) Java 重要特点 开发工具 Java 运行机制及运行过程 下载和安装 JDK 配置环境变量 java 快速入门 博客中的图片内容全部采用 github ...
- MongoDB 6.0 单实例基于用户角色实现授权登录
现代数据库系统能够存储和处理大量数据.因此,由任何一个用户单独负责处理与管理数据库相关的所有活动的情况相对较少.通常,不同的数据库用户需要对数据库的某些部分具有不同级别的访问权限:某些用户可能只需要读 ...
- 《REBEL Relation Extraction By End-to-end Language generation》阅读笔记
论文来源 代码地址 相关视频(YouTube) 相关概念: 1.What is natural language understanding (NLU)? Natural language ...