河北移动:核心系统数据库成功完成整体迁移 ,实现全栈国产|OceanBase案例
本文作者:移动通信集团河北有限公司架构规划专家,房瑞
项目背景:
中国移动通信集团河北有限公司一直在积极响应国家及集团的号召,以磐舟&磐基云原生为底座,结合国产浏览器、中间件、数据库、操作系统和服务器等,构建起完全自主掌控的支撑系统。同时,积极深化生态合作与创新,不断完善IT自主掌控评价体系,以促进产业链生态的健康发展。
2023 年 11 月,河北移动核心营业系统(唐山)完成了 OceanBase 国产数据库的上线。OceanBase 集群采用同城双机房主备架构,主集群为 X86 架构,备集群为 ARM 架构。
2024 年 5 月 20 日之前主集群(x86)对外提供服务,5 月 20 日 IT 中心顺利完成核心营业系统数据库由 x86 服务器迁移至 ARM 服务器,核心营业系统首次完成从前端应用到后端服务器全栈国产目标。自上线以来,系统运行稳定,各项性能指标与原架构持平,部分指标高于原架构,达成项目设计要求。
一、以分布式数据库为抓手,全面推动国产升级
河北移动从 2000 年至 2020 年,近二十年的时间,营业、计费等核心系统一直运行在传统集中式数据库之上,在一定的数据量下、在强大的硬件资源加持下,数据库性能表现良好,系统运行稳定。
随着近十年,业务数据量的暴涨,云计算的发展,传统集中式数据库在业务系统整体架构中越发乏力。
一是算力无法横向扩展。随着数据量的增加,原有的传统集中式数据库在算力上无法实现横向扩展,不能满足未来业务系统对性能的要求,需要引入分布式数据库解决算力动态扩容需求。
二是系统架构亟待升级。系统架构基于底层数据库架构,要满足未来 5 至 10 年的领先性,依靠数据库特性,实现应用云原生架构升级。底层数据库算力可根据业务系统动态实现扩缩容,保证系统的可扩展性,高效性、安全性要求。
加之当前核心技术的相关风险,河北移动积极探索系统架构升级方案,以分布式数据库为抓手,全面推动国产升级。
二、运营商为什么都在选择 OceanBase
2021 年,河北移动率先启动技术探寻,与 OceanBase 开展技术交流和方案验证。2022 年 5 月,开始启动核心系统数据库升级工作。2023 年 3 月,确定以营业系统(唐山)为 B 域核心系统国产化数据库实施范围。
OceanBase 原生分布式数据库满足核心库国产要求的同时 ,还适配主流的国产芯片、国产操作系统、国产中间件,可实现应用系统的全栈国产。
河北移动最终选择 OceanBase 经过多方综合评估,主要原因有以下:
第一,高度兼容传统集中式数据库语法,应用改造适配成本低。OceanBase 一套数据库引擎同时高度兼容传统集中式数据库,覆盖绝大多数常见功能,支持过程语言、触发器等高级特性,河北移动核心营业系统(唐山)对传统集中式数据库兼容率为 99.9%以上,极大降低应用的迁移成本。下表为兼容性评估:
第二,极致降低核心库存储成本,性能无损的数据压缩。在传统的 B 树存储结构下的数据库中,数据压缩可能会给数据写入带来 CPU 的计算压力,影响写入性能。但 OceanBase 的 LSM-Tree 架构使数据的压缩只发生在合并阶段,不会影响数据的写入,加上自研混合列压缩编码能更好提高压缩率,同一业务量下相比传统集中式数据库能降低 70% - 90% 存储成本。
河北移动的核心营业系统(唐山)在传统集中式数据库端的数据量 11051G,升级到 OceanBase 后仅为 2699G,存储成本降低 76%。下表为存储空间评估:
三、两个阶段,核心营业系统全栈上线
为保障核心营业系统能够平稳运行在全栈国产之上,安全可靠,彻底解决以往高度依赖非自研技术的风险。从系统建设目标、应用、数据库多方统筹,采用两个阶段完成建设目标。
在迁移工程中,河北移动通过借助集团磐舟能力,有效解决数据库国产过程中应用代码频繁发布难题,代码从上传-编译-镜像打包,推送到磐基 PaaS 平台,均通过可视化界面进行操作,简单直观。同时搭配流水线配置,实现全过程高效的可持续化自动运行。
○ 第一阶段完成:应用全栈+数据库国产
○ 第二阶段完成:数据库由 x86 服务器迁移至 ARM 服务器
第一阶段完成:应用全栈+数据库国产
部署架构:
○ 前端负载去除国外负载均衡设备,采用 DNS+OceanBase JDBC Loadbalance+代理构成,其中 DNS 提供域名服务,负载均衡能力由 JDBC Loadbalance 提供,代理 proxy 多节点部署,进行路由转发;
○ OceanBase 部署服务器全部安装国产自研操作系统 BCLinux for 欧拉 21.10 版。
○ OceanBase 主集群基于 x86 服务器部署。备集群基于 ARM 服务器部署备库。主集群采用 3-3-3 模式部署,包含 3 副本,每个副本由 3 台服务节点构成,一个副本包含一份完整的数据。
依托该架构及 OceanBase 数据库机制,实现集群内高可用能力。少数派服务器宕机、单副本不可用,集群均可正常对外部提供服务,保证应用系统稳定运行。
备集群除用于日常切换演练之外,还承担部分业务流量、当主库故障后,备库可承载全部业务流量,保障应用系统稳定运行。
第二阶段完成:核心营业系统数据库迁移至 ARM 服务器
本次迁移基于 OceanBase 数据库容灾能力,通过在 ARM 服务器搭建容灾系统实现全自动无损数据复制,确保数据实时追平。
5 月 20 日割接当晚,通过一键切换主备集群,实现核心营业系统数据库由 x86 服务器迁移至 ARM 服务器的高效、顺畅迁移。这也是核心营业系统首次完成从前端应用到后端服务器全栈国产目标,迁移方式顺畅稳定。
为保障本次迁移顺利完成,河北移动牵头成立了“业务专家+OceanBase 数据库架构+ARM 主机架构”小组进行攻关,在业务优化、数据库优化、ARM 主机优化三个方面制定优化措施,迁移准备工作进行验证充分。
本次割接准备工作历时 2 个月,共编制割接相关手册 5 份,准备 2 套应急方案,历经 2 轮模拟验证,发现和解决技术问题 3 项,优化迁移步骤 1 项,保证迁移过程严谨高效。
深入挖潜 ARM 国产服务器性能。充分考虑营业场景下,ARM 服务器存在性能下降风险,项目组通过优化测试模型,加大测试样本,经过 310 余次多系统混合压力测试,挖潜 ARM 服务器性能,最终确定 7 项性能优化手段。上线后,保障系统性能指标优于安全水位。
截止目前,系统指标健康,未产生业务投诉。本次数据库服务器的国产升级,为后续推进自主掌控升级奠定基础。
四、全栈国产升级后,河北移动各项收益显著
(一)先进架构满足未来 5-10 年发展需求
河北移动依托 OceanBase 的原生分布式架构,可节点横向扩展、弹性扩缩容、多租户管理、数据多副本强一致等特性,满足未来 5 至 10 年的业务发展需要。
一方面,可快速推进应用云原生架构升级。应用云原生、OceanBase 相结合实现业务负载和数据库负载全部自动弹性伸缩,具备同城双活、两地三中心单元化应用多活能力。
一方面,收获系统长期的高可用、性能稳定高效。OceanBase 数据库采用基于无共享(Shared-Nothing)的多副本架构,让整个系统没有任何单点故障,保证系统的持续可用。河北移动对核心营业系统(唐山)包括前端应用、外围渠道、后台进程、周边配套四大类共计 754 个用例进行性能压测,压测指标均优于原传统集中式数据库。上线后,应用系统稳定,数据库节点 CPU 使用率 30%左右。
(二)形成标准化的项目推广复制
随着河北移动核心营业系统(唐山)的顺利上线,沉淀了《业务系统调研方案》、《数据库部署方案》、《应用适配改造方案》、《国产库运维方案》、《系统割接方案》等一系列标准方案,使整个国产项目标准化、可复制化。
依托标准化的操作,可复制到河北移动全域业务系统中,加速推进业务系统的国产升级落地。以河北移动 CRM 系统营业 C 库为例,系统在 2 个月左右的时间可完成国产数据库上线。
(三)应用改造、存储、运维等各项成本明显降低
河北移动受益于 OceanBase 高度兼容传统集中式数据库的特性,解决了项目初期关注的三个成本因素:应用改造成本、硬件投入成本、运维成本。
○ 应用改造成本基本为零:核心营业系统(唐山)对传统集中式数据库的兼容率为 99.9%以上,本次应用开发商只做极少量的应用改造,大大降低了改造成本。
○ 硬件投入成本降低:原系统 11051G 的数据量迁移到 OceanBase 后只需 2699G,存储成本降低 76%。
○ 运维成本降低:数据库运维人员、包括研发人员可将原传统集中式数据库的使用经验完全应用到 OceanBase 之上,减少学习成本。OceanBase 单集群多租户架构,可快速将传统集中式数据库的数据迁移至 OceanBase 统一管理运维,降低运维成本。
(四)培养核心技术骨干,形成人才梯队
通过核心系统全栈国产升级,河北移动培养出一批国产技术骨干,特别是国产数据库操作、管理和运维的人员,并形成人才梯队,实现国产自主能力,并逐步推广到全省。
相关文章:

河北移动:核心系统数据库成功完成整体迁移 ,实现全栈国产|OceanBase案例
本文作者:移动通信集团河北有限公司架构规划专家,房瑞 项目背景: 中国移动通信集团河北有限公司一直在积极响应国家及集团的号召,以磐舟&磐基云原生为底座,结合国产浏览器、中间件、数据库、操作系统和服务器等&a…...
ZKRollup
目录 ZKRollup 基本概念 运作原理 特点与优势 应用场景 典型项目 ZKRollup ZKRollup,全称为Zero-Knowledge Rollup,是一种基于零知识证明的二层扩容方案(Layer 2)。它旨在通过提高交易处理效率和降低交易成本来扩展区块链网络的能力,尤其是在以太坊等区块链平台上得…...

letcode 分类练习 树的遍历
letcode 分类练习 树的遍历 树的构建递归遍历前序遍历中序遍历后序遍历 迭代遍历前序遍历中序遍历后序遍历 层序遍历层序遍历可以解决的问题107. 二叉树的层序遍历 II199. 二叉树的右视图637. 二叉树的层平均值429. N 叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的…...

redisssion分布式锁
分布式锁的问题 基于setnx的分布式锁实现起来并不复杂,不过却存在一些问题。 锁误删问题 第一个问题就是锁误删问题,目前释放锁的操作是基于DEL,但是在极端情况下会出现问题。 例如,有线程1获取锁成功,并且执行完任…...

嘎嘎嘎拿到去年想要的包
一年多了 继续,把项目收尾吧 好好学前端,外企!react!从0开始,紧迫!加油!...

前奏编曲:如何编写二段式前奏
选好音源 Pianoteq 6 STAGE比较明亮些,适合做前奏的音源 确定和弦进行 比如4536251,每个小节2和弦,每个小节的和弦弹一下 优化和弦进行衔接和织体 二段式不用对和弦进行就近解决的处理,因为前奏前后要形成对比。 前半部分往…...
征服云端:Kubernetes如何让微服务与云原生技术如虎添翼
引言 在这个数字化转型的时代,微服务架构已经成为构建现代应用程序的首选方式。它不仅提高了开发效率,还增强了系统的可扩展性和灵活性。而随着云计算技术的迅猛发展,云原生的概念逐渐深入人心,它代表了一种全新的软件开发方法论…...

开源AI智能名片系统与高级机器学习技术的融合应用:重塑商务交流的未来
摘要:在数字化浪潮的推动下,人工智能(AI)技术,尤其是机器学习领域的快速发展,正深刻改变着各行各业的面貌。开源AI智能名片系统作为这一变革的先锋,通过集成并优化多种高级机器学习技术…...
Java中synchronized的偏向锁是如何减少锁开销的
偏向锁(Biased Locking)是一种优化 Java synchronized 锁的机制,旨在减少在无竞争情况下的锁开销。它通过将锁偏向于单个线程来优化锁的性能。以下是偏向锁减少锁开销的具体方式和原理: 偏向锁的工作原理 锁的初始状态: 当一个对…...
react18 + ts 使用video.js 直播.m3u8格式的视频流
一、安装依赖 我使用的video.js版本是8.17.3,从 Video.js 7.x 开始,HLS 支持被内置到了 Video.js 中所以不需要安装其他依赖 npm i video.js 二、创建VideoPlayer组件 import React, { useEffect, useRef } from react import videojs from video.js …...

使用 onBeforeRouteLeave 组合式函数提升应用的用户体验
title: 使用 onBeforeRouteLeave 组合式函数提升应用的用户体验 date: 2024/8/14 updated: 2024/8/14 author: cmdragon excerpt: 摘要:本文介绍了在Nuxtjs中使用onBeforeRouteLeave组合式函数来提升应用用户体验的方法。onBeforeRouteLeave允许在组件离开当前路…...

uni-app 吸顶方案总结
效果 页面级 uni.pageScrollTo 官方文档:https://uniapp.dcloud.net.cn/api/ui/scroll.html#pagescrollto 原生头部导航 uni.pageScrollTo({selector: #tabs,duration: 300 });(推荐)需要兼容自定义头部导航 <template><view id"demo1" :styl…...

【C#】知识汇总
目录 1 概述1.1 GC(Garbage Collection)1.1.1 为什么需要GC?1.1.2 GC的工作原理工作原理什么是Root?GC算法:Mark-Compact 标记压缩算法GC优化:Generational 分代算法 1.1.3 GC的触发时间1.1.4 如何减少垃圾…...

1、Unity【基础】3D数学
3D数学 文章目录 3D数学1、数学计算公共类Mathf1、Mathf和Math2、区别3、Mathf中的常用方法(一般计算一次)4、Mathf中的常用方法(一般不停计算)练习 A物体跟随B物体移动 2、三角函数1、角度和弧度2、三角函数3、反三角函数练习 物…...
虚拟机ubuntu22的扩容记录
这里lsblk命令能看到, ubuntu逻辑分区只有29G, 但总分区60G,还有接近30G未使用。 rootx:/home/x# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 63.9M 1 loop /snap/core2…...
Docker 常用配置
Docker 常用配置 1. 配置方法 修改下面位置: Linux:vim /etc/docker/daemon.jsonmacOS:菜单栏图标->Settings->Docker Engine 注意:修改完需要重启Docker Linux:systemctl restart dockermacOS:…...
通过示例了解 .NET Core 中的依赖注入
依赖注入 (DI) 是一种用于实现 IoC(控制反转)的设计模式,可以更好地解耦应用程序内的依赖关系并更轻松地管理它们。.NET Core 内置了对依赖注入的支持,提供了一种有效管理依赖关系的强大方法。 一.什么是依赖注入? 依…...
fetch、FormData上传多张图片
利用fetch方法和FormData对象上传多张图片 formdata()对象可以序列化多张图片 <html><head><meta http-equiv"content-type" content"text/html;charsetUTF-8"/><title>测试fetch和formdata上传多张图片</title></head&…...

C++STL详解(五)——list类的具体实现
一.本次所需实现的三个类及其成员函数接口 链表首先要有结点,因此我们需要实现一个结点类。 链表要有管理结点的结构,因此我们要有list类来管理结点。 链表中还要有迭代器,而迭代器的底层其实是指针。但是我们现有的结点类无法完成迭代器的…...

鸿蒙(API 12 Beta3版)【使用投播组件】案例应用
华为视频接入播控中心和投播能力概述** 华为视频在进入影片详情页播放时,支持在控制中心查看当前播放的视频信息,并进行快进、快退、拖动进度、播放暂停、下一集、调节音量等操作,方便用户通过控制中心来操作当前播放的视频。 当用户希望通…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...