万家数科:零售业务信息化融合的探索|OceanBase案例

本文作者:马琳,万家数科数据库专家。

万家数科商业数据有限公司,作为华润万家旗下的信息技术企业,专注于零售行业,在为华润万家提供服务的同时,也积极面向市场,为零售商及其生态系统提供全面的核心业务系统解决方案及运维服务。核心业务领域涵盖了数据服务与SaaS产品、业务洞察咨询服务、以及精准营销与相关服务。

1728975387

应对零售业务的技术挑战

华润万家是1984年在香港成立了第一家门店,至今已有40年的历史了。在整体零售业务的发展的过程中,系统从最初简单的进销存系统演变为如今多套系统的配合,比如物流供应链,会员系统、线上业务系统。但由于新老系统的交替运行积攒了各种各样的问题,我们总结为以下四类:

  • 多系统并行,导致数据孤岛。
  • 用户体验降低,由于线下门店与线上渠道的联动及业务融合,加上用户需求多样化,系统的响应速度与易用性逐渐难以满足用户要求。
  • 链路复杂,导致故障排查困难,产生性能瓶颈。
  • 系统可扩展性受限。受限于技术架构和成本压力,系统扩展能力较差。

挑战1:多系统并行。

这是一个绕不开的话题,跟随业务发展阶段的演变,系统也从最初的套装系统转变为Java定制开发,使用了多种不同的数据库,如IBM informix、Oracle、MySQL等。不同数据库的差异化非常大,以至于不同团队需要频繁沟通,制定统一交互协议,确保数据流转顺畅,这会耗费大量的时间和精力。

同时,对于各个系统之间的技术架构、数据格式、接口规范差异,也需要定制化开发适配器和中间件,增加了集成难度。长此以往,业务量在增长,各业务系统之间的资源耗费也随之加剧,带来了成本压力,各团队需要合理分配硬件资源、网络带宽,优化系统配置,减少资源冲突,提升整体性能。

挑战2:用户体验降低。

用户体验分为内部用户和外部用户,但总体而言,可以总结为三点要求。

第一,个性化需求。不同用户对系统的功能、界面、操作方式等有不同的需求,满足个性化需求难度较大。

第二,响应速度。用户要求系统的响应速度越来越快,尤其是在高并发情况下,但保证系统的快速响应是一个挑战。

第三,易用性。系统的复杂功能可能导致用户操作困难,降低用户体验。

挑战3:链路复杂。

由于各系统在数据传输过程中存在各种各样的问题。导致故障点难定位,需要经过多环节排查,增加修复时间,而且链路中某环节容易造成瓶颈,影响整体性能,需要优化资源配置。作为运维人员,利用监控手段定位问题,然而某些监控盲点需要一个更强大的运维团队做实时分析,这十分考验监控运维团队对业务的理解能力。

更关键的是复杂链路提升了被攻击的风险,加强安全防护措施,确保系统安全也是需要重点关注的。

挑战4:系统可扩展性受限。

原有的数据库由于其架构特性,难以应对业务增长后带来的性能需求,同时随着系统规模的不断扩展,代码的复杂度增加,导致维护难度加大。如果扩展系统,不仅需要投入大量的资金,还需要大量的人力资源支持,企业要面临的成本压力极大,这也成为了限制企业发展的主要矛盾。

应对策略与具体措施

数科技术团队选择从硬件、操作系统、数据库、开发思想等多方面入手,如硬件选择国产X86、ARM架构;操作系统选择如龙蜥、麒麟等国产可控系统;开发引入领域驱动设计思想(DDD)等,各方面持续优化现有软硬件架构。数据库选择上数科技术团队考察了很多数据库产品。并在调研后选择将原有的数据库替换为原生分布式数据库OceanBase(数据库选型与测评详见博客https://open.oceanbase.com/blog/9690209104)。

1728975466

引入新技术OceanBase的历程与收益

在2022年6月,万家数科引入OceanBase 3.x版本,并开始POC测试、核心系统验证,直至2022年12月。彼时了解到单机分布式一体化的OceanBase 4.0版本即将发布,便等到新版本发布后及时跟进了系统迁移测试,经过几个月生产环境的上线实践,取得的效果让我们非常满意。在2024年将大批系统迁移到OceanBase数据库,将其作为技术底座。

无论是新项目的生产与开发,还是旧项目的迁移,目前万家数科已有五六十个项目使用OceanBase,未来将有更多的项目建立在OceanBase数据库之上。具体收益总结为以下5点。

  • 成本节约:高压缩存储技术,原存储迁移后容量降低约60%,硬件成本节约50%,业务综合成本节约25%左右。
  • 资源有效利用率提高:使用集群汇聚多个实例,多租户资源隔离,减少资源碎片,充分利用资源。
  • 改善业务韧性,开发效率提升:优化业务架构,统一技术栈,降低开发难度,提升开发效率,增强业务稳态和扩展性。相比此前整个运维团队都忙于稳固MySQL集群,现在大家轻松多了。
  • 性能提升与混合分析:解除当前架构中的性能瓶颈,系统性能提升70%,同时支持实时报表查询,减少了数据链路开发与维护的工作,兼备混合分析场景的支持。
  • 运维效率提升:数据库平台化管理,支持DBA白屏化操作,提升了运维效率,降低了运维工具开发和运维成本。

数据库迁移经验解析

使用OMS(OceanBase迁移工具)进行数据库迁移方案。原MySQL集群是基于中间件的多实例分库分表集群迁移OceanBase。从迁移策略来说,使用OMS将多条链路分步汇聚到OceanBase。按照读写分离策略,先迁移读业务,后迁移写业务,这样的优点是系统稳定性较高,业务平滑地过渡至新系统。最大化地保障用户体验,让用户对系统变动无感知。

1728959052

在切割方案中,数科技术团队对读写业务进行应用改造以适配双数据源,设置合理的规则,在整个迁移过程中分批次进行业务迁移,直到迁移完成。

1728959074

这样做的好处是,可以把整个业务的迁移风险降到最低。第一步只是利用小部分流量做迁移测试,确定没问题后再进行后续步骤逐一迁移读写业务。每步迁移过程在10秒内即可完成业务迁移,对业务影响极低。

在迁移过程中,合库合表是较为棘手的问题,这是MySQL 分库分表集群迁移 OceanBase 必须考虑的问题。不仅需要对每张大表检查验证,确认每条数据的唯一性,并配置合适的大表分区键,确认热点 SQL 的性能最优,还要考虑历史数据能够快速卸载,保证运维清理能够简单高效。

该业务大表主键使用雪花算法,这种算法只能保证每一个DB有唯一性,在多个DB中有极小的概率会存在主键冲突。对于这种问题,如果是小表,可以通过查询、排除主键的方式来更改;如果是几十亿上百亿数据量的大表,使用排除主键法是不可行方案,会耗费大量资源,因此我们对主键做了一些改造,抛弃现有基于雪花算法的主键。新增了自增主键,并对所有DB的自增链设置了一个范围的起始值。这样能够保证在一定时间内数据库的主键不会冲突。而在这个时间段内,需要尽快合库合表并完成迁移。

1728959087

FLINK生态与OceanBase的结合

debezium格式是万家数科在推进Flink生态所采用的统一,而当时OMS V3版本不支持此格式,如果改造涉及上下游链路非常多预估改造工作量巨大。经过沟通OceanBase-OMS开发团队针对debezium格式进行了相应的开发与适配,保证项目的顺利进行,在此感谢OceanBase技术团队的倾力支持。

基于 BinLog 日志变更使用 kafka-connector 监听对集群数据进行实时捕获。需对每个 MySQL 节点进行日志监听,维护复杂难度大。任务调度不能保证实时性,推送延时大,业务量庞大时存在推送不及时、可靠性较差。

1728975289

下图基于OMS+Flink调度的流数据实时处理。取代了此前基于MySQL+Kafka的延时较高的任务调度模式。

1728959113

OMS 提供可视化的集中管控平台,界面化操作,可以基于时间点同步,维护成本低。同时使用 Flink 流实现实时数据处理逻辑。通过 Flink 的 StreamSink 和 TableSink 将处理后的数据实时推送到目标系统。确保目标系统支持实时数据的接收和处理。其 checkpoint 机制,实现任务的持续检查和恢复。在任务运行过程中,定期检查 checkpoint 状态,确保任务在异常情况下能够恢复到一致的状态。

OMS+Flink 方案保证了用户操作简单和数据实时性,整个数据流转可在 2s 内完成,保证每一笔数据消费都能准确实时可靠地推送至每一个用户。

优化案例解析

利用OceanBase丰富的生态体系极大地简化了监控运维的工作,不仅提升了运维管理细粒度,还提高了运维效率。

以OCP和ODC的性能优化为例。

问题出现:

某日凌晨,业务人员反馈在程序发布后,新增业务需求执行效率低下,该场景在UAT环境中性能稳定,上线后效率较之前降低几倍,造成业务单据压单,无法实时处理业务单据。

问题分析:

OCP:通过OCP-SQL诊断功能,发现该时间点TOPSQL中无明显慢SQL,通过与开发沟通得知该场景为高频SQL场景,平均响应时间慢几毫秒均会对业务产生影响,随即确定问题SQL。发现其并无相关索引问题呈现。

1728976056

ODC:将问题SQL 在ODC执行查询其实际执行计划,定位问题发现SQL存在较多RPC调用

1728977295

问题解决:

新建表组避免RPC调用。(下图为建立表组后的SQL执行计划基本信息,可见已没有RPC调用)

1728977349

使用中存在的问题

场景:

业务通过 INSERT INTO ON DUPLICATE KEY UPDATE 避免约束冲突

问题点:

此语法对于约束冲突数据处理方式:

MySQL 日志解析为UPDATE

OceanBase 日志解析为DELETE、INSERT

这对于数据传输下游而言是消费逻辑的转变,这种转变可能会使下游数据存在误差。目前没有找到有效的解决方案,只能尽量避免使用这种SQL语句,用其他语句代替,而这会带来额外的处理步骤。


在 OceanBase 2024年的发布大会中,将带来更多零售行业的应用实践分享,欢迎点击参与!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false提示: 树中节点数目在范围…

一款实现PLC扩展CANFD的好工具 — PXB-6020D协议转换器

如何轻松实现PLC扩展CAN FD?本文将简单介绍PLC上的CAN接口,并分享一款简单的好工具——PXB-6020D,它能帮助我们轻松实现从Modbus到CANFD的无缝转换。 在工业自动化领域,PLC(可编程逻辑控制器)是核心组件之一…

民宿在线预订:SpringBoot技术实践指南

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

基于SSM服装定制系统的设计

管理员账户功能包括:系统首页,个人中心,用户管理,服装类型管理,服装信息管理,服装定制管理,留言反馈,系统管理 前台账号功能包括:系统首页,个人中心&#xf…

Linux LCD 驱动实验

LCD 是很常用的一个外设,在裸机篇中我们讲解了如何编写 LCD 裸机驱动,在 Linux 下LCD 的使用更加广泛,再搭配 QT 这样的 GUI 库下可以制作出非常精美的 UI 界面。本章我们就来学习一下如何在 Linux 下驱动 LCD 屏幕。 Framebuffer 设备 先来…

基于vue框架的的点餐系统1o2te(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,商家,菜品分类,菜品信息 开题报告内容 基于Vue框架的点餐系统开题报告 一、研究背景与意义 随着移动互联网技术的飞速发展,餐饮行业也迎来了数字化转型的浪潮。传统的点餐方式,如纸质菜单和人工记录&…

Linux系统基础-文件系统

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-文件系统 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 回顾C语言…

【排序】——1.冒泡排序法(含优化)

冒泡排序 1.原理 左边大于右边交换一趟排下来最大的交换到右边来(接下来所以文章用升序举例) 从左到右,相邻元素进行比较。 每次比较一轮,就会找到序列中最大的一个(最小的一个——降序)。这个数就会从序列的最右边冒出来。 以…

《Spring Cloud Config与Bus整合实现微服务配置自动刷新》

目录 Config与Bus整合自动刷新步骤1:安装RabbitMQ并启动RabbitMQ的安装 步骤2:创建项目创建Eureka Server创建config-server 步骤3: 添加依赖步骤4:Config Client步骤5:测试运行问题一问题二 总结 Config与Bus整合自动…

SQL Server-导入和导出excel数据-注意事项

环境: win10,SQL Server 2008 R2 之前写过的放在这里: SqlServer_陆沙的博客-CSDN博客 https://blog.csdn.net/pxy7896/category_12704205.html 最近重启ASP.NET项目,在使用sql server导出和导入数据时遇到一些问题,特…

企业内训|LLM大模型技术在金融领域的应用及实践-某商业银行分行IT团队

本企业培训是TsingtaoAI技术团队专们为某商业银行分行IT团队开发的LLM大模型技术课程。课程深入分析大模型在金融行业中的发展趋势、底层技术及应用场景,重点提升学员在大模型应用中的实际操作能力与业务场景适应力。通过对全球商用 LLM 产品及国内外技术生态的深度…

Python基础学习——数据学习教程

本期内容主要是,帮助刚刚入门的新手小白们快速掌握 “numpy” 的常用功能,保证日常绝大多数场景的使用。可作为机器学习或深度学习的先修课程,也可作为快速备查手册。 > 教程原则如下: 偏实用高频 API展示实际用法简单直接使…

[AWS]RDS数据库版本升级

背景:由于AWS上mysql5.7版本不再支持,需要进行版本升级。 吐槽:每年都要来那么几次,真的有病一样,很烦。 步骤一、升级检查 AWS提供了一个python的升级检测脚本,可以按照一下脚本下载测试: [r…

Race Track Generator Ultimate:Race Track Generator(赛车场赛道看台场景创建工具)

下载:​​Unity资源商店链接资源下载链接 效果图:

SpringSecurity源码分析以及如何解决前后端分离出现的跨域问题

解决Security前后端分离出现的跨域问题 一. Security源码分析 首先在看源码之前我们先来看这张图 , 这张图展示了Security执行的全部流程 从上图可知Security执行的入口是UsernamePasswordAuthenticationFilter这个抽象类 , 那我们就先从该类进行分析 1. UsernamePasswordAu…

Jmeter简介

基础介绍 Jmeter录制脚本的原始是配置一个HTTP代理,然后浏览器通过这个代理访问测试页面从而完成脚本录制。 一、下载安装 jmeter本身不需要安装,需要配置环境变量JDK,然后打开bin文件夹中的jmeter.vbs即可。建议jdk 1.7及以上版本。 基本祖…

Python+Flask接口判断身份证省份、生日、性别、有效性验证+docker部署+Nginx代理运行

这里写目录标题 一、接口样式二、部署流程2.1 镜像打包2.1.1 准备工作2.1.2 build打包2.1.3 dokcer部署运行2.1.4 Nginx代理 三、代码及文件3.1 index.py3.2 areaCodes.json3.3 Dockerfile 一、接口样式 https://blog.henryplus.cn/idcardApi/idCard/query?idcard{idcard} 如果…

1.计算机网络_基本知识

基本知识 计算机网络的类别: 1、按作用范围来分类 2、按网络的使用者来分类 什么是计算机网络: 计算机网络由若干个节点和链接这些节点的链路组成,节点可以是计算机、集线器、交换机、路由器等。互联网络是多个网络通过路由器连接在了一起…

c语言基础程序——经典100道实例。

c语言基础程序——经典100道实例 001, 组无重复数字的数002,企业发放的奖金根据利润提成003,完全平方数004,判断当天是这一年的第几天005,三个数由小到大输出006,输出字母C图案007,特殊图案008&…

尊享挚爱之选:三好夫人高端养生茶,不仅仅是茶,更是爱的传递

三好夫人:吾扶丈夫凌云志,夫还贤妻万两金! 在追求品质生活的道路上,一份贴心、高端的礼物,不仅能彰显品味,更能传递深情厚意。今天,就让我们一起走进“三好夫人”高端养生茶的世界,探…