GaussDB之应用无损透明(ALT)
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的整体架构和运行原理之后,我们再来看看它具备哪些关键能力,这些能力可以为客户带来什么样的业务价值。
3.1 快速应用通知
ALT提供了一种数据库状态变化的主动消息通知机制。JDBC驱动通过GNS服务来订阅业务所用数据库集群的状态,当集群中的节点发生状态变化时,GNS将变化事件推送给JDBC驱动,后者再根据集群的最新状态对目标数据库上的连接进行管理和迁移。
同时,JDBC驱动也向应用程序提供了集群状态变化的回调函数注册接口。应用程序可以针对某些数据库连接,向JDBC驱动注册状态变化的回调函数。当集群状态发生变化时,JDBC驱动会对注册的函数进行调用,通过注册回调函数,可以很方便地在业务侧实现数据库状态变化的邮件通知、告警平台上报等运维管理操作。
3.2 连接无感迁移
当检测到GaussDB数据库发生故障或即将进行停机维护时,JDBC驱动的事件处理线程分析每条受影响的连接,确定是否有满足连接要求的其它数据库节点,如果存在,则将连接迁移至可用节点,并且恢复连接的会话状态信息。在主动停机维护场景下,使用者还可以通过参数来配置等待可用节点出现的连接挂起时长,从而提高集群统一维护场景下的服务可用性。
3.3事务断点续传
连接开启ALT后,JDBC驱动和GaussDB服务端都会跟踪记录当前会话的事务状态信息。如果数据库正在处理SQL请求时发生故障,当连接迁移到新节点后,ALT根据记录的事务状态信息将会话恢复至故障前,事务则从中断的位置继续执行,避免了由于数据库故障导致的业务中断和应用层的数据不一致现象。
ALT特性给客户带来的价值可以总结为:
- 避免数据库故障时,无法及时获取服务端状态而导致RTO过大;
- 加速JDBC指定节点类型(targetServerType)的连接建立;
- 集群停机维护时的业务连续性保证;
- 数据库故障时的业务连续性保证;
- 集群容灾切换时的快速应用通知。
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小时不中断,为企业带来更极致的高可用体验。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
浅谈幂等设计 | 京东云技术团队
1 幂等性 一句话,幂等就是一个执行操作,无论执行多少次,产生的效果和返回的结果都是一样的。 2 为什么要实现幂等性? 如今随着互联网技术快速发展,业务越来越复杂,系统的高并发和关键数据的场景越来越多。 在分布式系统中,机器宕机和消息丢失也是需要重点关注的问题,其中的一个典型就是幂等性问题。 想想看,一个对外暴露的接口会面领很多次请求,如果不能保证幂等性会带来什么样的后果? 微信进行一次扣款操作,应该只扣用户一次钱,当遇到网络故障或系统bug,如果没有实现幂等性扣多了你会不会直接“C语言”投诉? 当然,有些接口是天然保证幂等性的,比如查询操作、删除操作。有些对数据的修改是一个常量,无其他操作,也是具有幂等性的。修改操作可能幂等可能不幂等。 SELECT col1 FROM tab1 WHERE col2 = 2UPDATE tab1 SET col1 = 1 WHERE col2 = 2UPDATE tab1 SET col1 = col1 + 1 WHERE col2 = 2 这三个sql只有第三个不是幂等的。 POST请求天生就不是一个幂等操作,每次调用都会在系统中产生新的资源,想...
- 下一篇
京东搜索EE链路演进 | 京东云技术团队
导读 搜索系统中容易存在头部效应,中长尾的优质商品较难获得充分的展示机会,如何破除系统的马太效应,提升展示结果的丰富性与多样性,助力中长尾商品成长是电商平台搜索系统的一个重要课题。其中,搜索EE系统在保持排序结果基本稳定的基础上,通过将优质中长尾商品穿插至排序结果中将优质商品动态展示给用户,提升用户体验与搜索结果丰富性,是破除马太效应的一大助力。 本文将从搜索EE近期的全量迭代出发,展现其链路演进的整体脉络,包含:EE自适应动态探测模型——EE场景建模方式升级——打分与穿插两阶段一致性升级——探测与自然流量全局联动优化四个阶段,梳理对搜索EE的思考与下一步迭代方向。 全文目录: 1. EE自适应动态探测模型 2. EE场景建模方式升级 3. 打分与穿插两阶段一致性升级 4. 感知上下文的品牌店铺维度探测 5. 总结与展望 一、EE自适应动态探测模型 传统EE模型从商品曝光置信度、打分置信度等角度出发,决策EE商品的展示位置以及穿插位置,较少从用户浏览意图与探索意愿的差异化角度,来考量探测力度。其可能导致用户在宽泛浏览与挑选商品时,缺少丰富的商品选择,在决策购买时反而穿插了探索商品的误判...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS8编译安装MySQL8.0.19
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker使用Oracle官方镜像安装(12C,18C,19C)