云集电商:数据库的分布式升级实践|OceanBase案例

news2025/5/25 17:17:20

电商行业对数据库有哪些需求

云集电商作为一家传统电商企业,业务涵盖了美妆个护、服饰、水果生鲜、健康保健等多个领域,在创立四年后在纳斯达克上市(股票代码:YJ)。与京东、淘宝、拼多多等电商平台不同,云集电商采取的是基于社群的社交驱动会员电商模式,主要服务于B端客户。

云集电商通过云集(包括App和小程序)以及云集健康(小程序)两大平台为会员提供服务。相较于其他互联网企业系统,电商企业的一大显著特点是频繁举办大促和秒杀活动,这些活动带来的瞬时高并发流量和高QPS对服务资源提出了极高的要求。此外,云集在选品推送、运营分析、财务数据分析及报表分析等方面,也依赖于大数据计算与分析技术。

因此,我们对数据库的需求首先是稳定性、高可用,其次是应对大促、秒杀场景的扩缩容能力,以及一些通用特性如高性能、高兼容、多中心部署、低成本、安全。此外,架构随着业务的发展逐渐变得复杂后,数据需要流转到大数据侧进行分析、计算后再传输回来,虽然数据算不上庞大,但过程也需要维护。我们希望能有一款支持HTAP场景的数据库来降低数据处理与分析的复杂性

云集电商应用分布式数据库选型历程

在云集电商成立初期,毫不犹豫使用了世界上应用最广泛的数据库之一的MySQL,所有业务都搭载在MySQL之上。不久,疯狂增长的交易量使财务数据、对账数据迅速膨胀,而MySQL的性能、扩展能力与应对批量数量处理的能力有限,经过我们DBA团队和开发团队的一致决定,需要引入分布式数据库来支撑业务需求。

由于云集电商是在阿里云上,所以选取了阿里云生态中的HybridDB,基本能够满足当时的业务需求。后续因为战略调整,从阿里云迁移至腾讯云,但腾讯云上没有可用的分布式数据库,所以经过调研后选用TiDB数据库作为归档库,以及在边缘业务中应用。这时已完全弃用了HybridDB,业务主要是MySQL,同时对帐数据使用TiDB。

从2020年到2023年,一些众所周知的原因,云集电商的业务量逐渐下降,成本压力成为我们首要解决的问题。彼时,我们使用腾讯云的CDB,业务微服务的架构导致MySQL实例1000+ ,CVM高峰期的实例接近3000个。针对每一个微服务的数据库实例,会有基础的一主一从,另外还会有一个用户从库,一个系统对应三个数据库实例。

同时,业务数据库通过Flink、Canal等组件输出到大数据进行统计分析,生成T+0、T+1的报表。再将分析数据同步回业务数据库,供用户查询,形成数据的循环。

复杂的业务架构与多实例带来的运营成本,使云集电商难堪重负,亟需优化。

由于在使用TIDB的过程中有一些问题,比如扩容后性能提升达不到预期,而且一些参数调整需要重启集群,有时候个别节点会启动失败。因此,出于稳定性考虑,我们没有将TiDB用于核心业务,因此在成本优化之际,便舍弃了这个产品。

在使用TiDB的时候,我认识了一个朋友,这个朋友在后来去了OceanBase任职,机缘巧合下我们就了解了OceanBase,发现其特性更符合我们的战略需求。

  • 稳定性强,可持续响应服务,保证整体业务的稳定。
  • 兼容性高,简化新技术和架构的应用,降低开发难度,减少学习成本。
  • 低成本,极致的数据压缩带来存储成本优化。
  • 高可用,多地多中心部署,容灾有保障。
  • 不过度优化,避免因过度优化而降低业务的波动能力。
  • OceanBase 的吞吐量和生态系统的支持良好。
  • 一体化的HTAP 能力能够满足业务高峰交易场景和分析场景的业务需求,简化原有架构,。
  • 水平扩展方便,资源利用灵活,同时解决大促场景中MySQL扩容切换导致的业务中断问题。

上文讲到我们最看重数据库的稳定性,OceanBase的稳定性业界闻名,我们就初步试用起来。

云集数据库迁移与成效分析

目前,我们已经将30+个业务迁移到了OceanBase数据库,包括社群系统、供应链、农场项目及其他业务,并且在规划迁移更核心的业务场景,订单系统,预计2025 年迁移完成。下文以其中的农场项目为例讲述迁移过程及收益,并分享其中的经验供大家参考。 

农场项目共有6台主实例,数据量13TB左右,由于是在线业务,在迁移时要求不影响线上用户的使用,最好无感知,同时,我们也希望不需要开发人员改动代码就能实现平滑迁移。另外,考虑到我们的业务生态、中间件如Canal,Flink CDC,还要求新的数据库即OceanBase能够兼容或支持。

明确的需求可以使迁移评估更加高效,基于上述要求,我们做了五项评估,分别是:

  • 中间件收集及版本检查,用于判断新数据库是否支持;
  • 检查帐号及连接IP等,收集业务访问,以便根据业务情况制定合适的迁移策略;
  • 查询新数据库中是否有定义函数,存储过程,触发器及字符集等,对于我们而言是禁用
    的,因为容易引发问题;
  • 迁移前处理慢SQL,进行资源评估,预估MySQL数据量迁移后的占用情况;
  • 评估总体兼容性和性能。

我们选择OceanBase的迁移工具OMS完成数据迁移和同步。OMS支持多种数据源,可以在线不停服进行迁移,性能也不错,还会进行多重数据校验,其原理如下图所示。

1730342004

而具体的迁移步骤分为六步。第一步即上文提到的业务检查。第二步做迁移准备,包括慢SQL及数据归档、字符集检查、资源评估、迁移测试链路等,其中如果发现了不支持的字符集,需要在迁移前转换,以保证迁移过程的稳定性。第三步是配置迁移任务,比如创建帐号、配置数据源、配置迁移链路、反向增量同步,然后开始第四步的数据同步,并监视此过程。第五步是,确认迁移结果,选择一个流量较少的时间段将业务重启,切换数据源。

在迁移完成后可能会涉及收尾工作,也就是第六步。对于云集而言,为了减少迁移的复杂性,从MySQL到OceanBase按表迁移,然后再做合库合表,因此,迁移完成后我们涉及同步连接关闭、资源释放、业务改造等收尾工作。在此过程中,我们也发现OMS 每次同步的表数量有限,大约3000个表。也遇到了一点挫折,在使用OBLogProxy时内存泄露,官方人员介入后修复了该问题。

总结

目前,我们已经迁移30+业务,40+MySQL实例,我们最看重的成本优化效果超出预期,服务器成本降低约45%,数据压缩率提高43%。在此之前某些业务的数据量已经突破了单机容量的上线,迁移到OceanBase后,受益于其极致的压缩率,这个问题也顺利解决。

在不久的将来,业务全部迁移完成后,得益于OceanBase的诸多特性,我们预估效果或者说期望达到的效果大概是:

  • 一体化的HTAP 的运用使得数据不再需要流转(ETL),直接当成数据仓库使用,极大地降低架构复杂度。
  • 多中心的部署方案直接满足等保需求,并借助多中心部署方案满足多活能力

对于一个企业而言,数据库替换就像心脏移植,充满未知与风险,因此,我们需要做好充足的产品选型与调研工作。对于云集电商而言,从MySQL到HybridDB,到在边缘业务试用TiDB,再到如今将大量业务迁移到OceanBase,经历了些许坎坷。希望本文的分享能为同行朋友提供参考意义,也欢迎同行朋友们留言交流。


OceanBase 云数据库现已支持 365天 免费试用,现在申请,体验分布式数据库带来全新体验吧 ~

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

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

相关文章

Lianwei 安全周报|2025.1.13

新的一周又开始了,以下是本周「Lianwei周报」,我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件,保证大家不错过本周的每一个重点! 政策/标准/指南最新动态 01 美国国土安全部发布《公共部门生成式人工智能部署手…

【江协STM32】11-2/3 W25Q64简介、软件SPI读写W25Q64

1. W25Q64简介 W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景存储介质:Nor Flash(闪存)时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)存储容…

RNN之:LSTM 长短期记忆模型-结构-理论详解-及实战(Matlab向)

0.前言 递归!循环神经网络Recurrent Neural Network 循环神经网络(又称递归神经网络,Recurrent Neural Network,RNN)。是一种用于处理序列数据的神经网络结构,具有记忆功能,能够捕捉序列中的时…

SOLID原则学习,接口隔离原则

文章目录 1. 定义2. 为什么要遵循接口隔离原则?3. 违反接口隔离原则的例子4. 遵循接口隔离原则的改进5. 总结 1. 定义 接口隔离原则(Interface Segregation Principle, ISP) 接口隔离原则是面向对象设计中的五大原则(SOLID&#…

Qt WORD/PDF(五)使用Json一键填充Word表格

关于QT Widget 其它文章请点击这里: QT Widget 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 姊妹篇: 《Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 操作》 《Qt WORD/PDF&#…

AIGC时代 | 探索AI Agent的奥秘:四种设计模式引领未来智能趋势

文章目录 1. 反思案例: 2. 工具使用案例: 3. 规划案例: 4. 多Agent协作案例: 总结作者简介:延伸阅读内容简介:目录 导读:AI Agent是指能够在特定环境中自主执行任务的人工智能系统,不…

消息队列使用中防止消息丢失的实战指南

消息队列使用中防止消息丢失的实战指南 在分布式系统架构里,消息队列起着举足轻重的作用,它异步解耦各个业务模块,提升系统整体的吞吐量与响应速度。但消息丢失问题,犹如一颗不定时炸弹,随时可能破坏系统的数据一致性…

Python爬虫-汽车之家各车系周销量榜数据

前言 本文是该专栏的第43篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前,笔者在文章《Python爬虫-汽车之家各车系月销量榜数据》中,有详细介绍,如何爬取“各车系车型的月销量榜单数据”的方法以及完整代码教学教程。 而本文,笔者同样以汽车之家平台为例,…

[C++]类与对象(上)

目录 💕1.C中结构体的优化 💕2.类的定义 💕3.类与结构体的不同点 💕4.访问限定符(public,private,protected) 💕5.类域 💕6.类的实例化 💕7.类的字节大小 💕8.类的字节大小特例…

Sprint Boot教程之五十八:动态启动/停止 Kafka 监听器

Spring Boot – 动态启动/停止 Kafka 监听器 当 Spring Boot 应用程序启动时,Kafka Listener 的默认行为是开始监听某个主题。但是,有些情况下我们不想在应用程序启动后立即启动它。 要动态启动或停止 Kafka Listener,我们需要三种主要方法…

《JavaWeb开发-javascript基础》

文章目录 《JavaWeb开发-javascript基础》1.javascript 引入方式2.JS-基础语法-书写语法2.1 书写语法2.2 输出语句 3.JS-基础语法-变量4.JS-基础语法-数据类型&运算符4.1 数据类型4.2 运算符4.3 数据类型转换 5. JS-函数6. JS-对象-Array数组7. JS-对象-String字符串8. JS-…

1.组件的三大组成部分注意点(结构/样式/逻辑)scoped解决样式冲突/data是一个函数2.组件通信组件通信语法父传子子传父

学习目标 1.组件的三大组成部分注意点(结构/样式/逻辑) scoped解决样式冲突/data是一个函数 2.组件通信 组件通信语法 父传子 子传父 非父子通信(扩展) 3.综合案例:小黑记事本(组件版) …

mapbox基础,expressions表达式汇总

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言二、🍀Expressions简介2.1 expressions 操作符2.1.1 Data expressions2.1.2 Camera expressions2.2 Expressi…

一文清晰梳理Mysql 数据库

现在处于大四上学期的阶段,在大四下学期即将要进行毕业设计,所以在毕业设计开始之前呢,先将Mysql 数据库有关知识进行了一个梳理,以防选题需要使用到数据库。 1)什么是数据库? 简单理解数据库&#xff0c…

基于大语言模型的组合优化

摘要:组合优化(Combinatorial Optimization, CO)对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化,找到最优解变得极具挑战性。在处理现实世界的工程问题时,基于纯数学推理的算法存在局限…

安装conda 环境

conda create -n my_unet5 python3.8 conda activate my_unet5

容器技术全面攻略:Docker的硬核玩法

文章背景 想象一下,一个项目终于要上线了,结果因为环境配置不一致,测试服务器一切正常,生产环境却宕机了。这是开发者噩梦的开始,也是Docker救世主角色的登场!Docker的出现颠覆了传统环境配置的方式&#…

LabVIEW部署Web服务

目录 LabVIEW部署Web服务1、创建项目2、创建Web服务3、新建WebVI3.1、使用GET方法3.2、使用POST方法 4、 部署和对应URL4.1、应用程序:80804.2、本地调试:80094.3、NI Web服务器:9090(禁用) 5、测试5.1、测试GET方法5.2、测试POST方法 6、实际…

STM32 : 波特率发生器

波特率发生器 1. 发送器和接收器的波特率 波特率寄存器 (BRR): 在串行通信中,发送器和接收器的波特率是由波特率寄存器(BRR)中的一个值 DIV 来确定的。 2. 计算公式 计算公式: 详细解释 1. 波特率寄存器 (BRR) BRR: 波特率寄存器是一…

Excel数据叠加生成新DataFrame:操作指南与案例

目录 一、准备工作 二、读取Excel文件 三、数据叠加 四、处理重复数据(可选) 五、保存新DataFrame到Excel文件 六、案例演示 七、注意事项 八、总结 在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFra…