河北移动:核心系统数据库成功完成整体迁移 ,实现全栈国产|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版)【使用投播组件】案例应用
华为视频接入播控中心和投播能力概述** 华为视频在进入影片详情页播放时,支持在控制中心查看当前播放的视频信息,并进行快进、快退、拖动进度、播放暂停、下一集、调节音量等操作,方便用户通过控制中心来操作当前播放的视频。 当用户希望通…...
【STM32项目】在FreeRtos背景下的实战项目的实现过程(一)
个人主页~ 这篇文章是我亲身经历的,在做完一个项目之后总结的经验,虽然我没有将整个项目给放出来,因为这项目确实也是花了米让导师指导的,但是这个过程对于STM32的实战项目开发都是非常好用的,可以说按照这个过程&…...
C#垃圾处理机制相关笔记
C#编程中的垃圾处理机制主要通过垃圾回收器(Garbage Collector,GC)实现自动内存管理。C#作为一种托管语言,其垃圾处理机制显著减轻了程序员的内存管理负担,与C语言等非托管语言形成鲜明对比。具体介绍如下:…...
C语言memcmp函数
目录 开头1.什么是memcmp函数?2.memcmp函数的内部程序流程图 3.memcmp函数的实际应用比较整型数组比较短整型二维数组比较结构体变量…… 结尾 开头 大家好,我叫这是我58。今天,我们要学一下关于C语言里的memcmp函数的一些知识。 1.什么是memcmp函数?…...
低代码: 组件库测试之Vue环境下的测试工具以及测试环境搭建
Vue Test Utils Vue Test Utils 1 targets Vue 2. Vue Test Utils 2 targets Vue 3. 特别注意要使用 版本 2.0.0 以上 提供特定的方法,在隔离的话环境下,进行组件的挂载,以及一系列的测试 配置开发环境 手动配置, 是比较麻烦的vue cli 是基于插件架构的, 插件可以: 安装对…...
【Vue3】高颜值后台管理模板推荐
ELP - 权限管理系统 基于Vue 3框架与PrimeVue UI组件库技术精心构建的高颜值后台权限管理系统模板。该模板系统已成功实现基于RBAC(Role-Based Access Control)模型的权限管理系统和字典数据管理模块,后端则使用了Spring Boot框架࿰…...
详细介绍Pytorch中torchvision的相关使用
torchvision 是 PyTorch 的一个官方库,主要用于处理计算机视觉任务。提供了许多常用的数据集、模型架构、图像转换等功能,使得计算机视觉任务的开发变得更加高效和便捷。以下是对 torchvision 主要功能的详细介绍: 1. 数据集(Dat…...
AI部署——主流模型推理部署框架
我们以最经典的Yolov5目标检测网络为例解释一下10种主流推理部署框架的大概内容,省略模型训练的过程,只讨论模型转换、环境配置、推理部署等步骤。 Intel的OpenVINO — CPUNvidia的TensorRT — GPU/CPUOpenCV DNN Module — GPU/CPUMicrosoft ONNX Runti…...
PyTorch之loading fbgemm.dll异常的解决办法
前言 PyTorch是一个深度学习框架,当我们在本地调试大模型时,可能会选用并安装它,目前已更新至2.4版本。 一、安装必备 1. window 学习或开发阶段,我们通常在window环境下进行,因此需满足以下条件: Windo…...
Vscode——如何实现 Ctrl+鼠标左键 跳转函数内部的方法
一、对于Python代码 安装python插件即可实现 二、对于C/C代码 安装C/C插件即可实现...
力扣热题100_回溯_78_子集
文章目录 题目链接解题思路解题代码 题目链接 78. 子集 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入ÿ…...
深圳做模板网站/真实的网站制作
在HT for Web提供了一下几种常用的Editor,分别是: slider:拉条color picker:颜色选择器enum:枚举类型boolean:真假编辑器string:普通的文本编辑器除了这几种常用编辑器之外,用户还可…...
云南网站定制/高级seo
原文出处: PAWEL KLIMCZYK 译文出处:码农网/小峰 你已经对着电脑 n 个小时了。敲键盘正成为一种负担,你在想,键盘是否是西西弗斯推着的那块巨石。 伯乐在线转注:西西弗斯是希腊神话中的人物,与更加悲剧…...
威海城乡建设局网站首页/seo的中文含义
仅作个人记录 参考了网上的很多资料 文章目录构造、拷贝构造/赋值、析构构造函数和析构函数是否可以抛出异常什么时候生成默认构造函数(无参构造函数)?什么时候生成默认拷贝构造函数?什么是深拷贝?什么是浅拷贝&#x…...
网站建设费用高低有什么区别/网络推广软文
服务器用类似宝塔等管理软件可以吗?很多企业IT运维人员都存在这样的疑问,今天我们就来一起聊聊。 服务器用类似宝塔等管理软件可以吗? 对于个人站长/运维新手而言,一些简单运维的需求,完全可以使用类似宝塔等运维工具…...
做网站需要什么服务器配置/南宁百度seo推广
首先 继承是面向对象语言中最重要的一个概念 比方说 我现在有一个类 汽车类 现在我想要创在一个 法拉利类 首先法拉利他是车 它具备车型和制造商这样的属性 但是他可能具备一些新的属性 比如说 颜色 继承大白话的理解就是 你父亲生了你 ,你父亲(基…...
遵义市网站制作/平台推广费用
TinyXML是一个开源的解析XML的解析库,能够用于C,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。简单易用且小巧 玲珑,非常适合存储简单数据…...