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

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

云集电商作为一家传统电商企业,业务涵盖了美妆个护、服饰、水果生鲜、健康保健等多个领域,在创立四年后在纳斯达克上市(股票代码: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.mzph.cn/news/892601.shtml

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

相关文章

智能租赁系统提升效率与服务质量的全新解决方案

内容概要 智能租赁系统的崛起就像一场春雨,滋润着租赁行业的每一个角落。它通过先进的技术架构,结合数据管理,优化了以往繁琐的租赁流程,让整个过程如同顺畅的流水。比如,通过智能算法自动计算费用,使得用…

苹果手机(IOS系统)出现安全延迟进行中如何关闭?

苹果手机(IOS系统)出现安全延迟进行中如何关闭? 一、设置二、隐私与安全性三、失窃设备保护关闭 一、设置 二、隐私与安全性 三、失窃设备保护关闭

VxWorks [安装workbench之修改虚拟机Mac]

问题: 一、安装VMware 下载链接 [VMware 15 pro](https://segmentfault.com/a/1190000022562275)二、修改VMnet1的Mac ** 打开注册表 ** ctrl f 搜索VMnet1 增加字符串值 NetWorkAddress 00D6196C32 三、重启VMnet1 修改完成 四、重启 workbench

Redis十大数据类型详解

Redis(一) 十大数据类型 redis字符串(String) string是redis最基本的类型,一个key对应一个value string类型是二进制安全的,意思是redis的string可以包含任何数据。例如说是jpg图片或者序列化对象 一个re…

【从零开始使用系列】StyleGAN2:开源图像生成网络——环境搭建与基础使用篇(附大量测试图)

StyleGAN2 是英伟达团队 NVIDIA 提出的生成对抗网络(GAN)的一种改进版本。 它通过创新的网络架构,能够生成细节丰富、逼真的图像,特别在高频细节(如皮肤纹理、光照等)的表现上表现卓越。与传统 GAN 相比&am…

【三维数域】三维数据调度-负载均衡和资源优化

在处理大规模三维数据时,负载均衡和资源优化是确保系统高效运行、提供流畅用户体验的关键。这两者不仅影响到系统的性能和稳定性,还直接决定了用户交互的质量。以下是关于如何在三维数据调度中实现有效的负载均衡和资源优化的详细探讨。 一、负载均衡 负…

成功案例分享 — 芯科科技助力涂鸦智能打造Matter over Thread模块,简化Matter设备开发

芯科科技(Silicon Labs)的愿景之一是让开发者每天都能够更轻松地开发无线物联网(IoT)。特别是在拥有相同愿景的合作伙伴的帮助下,我们每天都在取得进步。但是要想弥合知识水平和物联网开发之间的差距仍会面临一定的挑战…

如何将 sqlserver 数据迁移到 mysql

文章目录 前言一、导出SQL Server 数据二、转换数据格式为MySQL兼容格式三、导入数据到MySQL数据库五、使用ETL工具六、通过 navicat 工具七、总结 前言 将 SQL Server 数据迁移到 MySQL 是一个常见的数据库迁移任务,通常涉及以下几个关键步骤:导出 SQL…

10Hive性能优化

10Hive性能优化 1Hive性能问题排查的方式1.1Hive底层原理:explain执行计划详解1.1.1 explain理论1.1.2 实践 2Hive性能调优的方式2.1. SQL语句优化1. union all2. distinct 2.2. 数据格式优化2.3. 小文件过多优化2.3.1解决hive小文件过多问题小文件产生的原因小文件…

安全规约、脱敏规范、敏感逻辑的保护方案、防止 SQL 注入

文章目录 I 强制性安全规约平台资源的防重放机制URL 外部重定向传入的目标地址必须执行白名单过滤。表单、AJAX 提交必须执行 CSRF 安全验证。禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。用户请求参数必须做有效性验证防止 SQL 注入用户敏感数据用户权限控制校验…

【数学】概率论与数理统计(五)

文章目录 [toc] 二维随机向量及其分布随机向量离散型随机向量的概率分布律性质示例问题解答 连续型随机向量的概率密度函数随机向量的分布函数性质连续型随机向量均匀分布 边缘分布边缘概率分布律边缘概率密度函数二维正态分布示例问题解答 边缘分布函数 二维随机向量及其分布 …

3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)

在上个版本Qt Quick-QML地图引擎之v4版本(新增多模型切换/3D模型欧拉角模拟)_qt加载3d地图-CSDN博客更新了3D模拟功能,在4.3版本增加动态轨迹线、三个地图(海图/天地图街道/天地图卫星)。 4.3版本已经支持qt6 cmake版本,而4.3版本以下支持qt5版本&#x…

数据结构:DisjointSet

Disjoint Sets意思是一系列没有重复元素的集合。一种常见的实现叫做,Disjoint-set Forest可以以接近常数的时间复杂度查询元素所属集合,用来确定两个元素是否同属一个集合等,是效率最高的常见数据结构之一。 Wiki链接:https://en…

vmware-ubuntu22.04配置虚拟机win10,重新上网成功

打开问题显示 Hardware配置 Options配置 最后的Advanced,第一次用了BIOS,然后启动中有更新,然后关闭,再用UEFI启动

【2024年华为OD机试】(B卷,100分)- 数组去重和排序(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。 输入描述 一个数组 输出描述 去重排序后的数组…

《零基础Go语言算法实战》【题目 2-10】接口的实现

《零基础Go语言算法实战》 【题目 2-10】接口的实现 请指出下面代码中存在的问题。 type Programmer struct { Name string } func (p *Programmer) String() string { return fmt.Sprintf("print: %v", p) } func main() { p : &Programmer{} p.String()…

C++ vtordisp的应用场景

文章目录 问题代码1. 基本概念回顾2. 应用场景虚继承与虚函数并存的类层次结构 3. 编译器相关考虑 问题代码 #include <iostream> using namespace std;class base { public:base() {}virtual void show() { cout << "base:: show"<<endl; } priv…

Git:merge合并、冲突解决、强行回退的终极解决方案

首先还是得避免冲突的发生&#xff0c;无法避免时再去解决冲突&#xff0c;避免冲突方法&#xff1a; 时常做pull、fatch操作&#xff0c;不要让自己本地仓库落后太多版本&#xff1b;在分支操作&#xff0c;如切换分支、合并分支、拉取分支前&#xff0c;及时清理Change&#…

2025网络架构

一、园区网络概述。 园区网络典型层次和区域&#xff1a; 核心层&#xff1a;是园区网骨干&#xff0c;是园区数据交换的核心&#xff0c;联接园区网的各个组成部分&#xff0c;如数据中心、管理中心、园区出口等。汇聚层&#xff1a;处于园区网的中间层次&#xff0c;完成数据…

Vue.config.productionTip = false 不起作用的问题及解决

文章目录 一、问题描述二、解决方法 一、问题描述 当我们在代码页面上引入Vue.js(开发版本)时&#xff0c;运行代码会出现以下提示&#xff0c;这句话的意思是&#xff1a;您正在开发模式下运行Vue&#xff0c;在进行生产部署时&#xff0c;请确保打开生产模式 You are runni…