PolarDB无感切换特性助力游戏领域高可用实践

news/2024/7/7 18:42:33

❤️作者主页:小虚竹

❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆

❤️技术活,该赏

❤️点赞 👍 收藏 ⭐再看,养成习惯

文章目录

  • 零:前言
  • 特性一:PolarDB无感切换丝滑体验
    • 1.1、数据库高可用演进
    • 1.2、无感切换核心技术
      • 全新的高可用系统VDS
      • 全局预热系统
      • 保持连接
      • 事务保持
      • 核心技术的优势
    • 1.3、适用场景
      • 游戏行业的痛点
      • 对应的解决方案
      • 实战演练
    • 1.4、丝滑体验
  • 特性二:PolarDB透明分布式无损应用最佳实践
    • 2.1、PolarDB(PolarDB-X)透明分布式发展史
    • 2.2、产品特点
      • 云原生+MySQL生态
      • 存储计算分离架构
      • 透明分布式体验
    • 2.3、适用场景
      • 高负载低延时交易
      • 大峰谷差流量
      • 分布式快速改造
      • 数据库国产化替换
      • 混合负载访问
      • 实战演练
    • 2.4、丝滑体验
  • 三、总结:

零:前言

最近虚竹哥受阿里云邀请,坐客飞天技术沙龙,跟大家直播分享了体验PolarDB的新特性的过程和感受。整理下干货内容,分享给粉丝们,大家一起学习进步。

特性一:PolarDB无感切换丝滑体验

1.1、数据库高可用演进

在这里插入图片描述

我们先了解下数据库高可用的演进之路,传统主备模式、共享存储高可用和 PolarDB 云原生高可用都是数据库高可用性解决方案的演进过程。传统主备模式虽然在实现数据备份和恢复方面表现稳定,但面对业务规模扩张时容易面临扩展性和效率问题。随着分布式系统技术的发展,共享存储高可用性成为一种更灵活的解决方案,通过分布式架构和数据分片技术,实现了数据的高可用性和可扩展性。然而,这种方案仍需关注数据一致性和故障转移等方面的问题。

PolarDB 云原生高可用性方案则是基于云原生技术的进一步演进,通过无DDL影响、事务续传等方式,实现了非一体化高可用性。这种方案具有更高的可靠性和可扩展性,同时简化了数据迁移和备份等操作,降低了运维成本。对于架构选择来说,选择合适的高可用性方案需要根据业务需求和技术环境进行综合考虑,同时需要关注方案的可靠性和可扩展性,以及数据一致性和故障转移等方面的技术细节。

1.2、无感切换核心技术

接下来我们一起深入了解无感切换核心技术:vds的高可用系统,全局预热系统,还有连接保持和事务保持是怎么实现的。

全新的高可用系统VDS

在这里插入图片描述

我对这种数据库高可用性方案很认同。它将PolarDB的共享存储架构与VDS的节点管理机制完美结合,实现了集群的自治管理、故障检测和选主功能。这一设计前瞻地考虑了数据丢失风险,并赋予系统自动故障检测与恢复的能力,大大提高了系统的可用性和自愈能力。

每个计算节点配备独立的VDS线程,并承担不同角色,如Leader、Follower和Observer。这种角色划分与协作确保了数据操作的一致性和正确性。特别是在并发环境中,CAS操作这一同步原语确保了数据的完整性和一致性,展示了技术的严谨与高要求。

VDS在PolarDB的共享存储上维护了CAS Block和PCR两大关键数据模块。CAS Block为原子数据块,支持CAS操作,有效解决数据竞争问题;PCR则负责维护集群的拓扑状态,使VDS能实时监测集群状态并迅速应对故障,凸显对数据安全与系统稳定性的高度重视。

这种创新架构设计构建了一个高效、可靠的数据库集群系统,满足各种复杂应用场景的需求。它确保数据的完整性和一致性,为企业关键业务提供坚实的数据支撑。这种解决方案展现了技术的先进性,更体现了对业务连续性和数据价值的深度理解与承诺。

全局预热系统

在这里插入图片描述

PolarDB通过将主节点的元信息和关键数据实时同步给热备节点,并提前加载进内存,实现了全局预热系统。这一创新设计确保了在主节点故障时,热备节点能够快速、准确地接管主节点的职责,最大程度地减少服务中断时间,提高系统的可用性和可靠性。

全局预热系统的四个模块协同工作,使得数据库集群在面临主节点故障时能够快速完成热备切换。Buffer Pool模块实时监控主节点的内存使用情况,并将相关信息发送给热备节点,确保热备节点能够进行有针对性的预热操作。Undo预热模块针对事务系统进行预热,通过监控主节点的Undo日志,将相关事务信息提前加载到热备节点,确保在升主切换过程中事务的正确处理。Redo预热模块负责将Redo日志实时缓存在内存的Redo Hash中,确保在升主切换过程中能够快速找到并应用必要的Redo日志,保持数据的一致性。如果数据库集群开启了Binlog功能,Binlog预热模块将发挥作用,确保相关Binlog信息被正确加载和处理。

这种全局预热机制不仅简化了数据库管理员的运维工作,更为企业的关键应用提供了强有力的支持。它确保了业务的连续性,使得企业能够更加专注于核心业务的创新与发展。

保持连接

在这里插入图片描述

在进行主备切换或热升级操作时,确实会面临连接中断、新建连接失败以及存量事务回滚等问题,这些问题不仅增加了开发的复杂性,还带来了额外的风险。为了解决这些问题并提升数据库的高可用性,PolarDB提供了一系列功能,其中连接保持功能是其中一项重要特性。

通过数据库代理,PolarDB能够在主备切换时将新后端连接桥接到原有的前端连接,从而保持会话状态。这意味着系统变量、用户变量和字符集编码等会话信息得以保留,避免了因切换操作导致的应用中断或状态丢失。这一功能在保持连接的持续性方面发挥了重要作用,确保了系统的稳定性和可用性。

PolarDB新推出了“事务保持”功能。这一功能与连接保持相结合,能够在主备切换时确保事务的连续性和一致性,从而实现真正意义上的无感知高可用切换。下面我们来了解一下事务保持。

事务保持

在这里插入图片描述

PolarDB采用了基于物理复制的架构,这一设计在数据库领域并不常见。物理复制方式的优势在于它能够在热备节点上重建与主节点完全一致的事务,确保数据一致性和完整性。这种复制方式比传统的基于Binlog的逻辑复制更高效和准确,为数据库的高可用性提供有力支持。

为了增强数据库的可用性,PolarDB还引入了事务保持功能。这一功能确保事务的连续性和一致性,不受主备切换影响。当应用程序执行begin-insert-update-commit事务时,PolarProxy会缓存相关SQL语句并保存最近语句的Savepoint。一旦获取到这些信息,事务信息会同步到热备节点。

如果主节点在UPDATE过程中发生故障,PolarProxy会挂起该请求并立即启动热备切换流程。新主节点会重建未提交的事务并异步等待提交。一旦切换成功,PolarProxy会桥接事务状态,确保会话和事务信息在新主节点上的连续性。这一过程对应用几乎透明,用户只会感知到操作执行时间略有延长。

核心技术的优势

这几个核心技术完美结合PolarDB的共享存储架构和VDS的节点管理机制,实现故障检测和选主功能,前瞻性地考虑了数据丢失风险。每个计算节点配备独立的VDS线程,承担不同角色,确保数据操作的一致性和正确性。
VDS在PolarDB的共享存储上维护CAS Block和PCR两大关键数据模块,有效解决数据竞争问题,并维护集群的拓扑状态,及时应对故障。这种创新架构设计构建了一个高效、可靠的数据库集群系统,满足各种复杂应用场景的需求。

全局预热系统通过实时同步主节点的元信息和关键数据给热备节点,实现快速、准确的热备切换。这一设计简化了数据库管理员的运维工作,确保业务的连续性。

保持连接和事务保持功能在主备切换时保持会话状态和事务的连续性,确保系统的稳定性和可用性。

接下来进一步扩展无感切换核心技术的适用场景。

1.3、适用场景

游戏行业的痛点

  • 开新服、合服等场景:需要实现快速弹性扩容;
  • 备份恢复:在发布版本时,有可能出现发布失败的情况,导致整个实例需要回滚到之前的版本;
  • 游戏版本发布、服务端重启场景:需要缩短维护时间,快速重启;
  • 跨region 容灾需要:随着游戏行业不断拓展海外市场,用户需要在不同地区建立新的实例。当遇到地区异常情况时,如何进行有效的切换是关键问题;

对应的解决方案

  • 弹性扩容:PolarDB集群采用存储计算分离架构,包含1个主节点和N个只读节点。只读节点可快速增减,适用于新服和合服时的快速弹性扩容需求。
  • 备份恢复:PolarDB采用计存分离架构,利用底层分布式存储的快照能力,实现不超过30秒的快速备份。核心思路是Redirect-on-Write机制,通过创建快照索引而非实际复制数据,仅在数据块修改时保留历史版本并生成新数据块,实现高效备份。
  • 游戏版本发布、服务端重启场景:采用三副本一致性存储技术,确保数据可靠性。具备热备切换核心技术:结合高可用系统VDS、全局预热系统和连接保持、事务保持等技术,在主实例故障时,系统能迅速完成无感秒切,确保在线业务快速恢复并提供正常服务。
  • 跨region 容灾需要:用户依靠云原子能力组合实现容灾需求。为了应对这一场景,PolarDB推出了PolarDB GlobalDatabase解决方案,将跨地域的容灾纳入其中,为用户提供更加简便的解决方案。用户可以专注于自己的业务逻辑,而不必处理容灾相关的问题。PolarDB依靠多通道物理复制能力,确保容灾时间在1秒内完成。

实战演练

业务挑战:
游戏业务快速出海,需要支撑全球化业务的统一部署;
在活动峰值时需要支撑100万级玩家同时在线的高并发压力;
用户存量近亿;
游戏运维发布、游戏服务端软硬件故障导致服务端重启,需要数据库支撑更快的数据读取能力,以实现业务的快速恢复;
不仅要为用户提供流畅的游戏体验,还要提供账号服务、充值服务、历史战绩查询服务等;

解决方案:
在这里插入图片描述

前端多个ECS实例作为各个服务器的入口,接入到后端的PolarDB集群。在开新服、合服时可以增加最多15个只读节点,用来减少主节点压力。PolarDB同时能提供账号服务、充值服务、历史战绩查询服务等。

1.4、丝滑体验

体验传送门:–》
免费在线体验PolarDB MySQL版热备无感秒切的效果
体验环境:
在这里插入图片描述

单击页面下方创建任务按钮,并在弹出框中单击确定开始创建Sysbench压测任务。

在这里插入图片描述

单击查看详情,进入实时压测情况页面。
在这里插入图片描述
在这里插入图片描述

实验结论:
开启了无感秒切的PolarDB集群的TPS没有直接跌零,最低还有176TPS;
只是出现了短暂的下降,4秒后就恢复了正常水平。
而普通切换的PolarDB集群的TPS直接跌零,并持续了近25秒才恢复正常水平。

特性二:PolarDB透明分布式无损应用最佳实践

2.1、PolarDB(PolarDB-X)透明分布式发展史

在这里插入图片描述

PolarDB-X的发展历程是一条不断进步与创新的轨迹。从2009年开始,PolarDB-X经历了多个重要阶段,逐渐发展成为一款高性能、分布式的数据库产品。

在2016年,PolarDB-X 1.0版本正式发布,这款产品以其卓越的性能和分布式能力,为众多企业提供了强大的数据存储和处理支持。随后的2019年,PolarDB-X迎来了2.0版本,该版本在性能、体验和生态方面进行了全面升级。其中,“x”取音“extreme”,寓意着极致的性能和体验,同时通过透明分布式系列能力大幅提升了业务分布式改造效率。

到了2021年,PolarDB-X已经承担了我国大批国计民生工程,用户遍布全球15个国家和地区。这一年的“双十一”峰值交易达到了544,000笔/秒,标志着PolarDB-X在处理大规模并发交易方面取得了质的飞跃。同年,PolarDB-X的线性无感分布式扩展能力也帮助业务实现了TDDL Distribute Relational Database Service的连续性提升。

2.2、产品特点

云原生+MySQL生态

PolarDB-X的云原生+MySQL生态很不错,凭借卓越的性能、灵活性和自动化操作,为用户节省了时间和精力,降低了成本。兼容MySQL生态则为用户提供了更大的灵活性,让他们能够轻松扩展和升级数据库系统。这种全方位的兼容性不仅简化了迁移过程,还为应用提供了无缝的集成体验。

存储计算分离架构

以云数据库的扩展能力为基础,通过创新的架构设计,实现了存储与计算的分离。这种分层规划方式为用户提供了更大的灵活性,使得数据库管理更加高效和智能。同时,PolarDB-X结合CBO优化器,确保了在处理大规模数据时的性能和稳定性。

透明分布式体验

  • 默认主键拆分:让移植到PolarDB-X的数据和业务摆脱对设计“分区键”的依赖;
  • 高性能强一致分布式事务:PolarDB-X采用自研X-Paxos协议,保证数据存储在故障切换过程中RPO=0的基础上,使用TSO策略和分布式的MVCC能力保证了分布式事务的隔离性和一致性。
  • 分布式线性扩展:PolarDB-X基于一致性Hash的分区策略,有效的进行负载均衡和热点抑制,且在扩展过程中保持计算下推和数据一致性的同时实现业务零感知,并行和流控能力为扩展期间业务连续性提供了有力保障。
  • 跨region 容灾需要:分别解决分布式数据库各节点数据库向下游流转的难题及各节点备份时间差造成的恢复一致性问题。

2.3、适用场景

高负载低延时交易

PolarDB-X采用自研多数派共识协议X-Paxos,确保三副本强一致性,RPO=0。基于全局时钟TSO和分布式MVCC多版本,确保事务一致性。已通过信通院评测,连续12年支撑“双十一”,稳定且高性能。

大峰谷差流量

PolarDB-X具备分布式线性扩展机制,确保计算下推和数据一致性,业务零感知。结合流量控制,提升扩展稳定性。提供历史数据清理和归档,有效控制存储成本。

分布式快速改造

PolarDB-X推出"透明分布式"能力,简化分布式改造,保留单机MySQL体验,大幅缩短改造周期,保留技术栈。具备从单机到分布式的平滑演进能力,支持DDL动态调整为分布式分区表,结合分布式事务和数据回流,实现快速改造。

数据库国产化替换

PolarDB-X是阿里云自研的云原生分布式数据库,具备国产化、自主可控能力。支持公有云、专有云、DBStack和软件版多种部署形态。已帮助百余家企业完成商业数据库替换和分布式改造,提供培训与架构咨询。

混合负载访问

PolarDB-X基于并行计算和扩展能力,实时报表分析在线数据。智能读写分离和只读副本保障OLTP和OLAP隔离,统一入口自动选择查询引擎。一份数据完成两种访问,免ETL成本和延时。

实战演练

支付业务挑战:
支付业务数据量大,并发高,已有RDS MySQL实例无法满足性能及扩展需求。
交易、订单表数据量巨大,单表数据量10亿级,需要拆库拆表以缓解数据库压力。
历史存量数据存在RDS MySQL之上,希望迁移后的分布式数据库语法兼容MySQL,迁移成本低。
解决方案:
在这里插入图片描述

采用两个PolarDB-X实例,每个PolarDB-X实例挂载4个RDS MySQL。
通过PolarDB-X分库分表,将数据库水平拆分有效解决了支付订单的存储瓶颈及高并发压力。
使用PolarDB-X升配及平滑扩容满足了业务高速发展过程中PolarDB-X数据库平滑扩展的诉求。

2.4、丝滑体验

体验传送门:–》
免费在线快捷体验PolarDB-X的透明分布式能力
在这里插入图片描述

单击页面下方创建任务按钮。
稍等片刻后,可以看到创建的体验任务已开始
在这里插入图片描述

切换到PolarDB-X主库mydb:use mydb;
查看sbtest1的建表语句。show create table sbtest1;
结果如图所示;
查看表在存储节点的分布情况:show storage;
在这里插入图片描述

查看表的分布:show topology from sbtest1;
在这里插入图片描述

查看压测表数据分布:
根据给定的建表语句,sbtest1没有明确的分区定义。但从它的数据分布情况看,PolarDB-X会自动选择主键作为分区键,并据此对表及其索引进行水平分区。
在这里插入图片描述

将分区方式变更为k列:alter table sbtest1 partition by hash(k) partitions 8;
查看表的分布:show topology from sbtest1;
在这里插入图片描述

再次查看压测表数据分布
可以看到,压测数据发生了重分布。
在这里插入图片描述

在整个过程中可以观测左侧实例的TPS性能变化情况。
在这里插入图片描述

连接从库,看是否有表test_11,结果上是没有

在主库创建test_11表
增加列test_column
主库插入数据
在这里插入图片描述

可以看到主库中创建表、新增列以及插入数据都已自动同步至从库
在这里插入图片描述

主库节点删除test_11表
在这里插入图片描述

库中删除表的语句也已自动同步至从库
在这里插入图片描述
在这里插入图片描述

结果分析:
我很喜欢PolarDB-X的自动分区功能。它通过默认使用主键进行拆分,大大简化了迁移到分布式环境的复杂过程,使得数据和业务无需考虑分区键的设计,实现了从单机MySQL到分布式环境的无缝升级。这种设计为用户带来了极大的便利性,降低了迁移的难度和成本。
PolarDB-X还支持用户自定义分区键进行拆分,这无疑提高了系统的整体性能。用户可以根据实际需求选择合适的分区键,进一步优化数据库的性能和查询效率。
PolarDB-X在数据回流和数据一致性方面也表现出色。作为事务型分布式数据库,它能够应对高并发写入,并确保数据同步至下游系统。下游业务对事务日志的要求非常严格,需要保证事务顺序、原子性和DDL同步。PolarDB-X通过实时同步数据至下游MySQL,实现了数据的一致性,满足了下游业务的严格要求。

三、总结:

在本文中,虚竹哥带大家深入了解了PolarDB的两个关键特性:无感切换和透明分布式能力。通过内容的介绍,得以一窥PolarDB在实际应用中的表现和优势。

PolarDB的无感切换特性为数据库的高可用性提供了强有力的保障。这一特性主要依赖于全新的高可用系统VDS和全局预热系统。在游戏行业中,这一特性尤为重要,因为它能够解决开新服、合服等场景下的高并发压力和数据读取需求。通过与云原子的结合,用户可以轻松实现跨region的容灾需求。在实战演练中,我们看到了PolarDB在面对业务挑战时的强大表现,证明了其在高并发压力下的稳定性和快速恢复能力。

PolarDB的透明分布式能力为用户提供了最佳的应用实践。这一能力基于创新的存储计算分离架构,为用户提供了默认主键拆分、高性能强一致分布式事务和分布式线性扩展等功能。这使得PolarDB能够应对高负载低延时交易、大峰谷差流量、分布式快速改造以及数据库国产化替换等场景。在实战演练中,我们看到了PolarDB在支付业务中的成功应用,通过分库分表解决了存储瓶颈和高并发压力,满足了业务的高速发展和扩展需求。

PolarDB凭借其无感切换和透明分布式能力,为用户提供了一种高效、可靠、经济的数据库解决方案。无论是需要处理大规模数据的应用程序,还是希望降低数据库管理成本的企业,PolarDB都能够满足其需求,成为值得信赖的数据库伙伴。祝PolarDB发展越来越好,带给我们更多惊喜。

我是宠粉的虚竹哥,请继续支持我,哈哈哈~


http://lihuaxi.xjx100.cn/news/1984337.html

相关文章

Hive 行列转化 方式总结

行列转换 列转行 使用 lateral view explode(array|map) 或 lateral view inline(array_struct) 可以将列转换为行。 单列转多行,降维(单列数组或键值对) 示例1:explode(array(…)) select ..., A from T lateral view exp…

6.1 实现微服务:匹配系统(上中下)

WebSocketConfig。ja(onOpen建立连接时自动调用onClose关闭链接时自动调用(user还存在就在线程移除)onMessageServer从Client接收消息时触发) status:match来切换界面是不是匹配还是比赛的 解析token,如果…

Qt —— 自定义飞机仪表控件(附源码)

示例效果 部署环境 本人亲测版本Vs2017+Qt5.12.4,其他版本应该也可使用。 源码1 qfi_ADI::qfi_ADI( QWidget *parent ) :QGraphicsView ( parent ),m_scene ( nullptr )

Parade Series - Android Studio

硬件支持 CPU i7 RAM 16Gb -------------- ------- Java 3Gb Android 33GbJava Enviroment C:\ ├─ Java │ ├─ jdk1.8.0_181 │ ├─ jre1.8.0_181 │ ├─ maven-3.8.5 │ └─ gradle-6.5 └─ Cache├─ gr…

03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址:portal/findAllTypes 请求方式:get 请求参数:无 响应数据: 成功 {"code":"200","mes…

什么叫特征分解?

特征分解(Eigenvalue Decomposition)是将一个方阵分解为特征向量和特征值的过程。对于一个 nn 的方阵A,其特征向量(Eigenvector)v 和特征值(Eigenvalue) λ 满足以下关系: 这可以写…

攸信UMS工业配送AMR F1引领智能物流发展,侨智大会瞩目焦点

近日,由中国侨联、福建省人民政府共同主办的第一届中国侨智发展大会在福州开幕。本次大会以“五洲聚‘福’汇侨智,同心共圆中国梦”为主题,立足福建、服务全国、面向海外,吸引了来自37个国家和地区的一千余名海内外嘉宾参会。 01|…

获取数组中的第一个、第二个、第三个......元素

常规操作可以直接使用索引(下标)获取: const arr [5,8,6,9,10] const first arr[0] //5 const second arr[1] //8 const third arr[2] //6 不使用索引,如何获取: const [first] [5,8,6,9,10] //…