河南移动:核心营业系统稳定运行超300天,数据库分布式升级实践|OceanBase案例

news2024/9/29 23:52:19

河南移动,作为电信全业务运营企业,不仅拥有庞大的客户群体和业务规模,还引领着业务产品与服务体系的创新发展。河南移动的原有核心营业系统承载着超过6000万的庞大用户量,管理着超过80TB的海量数据,因此也面临着数据规模急剧扩张与业务连续性要求高的双重挑战,对数据库的分布式升级显得尤为迫切。在全方位综合评估后,河南移动选择了OceanBase作为其核心系统的分布式数据库。

在 2024 外滩大会的 OceanBase 见解论坛上,河南移动高级专家彭庆军作为嘉宾受邀分享了河南移动营业系统核心数据库分布式改造升级经验。他表示:基于自研轩辕数据总线替换方案,河南移动在两个月内完成了一套承载 1500 万用户的核心系统,从传统数据库到 OceanBase 的平滑升级,并取得运维效率显著提升、7×24 小时稳定运行的卓越成效。


1. 建设背景:新一代干架构需要新一代数据库

河南移动的现网即核心营业系统 CRM 呈数据容量大、业务并发高、连续性要求高、数据安全性高四大业务特征:

  • 数据容量大。伴随着业务发展,河南移动用户数量现已突破 6000 万,其营业核心系统数据量已超过 80TB。相当于每个库拥有 1500 万用户,大约 20TB 数据。

  • 业务并发高。单库日 SQL 数量超 40 亿次,日订单量 3 千万笔(含查询工单),逢月末、月初业务量峰值更加持续增长。

  • 业务连续性要求高。众所周知,移动行业是涉及民生的基础通信服务,需要为用户提供 7*24h 电信级服务保障,业务中断三个小时即为重大故障。

  • 数据安全性高。核心营业系统数据库存储着超 1500 万用户的敏感信息和数据,数据不能错、不能丢,且存储和访问安全要求高。

彭庆军介绍,河南移动新一代 IT 架构对数据库有七大需求:高兼容、高可靠、高性能、高扩展、高容量、高安全、高运维。

图片

对于当时的河南移动来说,数据库改造面临成本高、访问性能低、割接风险大、替换周期长四大难题。传统的数据库替换方案主要围绕功能、性能、运维,涉及数据库和应用系统两方面,一般存在两种替换方案:一,从 Oracle 迁移到国产数据库,需要该国产数据库完全适配应用和兼容 Oracle;二,应用适配国产数据库,这是目前数据库替换采用的主流方案。

因为数据库的替换历来高风险低收益,而通过应用进行大量适配改造的换库方式等于是单程车票,不仅并行期应用存在两个版本,且上线后难以回切,一旦替换后的新库不满足要求,再次替换的难度和风险更高。有没有第三种替换方案?

基于此,河南移动开始为核心系统探寻新的数据库。根据河南移动的经验,数据库选型可以分为两个方面:一是如何评估一家数据库企业;二是如何评估一款数据库产品。

在彭庆军看来,第一要看企业的综合实力,其次是企业的研发实力,最后需要关注这个企业做的产品是“长期主义”还是“短期的功利主义”。

2. 两个月完成割接上线成效显著

河南移动从选型到上线整体周期历经 7 个月。2023 年 5 月,河南移动开启国产数据库选型,并重点关注几大国产分布式数据库;6 月,河南移动选型集团公招标中标的 OceanBase;9 月,双方团队一起确认升级改造方案;10 月,召开国产升级启动会;12 月,核心系统成功割接上线。截止 2024 年 9 月底,河南移动核心营业系统数据库已稳定运行 300 余天。

彭庆军介绍:在确认升级改造方案时,团队一直比较犹豫,因为核心系统升级至国产数据库的动作很大,担心分布式数据库上线后运行不稳,害怕没有给业务带来任何效益。基于此,河南移动调研了已经上线 OceanBase 的山东移动和江苏移动。在听取了两地的实践经验后,整个团队心里底气大增。10 月份,正式启动了核心营业系统数据库的分布式产升级之路。最终仅用两个月,当年 12 月份即完成系统上线。”

完成迁移升级之后,河南移动建设成效显著,基本总结为“一少、二快、三稳、四超”。

  • 投入少。应用不改,人力、资源、成本投入少,极大降低了国产数据库替换成本。河南移动营业核心库的分布式改造和以往数据库的替换方式不同,不仅自有人员和应用开发商投入特别少,而且核心营业库的替换所需测试资源只有 OceanBase 数据库的资源,先将 OceanBase 生产库的资源做测试库,做完适配验证、性能压测觉得可行后再转为生产库,就不需要搭建一套完整的测试环境;

  • 替换快。生态不变,脚本不变,免学习,替换快,大库两个月、小库一个月。河南移动有 1500 万的营业核心大库,两个月就替换完毕;

  • 割接稳。风险不升,应用适配、性能测试 360 度全覆盖,生产上线后性能和上线前压测一致;

  • 性能超。实现性能不降,缓存提效,连接增效,最佳配置模型,硬件加速,数据压缩比高。

营业系统核心数据库上线 OceanBase后,河南移动运行效果也比较亮眼。下图为割接前后对比,主要分为 SQL 执行性能对比和数据库性能对比。


SQL 执行性能对比显示,通过跟踪业务整体运行、高峰时段运行,对比 Oracle 与 OceanBase SQL 平均执行时长,割接上线由平均 2.515 毫秒降低为 1.626 毫秒,性能整体提升 35.35%;通过跟踪核心 CBOSS 业务运行情况,对比多天 Oracle 与 OceanBase SQL 执行时长,割接上线后由原来平均 116 毫秒降低为 114 毫秒,平均节省 2 毫秒。

数据库性能对比显示,通过总线连接收敛能力,业务连接数 10760+ 不变的情况下,使用 OceanBase 进一步将数据库活跃连接数由原来的 4765 压降至 2140 ,数据库连接收敛比提升 45.4%。替换完成后,经历多个账期测试发现,整体业务运行稳定,数据库集群的平均资源利用率从 7%-10% 提升至 12%-20%,资源利用率大大提升。

从 2023 年 12 月份至今,河南移动核心营业系统稳定运行,平稳支撑多次月初、月末的流量高峰;与此同时,数据库集群平均的资源利用率也非常稳定,较原有集中式数据库的 CPU 利用率提升 8%-9%。

3. 自研轩辕数据总线中间件产品助力数据库升级

此前,河南移动 CRM 系统数据库现网的部署架构为集中式,各个应用系统通过数据总线连到后端 Oracle,该架构共 6 个 Proxy 节点,中间通过 SAN 路由交换机连接后端的全闪存阵列,这种配置较此前 Oracle 小型机+集中的高端存储性能提升明显。


原集中式数据库共 6 个 RAC 节点,共享存储 40TB,实际使用 15TB 左右,新分布式架构将 9 个计算存储合并为一个节点,总存储量 57TB。得益于 OceanBase 的数据压缩功能,三副本架构最终实际使用 15TB 左右,总占用容量和原库基本持平。

新架构前端应用先连接轩辕数据总线,再连到后端 OceanBase,共有 12 个节点,分为三个部分,每个部分有 3 个计算与存储一体的节点,和 3 个 OCP 管理节点,从新架构可以看出将路由器和比较昂贵的高端存储进行优化后,硬件成本得到一定下降,其数据库容量也有了显著提升。通过性价比高的本地存储代替昂贵集中存储,OceanBase 全库数据压缩成效显著,告别容量焦虑。在数据库软件许可成本层面,单台 x86 主机的 License 费用仅为此前 1/50,成本也实现了大幅下降。

新分布式架构中的轩辕数据总线,作为河南移动自主研发的一款助力数据库国产升级的数据库中间件产品,以应用不改、性能不降、风险不升、生态不变为目标,通过在业务应用与数据库之间增加一层“数据总线”抽象层,将国产数据库升级中的四大难题上移至轩辕数据总线层解决,以此助力大规模高并发场景 OLTP 数据库平滑国产升级,具有“投入少、替换快、割接稳、性能超”四大优势。

  • 应用不改:不仅仅 JAVA 应用不改,C、C++应用,sqlplus、sqlldr、python 脚本及配置全部不改,经过 1.5 万个以上的生产程序检验以及真实生产割接验证,实现了国产数据库无感知平滑上线的重大突破;

  • 性能不降:将性能调优的关注点从关注数据库单次访问性能上升到关注业务办理每笔交易的整体性能,针对性地创造了高效缓存技术和连接收敛技术两项创新点,使交易中访问次数下降 50%,连接数减少 80%,从而实现了国产库性能下降 40%的前提下,交易性能整体不降的重大突破。

  • 生态不变:针对国产库替换后开发、运维人员整体转型学习成本巨大的问题,打造了异构数据库混合组网能力和透明的数据库运维工具两项功能,新库可异构组网替换且完全继承 Oracle 技术生态,从维护脚本、告警报错、维护工具,全部访问如初,无需改变,开发、运维人员无需改变技术栈,实现了数据库升级过程中选择权提升和替换后生态不变的可持续性突破。

总的来说,基于轩辕数据总线架构,河南移动国产数据库上线分 4 个步骤:

第一步,应用接入数据总线,实现应用和数据库解耦,从总线侧获取全量生产应用 SQL;

第二步,部署国产数据库,作为生产测试库;

第三步,流量回放及测试,将 Oracle 流量引入对应国产数据库,进行兼容性和性能的适配测试;

第四步,一键切换,通过总线一键切换功能实现国产数据库的生产上线。


轩辕数据总线为河南移动节省了数千万应用改造费用,同时为数据库国产升级探索出了一条全新且可行的道路。

4. 实践经验应用适配与性能提升

当下,对于新建系统的国产数据库升级改造往往会选择基于新的数据库进行开发,以避免适配迁移等问题,包括河南移动在内的众多企业数据库系统国产升级往往是指存量系统的国产升级。

虽然很多国产数据库的兼容性都可以达到 90%以上,但不同应用因这些不兼容的差异改造工作量不同,应用改造费用评估标准很模糊,所以对于存量系统有升级改造需求的企业如何选型一款性价比高的数据库是一个避不开的难题。以河南移动为例,彭庆军介绍了其所在数据库团队的应用适配和评估流程。

第一步,识别改造工作量。传统方式是通过数据库厂商提供的评估能力确认数据库中有哪些不兼容的语句,然后让应用花费大量人力通过排查代码进行评估;河南移动评估方式是基于河南数据库中间件的评估方案,记录应用到后端数据库每个 SQL 的访问情况,先将整个 SQL 进行回放以筛选不兼容的 SQL,同时根据 SQL 的访问记录去反查每个不兼容 SQL 下有问题的应用进程,统计出每个应用进程有多少处不兼容点,初步确认迁移改造的工作量;

第二步,对不兼容或不适配的 SQL 语句进行中间件改写,使其符合目标国产数据库并且能够在该数据库顺利运行。在这个过程中,河南移动自研了一套中间件产品轩辕数据总线,助力此次国产数据库平稳高效升级;

第三步,性能测试。传统的性能压测无法面面俱到,往往是通过主要业务根据日常配比去做测试。而河南移动采用的是真实全仿真的测试,将包括营业系统在内的每一天的全量 SQL 语句,以 200、300 的高并发,分别在国产数据库上进行压力测试,并将测试出来的较慢的 SQL 与该数据库一起进行优化,通过评估后确认具备上线条件。

在河南移动营业系统应用适配和性能提升过程中,由于营业 A 库数据量及每日归档量较大,原传统集中式存储空间紧张,归档过早清理导致 OMS 增量同步任务经常中断。在迁移演练阶段,OMS 产品通过多次及时发版提升了同步效率,最终在正式割接期间平稳迁移完成,数据校验 100%一致。在特定统计场景营业日报业务内,河南移动对递归查询进行了优化,进一步适配了 OceanBase,性能获得了明显提升,目前的性能基本可以保证在 40 多秒内进行查询。

此外,河南移动还利用自研轩辕数据总线产品承担了主要适配改造工作,解决了兼容性相对比较弱的一些问题代码。比如面对高 CPU 利用率的函数切换到国产数据库经常会出现的一些难题,针对性地对 OceanBase 进行了一定程度的性能优化。

可以说对比上面所提到的“单程车票”改造方法,基于轩辕数据总线架构的国产数据库升级方式是一张“往返车票”,支持无感切换回原数据库。

5.写在最后

未来,河南移动将持续推进 B(业务支撑系统)/M(管理支撑系统)/O(网管支撑系统)全业务域升级改造,并结合特有轩辕数据总线产品,推进 OceanBase 生态构建。

彭庆军表示:OceanBase 经过了十年的内部打磨,又经过五年的外部推广,作为一款顶天立地的产品,其未来发展大有可为。此次河南移动自研的轩辕数据总线可以帮助千行百业解决场景差异的 SQL 适配问题。相信在轩辕数据总线的加持下,会让整个 OceanBase 分布式生态如虎添翼,为企业节省大量的改造费用,同时加快分布式数据库改造推广的进度,实现多赢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2178149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

扩散模型(2)--1

1.简介 生成模型通过学习并建模输入数据的分布,从而采集生成新的样木,该模型广泛运用于图片视频生成、文本生成和药物分子生成。扩散模型是一类概率生成模型,扩散模型通过向数据中逐步加入噪声来破坏数据的结构,然后学习一个相对应…

在Windows系统上安装的 Boost C++ 库

步骤一 https://www.boost.org/users/history/version_1_86_0.html 下载Boost库文件: 步骤二 安装: https://www.boost.org/doc/libs/1_52_0/doc/html/bbv2/installation.html 点击运行.\bootstrap.bat脚本在当前目录的powershell中执行:./b2 install --prefixPREFIX 然后…

优选拼团平台架构解析与关键代码逻辑概述

一、系统架构设计 唐古拉优选拼团平台采用多层架构设计,主要包括前端展示层、业务逻辑层、数据访问层及数据存储层。 前端展示层:负责用户界面的展示和交互,包括商品列表、拼团详情、订单管理等页面。前端采用现代前端框架(如Vue…

第十四周学习周报

目录 摘要Abstract1. LSTM的代码实现2. 序列到序列模型3. 梯度与方向导数总结 摘要 在上周的学习基础之上,本周学习的内容有LSTM的代码实现,通过对代码的学习进一步加深了对LSTM的理解。为了切入到transformer的学习,本文通过对一些应用例子…

JUC高并发编程4:集合的线程安全

1 内容概要 2 ArrayList集合线程不安全 2.1 ArrayList集合操作Demo 代码演示 /*** list集合线程不安全*/ public class ThreadDemo4 {public static void main(String[] args) {// 创建ArrayList集合List<String> list new ArrayList<>();for (int i 0; i <…

铺铜修改后自动重铺

很多初学者对于敷铜操作感到比较麻烦&#xff1a;为什么每次打过孔&#xff0c;修改走线后都需要手动右击-重新修改敷铜。如何提升layout的效率&#xff1f; 版本&#xff1a;Altium Designer 21.9.2 首先&#xff0c;点击面板右边的小齿轮&#xff0c;进入设置 接下来&#…

9.29学习

1.线上问题rebalance 因集群架构变动导致的消费组内重平衡&#xff0c;如果kafka集内节点较多&#xff0c;比如数百个&#xff0c;那重平衡可能会耗时导致数分钟到数小时&#xff0c;此时kafka基本处于不可用状态&#xff0c;对kafka的TPS影响极大 产生的原因 ①组成员数量发…

【C++并发入门】摄像头帧率计算和多线程相机读取(上):并发基础概念和代码实现

前言 高帧率摄像头往往应用在很多opencv项目中&#xff0c;今天就来通过简单计算摄像头帧率&#xff0c;抛出一个单线程读取摄像头会遇到的问题&#xff0c;同时提出一种解决方案&#xff0c;使用多线程对摄像头进行读取。同时本文介绍了线程入门的基础知识&#xff0c;讲解了…

2-107 基于matlab的hsv空间双边滤波去雾图像增强算法

基于matlab的hsv空间双边滤波去雾图像增强算法&#xff0c;原始图像经过光照增强后&#xff0c;将RGB转成hsv&#xff0c;进行图像增强处理&#xff0c;使图像更加清晰。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a; 2-107 基于matlab的hsv空间双边滤…

“找不到emp.dll,无法继续执行代码”需要怎么解决呢?分享6个解决方法

在日常使用电脑玩游戏的过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中最常见的就是“emp.dll丢失”。那么&#xff0c;emp.dll到底是什么&#xff1f;它为什么会丢失&#xff1f;丢失后会对我们的电脑产生什么影响&#xff1f;本文将为您详细解析emp.dll的概念…

超详细的华为ICT大赛报名流程

1、访问华为人才在线官网&#xff0c;点击右上角“登录/注册“&#xff0c;登录华为账号。 报名链接&#xff1a; https://e.huawei.com/cn/talent/cert/#/careerCert?navTypeauthNavKey ▲如已有华为Uniportal账号&#xff0c;完成实名认证后方可报名大赛。 ▲如没有华为…

【有啥问啥】具身智能(Embodied AI):人工智能的新前沿

具身智能&#xff08;Embodied AI&#xff09;&#xff1a;人工智能的新前沿 引言 在人工智能&#xff08;AI&#xff09;的进程中&#xff0c;具身智能&#xff08;Embodied AI&#xff09;正逐渐成为研究与应用的焦点。具身智能不仅关注于机器的计算能力&#xff0c;更强调…

需求5:增加一个按钮

在之前的几个需求中&#xff0c;我们逐步从修改字段到新增字段&#xff0c;按部就班地完成了相关工作。通过最近的文章&#xff0c;不难看出我目前正在处理前端的“未完成”和“已完成”按钮。借此机会&#xff0c;我决定趁热打铁&#xff0c;重新梳理一下之前关于按钮实现的需…

4、MapReduce编程实践

目录 1、创建文件2、启动HDFS3、启动eclipse 创建项目并导入jar包file->new->java project导入jar包finish 4、编写Java应用程序5、编译打包应用程序&#xff08;1&#xff09;查看直接运行结果&#xff08;2&#xff09;打包程序&#xff08;3&#xff09;查看 JAR 包是…

软硬协同方案破解IT瓶颈,龙蜥衍生版KOS助力内蒙古大学成功迁移10+业务软件 | 龙蜥案例

2024 云栖大会上&#xff0c;龙蜥社区发布了《龙蜥操作系统生态用户实践精选 V2》&#xff0c;为面临 CentOS 迁移的广大用户提供成熟实践样板。截至目前&#xff0c;阿里云、浪潮信息、中兴通讯 | 新支点、移动、联通、龙芯、统信软件等超 12 家厂商基于龙蜥操作系统发布商业衍…

【在Linux世界中追寻伟大的One Piece】命名管道

目录 1 -> 命名管道 1.1 -> 创建一个命名管道 1.2 -> 匿名管道与命名管道的区别 1.3 -> 命名管道的打开规则 1.4 -> 例子 1 -> 命名管道 管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据&…

串行化执行、并行化执行

文章目录 1、串行化执行2、并行化测试&#xff08;多线程环境&#xff09;3、任务的执行是异步的&#xff0c;但主程序的继续执行是同步的 可以将多个任务编排为并行和串行化执行。 也可以处理编排的多个任务的异常&#xff0c;也可以返回兜底数据。 1、串行化执行 顺序执行、…

C++类和对象(下) 初始化列表 、static成员、友元、内部类等等

1.再探构造函数 之前使用构造函数时都是在函数体内初始化成员变量&#xff0c;还有一种构造函数的用法&#xff0c;叫做初始化列表&#xff1b;那么怎么使用呢&#xff1f; 使用方法用冒号开始(" : ")要写多个就用逗号(" , ")隔开数据成队列每个成员变量后…

DC00023基于jsp+MySQL新生报到管理系统

1、项目功能演示 DC00023基于jsp新生报到管理系统java webMySQL新生管理系统 2、项目功能描述 基于jspMySQL新生报到管理系统项目分为学生、辅导员、财务处和系统管理员四个角色。 2.1 学生功能 1、系统登录 2、校园新闻、报到流程、学校简介、在线留言、校园风光、入校须知…

解决Qt每次修改代码后首次运行崩溃,后几次不崩溃问题

在使用unique_ptr声明成员变量后&#xff0c;我习惯性地在初始化构造列表中进行如下构造&#xff1a; 注意看&#xff0c;我将m_menuBtnGroup的父类指定为ui->center_menu_widget&#xff0c;这便是导致崩溃的根本原因&#xff0c;解决办法便是先用this初始化&#xff0c;后…