又一关键系统上线!海底捞进销存系统登陆OceanBase,数据库整体成本节省50%

news2024/11/18 7:28:41

图片

2020 年,海底捞全面实现“云上捞”,将所有核心业务系统上云,全面推进企业数字化进程。而随着海底捞业务的不断增长,加上数智化转型构建全新的线上智慧服务,原有 IT 系统架构已经逐渐无法有效“驾驭”海量数据与突发流量洪峰,亟需更强有力的数据库进行底层支撑。

图片

每年七夕、双旦,都是海底捞最繁忙的时候。节日期间,不断涌入的顾客、高频的点餐需求、大量的菜品选配……各个环节产生的数据如潮水般涌来,极大地增加了数据库的运行负荷。海底捞原有的会员系统面临非常大的挑战,一旦出现故障将会严重影响门店会员的就餐体验,甚至发生过高峰期因数据库缓慢导致业务受到影响的情况。

这种潜在风险的问题根源在于数据库。海底捞原有数据库方案采用传统分库分表架构,在扩展性和稳定性上遇到瓶颈,难以应对数据井喷情况。OB Cloud 是 OceanBase 的云数据库产品,具备租户级、机器规格级、机器数量级的多级弹性伸缩能力,业务可以按需调整资源,数据库内部的均衡自动进行且业务无感。这就能够彻底解决海底捞对数据库扩展性、服务连续性的核心诉求。数据洪峰带来的压力也就迎刃而解。

2022 年 6 月,基于 OB Cloud 海底捞实现了新一代分布式会员系统升级。在当年的七夕节,从线上排号到点餐就餐,海底捞秒杀高峰稳定度过,用户体验如丝般顺滑。这也是海底捞多年来第一次在流量最高的七夕节中所有系统零故障。

与此同时,新的会员系统的智慧化程度更高,每一位会员在打开海底捞 APP 时看到的都是定制化内容,菜品推荐、促销信息、达人分享等内容都贴合个人兴趣,真正让顾客感觉海底捞的服务像老朋友一般。而这背后也是数据库强大的实时分析能力在进行支撑,搭载 OB Cloud 的会员系统,实时分析算力提升了 30%。

图片

在会员系统稳定运行 1 年后,今年海底捞与 OceanBase 的合作又拓展到另一个重要板块——进销存系统。进销存系统又称进货、销售和库存管理系统,用于管理企业库存流程,主要通过跟踪物料销售和库存的实时变化,控制库存成本,提高服务质量和销售效率。

图片

这对像海底捞这类餐饮零售企业的重要性不言而喻,以 2021 年上半年为例,海底捞仅在瓜果蔬肉类的采购总金额就超过了 28 亿元,覆盖新疆、贵州、云南等 29 个省市,数据体量异常巨大,丝滑的数据处理关系着食材品质和及时供应。但随着业务快速增长,使用传统数据库的进销存系统却面临越来越多的挑战。

第一, 数据一致性和业务连续性亟需提升

进销存系统的数据一致性和连续性非常关键。例如,门店销售单中的物料变动必须与库存模块的数量保持一致,如果不一致可能会导致产品过度销售或缺货。再例如,订单状态不明确,会导致客户服务不到位,影响客户满意度等。

传统数据库理论上存在主备切换时,丢数据和业务影响时间过长的弊病,实际运行过程中也出现过因主备切换异常,导致业务长时间受损的情况。

第二, 海量数据存储难运维,单行并发能力弱

进销存系统对接 POS 系统的所有销售订单,加之处理物料出库的全流程,例如销售、领用、废弃、调拨等,数据量处于各业务系统之首,个别流水表已达百亿级别。应对百亿大表的存储和 DDL 变更,以及单行高并发诉求,传统数据库力不从心。

如此规模的数据量已经逼近原数据库存储空间的上限。数据存储为一方面,更难应对的是如此大表的 DDL 变更,每一次变更可谓惊心动魄。不仅如此,库存场景的单行并发也面临极大挑战,由于个别热销商品库存变化非常快,单条数据需支持秒级 4000 次的最高变动频次,必须能做到实时分析汇总商品数量变化情况,以及时备货供应。

第三, 数据分析的实时性难以保证

进销存系统的报表和分析模块,负责对数据进行深入查询与分析,生成各种财务和业务报告,帮助门店理解业务情况,以及时调整经营策略,做出最符合市场变化的决策。

在数据库升级前,数据分析与在线业务使用异构数据库隔离,在线业务使用 MySQL 库,分析使用实时数仓,数据同步依赖 DTS。这就导致架构复杂运维难度高,海底捞需要维护两种异构数据库和同步链路,存在实时性风险,如果同步链路异常或者延迟,下游系统读到的统计数据就会不准确。 

图片

得益于双方在会员等系统的成功合作和出色体验,海底捞在数据量处于各业务系统之首的进销存系统上,同样坚定选择使用 OceanBase 的公有云产品 OB Cloud 进行数据库升级。

OceanBase 自研的一体化架构,兼顾分布式架构的扩展性与集中式架构的性能优势,用一套引擎同时支持 TP 和 AP 的混合负载。在单行高并发和复杂分析 AP 场景下,OceanBase 相比集中式数据库如 MySQL,性能提升数倍。升级至 OB Cloud 后,海底捞进销存系统面临的多重挑战迎刃而解。

图片

第一、 基于 Paxos 协议的强一致特性,保障每一笔物料数据不丢失,单节点宕机后 30 秒内快速完成选举,服务连续性大幅提升。

第二、 基于分区表的高可扩展性,通过简单的加节点形式即可提升存储容量,千亿级别的大表轻松存储,不再受限于单台机器的容量瓶颈。秒级无感 DDL 使得 DDL 运维难度不再区分于表的数据量,分区表和无感 DDL 解决了海量数据的存储与难运维问题。OceanBase 的提前解行锁(ELR)能力不改变事务应答机制,通过提前释放行锁机制提升单行并发度,发生节点宕机重启、Leader 切换仍然可以保证事务一致性,成为海底捞解决单行高并发痛点的最佳拍档。

第三、 基于全自研的 HTAP 分布式计算引擎,并结合多副本能力,一份数据上既能支持在线交易,又能支持复杂分析能力,让海底捞的架构得到简化的同时,成本也大幅下降。

图片

随着海底捞又一关键业务系统进销存搭载 OB Cloud 全新出发,加上会员系统等,海底捞核心业务系统实现了分布式架构的全面升级,在获得稳定性、高扩展性、简化架构的同时,业务发展也不再受限于基础数据服务。

数套承载海底捞海量数据的核心业务系统上线 OB Cloud,也让海底捞的系统实时分析算力提升 45%,数据库整体成本节省 50%,显著降本增效的同时,实现更从容丝滑地应对流量洪峰。

图片

未来,海底捞将继续与 OB Cloud 在云场景中合作,更多业务系统会跟进升级。相信海底捞与 OB Cloud 的组合,将为更多美食爱好者带去更新鲜可口的食材,让每一笔「热辣」都算数。

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

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

相关文章

Java之多线程和并发应用

多线程和并发应用 1. 概念与意义2. 多线程的实际应用场景2.1 网络通信2.2 数据库操作2.3 图片处理 3. 多线程的创建方式3.1 继承 Thread 类3.2 实现 Runnable 类3.3 实现 Callable 接口3.4 比较 Thread 和 Runnable3.5 线程同步与锁3.6 线程池 4. 并发编程的挑战和解决方案4.1 …

mysql存储过程定时调度

假设我们要创建一个简单的数据库,其中包含两张表:students 表和 courses 表,以及一个存储过程用于插入学生数据。下面是完整的建表语句、插入语句和存储过程: 1】建表 -- 创建 courses 表 CREATE TABLE courses (course_id INT …

【自然语言处理】大模型高效微调:PEFT 使用案例

文章目录 一、PEFT介绍二、PEFT 使用2.1 PeftConfig2.2 PeftModel2.3 保存和加载模型 三、PEFT支持任务3.1 Models support matrix3.1.1 Causal Language Modeling3.1.2 Conditional Generation3.1.3 Sequence Classification3.1.4 Token Classification3.1.5 Text-to-Image Ge…

OpenLayers入门,OpenLayers涂鸦手绘线条、圆形和多边形,涂鸦线条自动收尾连接成多边形

专栏目录: OpenLayers入门教程汇总目录 前言 本章再次讲解OpenLayers绘制图形功能,上一章中《OpenLayers图形绘制,OpenLayers实现在地图上绘制线段、圆形和多边形》我们已经讲过多种图形的绘制,本章主要讲解自由涂鸦手绘绘制线条,圆形和任意形状。 二、依赖和使用 &q…

Spring BeanPostProcessor 接口的作用和使用

BeanPostProcessor 接口是 Spring 框架中的一个扩展接口,用于在 Spring 容器实例化、配置和初始化 bean 的过程中提供自定义的扩展点。通过实现这个接口,您可以在 bean 实例创建的不同生命周期阶段插入自己的逻辑,从而实现对 bean 行为的定制…

微仓助力制造业数字化转型,实现高效智能供应链!

随着制造业数字化转型的浪潮迅猛涌现,为了应对日益复杂和快速变化的市场需求,制造企业面临着提高生产效率、降低成本、实现供应链高效运作的挑战。在这个数字化时代,微仓作为智能仓储解决方案,正发挥着关键的作用,成为…

verity cannot ... ‘/dev/block/dm-4‘ is read-only/ 证书cacerts系统目录

网上的说的一种做法是 su mount -o rw,remount / mount -o rw,remount /system cp /data/misc/user/0/cacerts-added/269953fb.0 /system/etc/security/cacerts/ rm /data/misc/user/0/cacerts-added/269953fb.0 reboot 但是我机子是android 12.0 提示 /dev/block/dm-4…

NKD:容器云集群与 OS 一体化运维利器

NKD 是 NestOS-kubernetes-Deployer 的缩写,是为了基于 NestOS 部署的 Kubernetes 集群运维工作准备的解决方案。其目标是在集群外提供对集群基础设施(包括操作系统和 Kubernetes 基础组件)的部署、更新和配置管理等服务。 1. 引言 Kuberne…

双栏排版中,[!b]等等的一些命令都不行啊

\usepackage{stfloats} Latex:图片、表格占据双栏排版的两栏时 的位置控制_latex stfloats_weixin_39450145的博客-CSDN博客目录1.问题:怎么在双栏排版中,让占据两栏的表格出现在页面顶端?2.解决:1)图片&a…

378. 有序矩阵中第 K 小的元素

378. 有序矩阵中第 K 小的元素 原题链接:完成情况:解题思路:参考代码:__378有序矩阵中第K小的元素__直接排序__378有序矩阵中第K小的元素__归并排序__378有序矩阵中第K小的元素__二分查找 原题链接: 378. 有序矩阵中…

中学高级本习集c++

第一章 回溯法 1.1 马拦过河卒 源程序名 knight.???(pas, c, cpp) 可执行文件名 knight.exe 输入文件名 knight.in 输出文件名 knight.out 【问题描述】 棋盘上A点有一个过河卒,需要走到目标B点…

山西电力市场日前价格预测【2023-08-10】

日前价格预测 预测明日(2023-08-10)山西电力市场全天平均日前电价为328.01元/MWh。其中,最高日前电价为366.62元/MWh,预计出现在20: 00。最低日前电价为283.28元/MWh,预计出现在13: 15。 价差方向预测 1: 实…

本质安全设备标准(IEC60079-11)的理解(六)温度

本质安全设备标准(IEC60079-11)的理解(六)温度 本质安全设备的温度要求也是非常复杂的,首先在标准中涉及有3个温度的概念: 环境温度ambient temperature, 工作温度service temperature和最高表…

聊聊机器人学习中的“资产”与“负债”(节选)

前言: 程序里面的bug,人生过程的bug,都非常让人烦躁的。 前一篇: 聊聊机器人学习中的“投资”与“消费”(节选) 有很多学生和朋友,越学越累,越活越累?这到底是为何&a…

Java | 包和内部类

目录 一、Java类包 1.1 类名冲突 1.2 完整的类路径 1.3 创建包 1.4 导入包 1.4.1 使用import关键字导入包 1.4.2 使用import导入静态成员 二、内部类 2.1 成员内部类 2.1.1 成员内部类简介 2.1.2 使用this关键字获取内部类与外部类的引用 2.2 匿名内部类 类除了具有…

无涯教程-Perl - getnetbyname函数

描述 此函数返回由NAME指定的网络信息(在列表context中)($name,$aliases,$addrtype,$net) 语法 以下是此函数的简单语法- getnetbyname NAME返回值 此函数在错误时返回undef,否则在标量context中返回网络地址,在错误时返回空列表,否则在列表context中返回网络记录(名称,别…

在软件测试中,如何有效地跟踪和管理缺陷?

在软件测试中,跟踪和管理缺陷是非常重要的,因为这有助于确保所有问题得到妥善处理,避免在产品发布后出现问题。以下是跟踪和管理缺陷的一些有效方法: 1.创建缺陷报告:当发现一个缺陷时,应该立即创建一个缺…

前端进阶js02----null和undefined的区别

1.相同点 1)都是原始类型的值且保存在栈中。 2) 在布尔运算中都会被认为是false 2.不同点 1)null是js的关键字,表示空值;undefined不是关键字,是一个全局变量。 2)值相同,但类型不一样 值相同&#xff1a…

Day 25 C++ queue 容器(队列)

文章目录 queue 基本概念定义注意基本概念队头(Front)——指向队列中最早添加的元素的位置。队尾(Rear)——指向队列中最后添加的元素的位置。入队(Enqueue)——将元素添加到队尾。出队(Dequeue…

Docker 方式 部署 vue 项目 (docker + vue + nginx)

1.安装好 nginx 。 2. 把 vue 项目的源码克隆到确定目录下。用 git 管理,所以直接 git clone 到既定目录就行了。 如我的目录是:/root/jiangyu/projects/gentle_vue/gentle_vue_code 。 3. 项目打包: npm run build 复制 会自动生成 dist…