从MySQL+MyCAT架构升级为分布式数据库,百丽应用OceanBase 4.2的感受分享

news2025/1/10 20:56:00

本文来自OceanBase的客户,百丽时尚的使用和测试分享

业务背景

百丽时尚集团,作为国内大型时尚鞋服集团,在中国超过300个城市设有直营门店,数量超过9,000家。集团构建了以消费者需求为核心的垂直一体化业务模式,涵盖了从时尚趋势研究、商品规划、设计创新、生产制造、商品管理、DTC零售到客户服务的整个价值链。在这一过程中,每个环节都充分运用数字化技术,以优化业务流程并提升效率。未来,集团还将继续加大科技投入,推动业务的持续创新和升级。

目前,零售、电商以及私域流量等业务线涉及在线订单和商品调度等,业务系统的技术架构使用MySQL+MyCAT的分库分表的架构,并使用orchestrator作为高可用的管理中间件。由于MyCAT架构下存在不支持分布式事务、分片业务调整困难和可扩展性差等问题,因此开始考虑使用分布式数据库,自2023年初测试OceanBase以来,发现其在分布式事务,分布式查询优化、水平可扩展性和周边工具生态方面表现优异,能够精准解决我们之前的痛点并且减少运维难度和成本。本文分享百丽测试和使用OceanBase4.2版本的感受。

一、MyCAT 使用痛点及解决方案

1. 聚合性能不稳定。

百丽时尚此前使用MyCAT+MySQL的分库分表架构,MyCAT作为分布式中间件在聚合查询场景的性能,尤其在多个分片的数据聚合方面的性能容易抖动。使用OceanBase后,其作为原生分布式数据库从根本上避免了这类问题。例如,在我们生产环境的一些真实查询场景中,MySQL需要10分钟以上,在OceanBase只需要1分钟左右,性能提升了10倍左右。

2. 数据分片调整困难。

在一些日常运维的过程中,我们会有业务要调整,而MySQL的分库分表架构调整起来非常困难。一方面会涉及数据的重分布,另一方面是DBA实操的复杂度较高且非常繁重。但是如果在OceanBase中,我们只需要调整表分区,OceanBase会自动对分区做重分布操作,操作非常简洁、讯速,极大地减少了DBA的整体工作量。

3.水平扩容较差。

集中式数据库的水平扩容无法满足不断增长的数据处理需求。而在OceanBase中,我们可以根据业务的实际需求和实际情况,有选择性的做水平扩容或垂直扩容,非常灵活。比如可以水平做租户资源,或者在集群级别添加OBServer节点;再比如扩容磁盘,我们数据盘的使用率较高,对磁盘扩容后,数据文件也会自动扩展。

二、原生分布式数据库方案的特点

从集中式数据库替换为分布式数据库,从MySQL分库分表架构替换为OceanBase单机分布式一体化架构,也让我们对新型分布式数据库的特点有了更加深入的理解,具体而言包括以下五点。

1.原生分布式事务的支持:通过2PC协议,保障事务一致性。

众所周知MyCAT不支持分布式事务,在一些极端场景下可能出现事务问题,比如1PC阶段这个事务成功了,但在2PC阶段事务失败了。OceanBase的高可用选举和日志同步协议基于Paxos一致性协议,任何决策的达成均需要多数派节点达成一致,实现了原生支持分布式事务,保证事务的一致性。

2.数据复制和冗余。

在MySQL中,需要部署一些主从节点来增加它的数据冗余,提高数据高可用,但这样做会增加一些运维成本。那么在OceanBase中是如何实现的呢?为了提高数据的可用性和容错性,分布式数据库通常采用数据复制和冗余策略。数据复制可以将数据副本存储在多个节点上,以防单点故障。例如在一个3节点的OceanBase集群中,数据有三个副本,每个 OBServer 存放一份,每个OBServer内都有一份完整的数据。保证单节点宕机的数据可靠性,实现RPO=0。

3.数据一致性和同步。

分布式数据库需要确保数据在不同节点间的同步和一致性。常用的方法包括分布式事务和数据复制机制,以保证数据的一致性和可靠性。我们使用MyCAT的时候,其实每个分片的数据是不一致的,此时无法保证数据一致性。而在OceanBase中,主从副本之间通过基于 Multi-Paxos 的分布式共识协议实现了副本之间数据的一致性。

4.分布式查询优化。 

由于数据存储在多个节点上,分布式数据库需要进行查询优化和查询路由,以最大程度地减少数据传输和查询延迟。关系数据表的数据以分区形式存放在系统的各个节点上,OceanBase 数据库的优化器会自动根据查询和数据的物理分布生成分布式执行计划。当单个查询的访问数据不在同一个节点上时,需要通过数据重分布的方式,相关数据执行分发到相同的节点进行计算,通过并发执行以提高执行效率。比如auto DOP会自动加一些并行。对于AP场景的业务来说,可以提高执行性能。

5.高可用性和容错性。

分布式数据库通常具有高可用性和容错性,即使某个节点发生故障,系统仍然可以继续提供服务。OceanBase每个节点都有一个数据的副本,在某一些节点发生故障的时候,它会自动做副本的切换。当主副本所在节点发生故障时,一个从副本会被选举为新的主副本并继续提供服务。反观我们使用的MyCAT,需要借助像australia这样的中间件,带来了额外的运维成本。

三、OceanBase4.x 使用体验

最后分享一下关于我们目前在使用OceanBase V4.2_CE版本的一些体验感受。

第一,在OceanBase 4.x版本中,底层引入了日志流,解决了我们之前在体验3.x版本节点分区数有最大限制的痛点。OceanBase 早期版本的架构体系里以分区为基本单元进行操作,当系统内的分区数量达到一定程度后,以分区为单元的操作的消耗也随之增大,因此,单节点支持的分区数量受到限制,单节点上涉及跨分区的数据修改也需要两阶段提交协议来保证事务的原子性等问题。4.x版本引入日志流之后,我们的某一些分区域都采用同一个日志流,减少Paxos组的设计,使每一个OBServer的分区数可以极大提高。

1699841001

第二,OceanBase提供的工具极大地降低了运维复杂度。

部署方式非常便捷,包括OCP的图形化部署、OBD的白屏化部署等,极大地降低了部署和运维难度。

在一些常用的运维场景,比如OBServer上下线、备份恢复等操作均可使用图形化界面管理,不需要手动操作和编写脚本,或者在平台开发对应的逻辑。而且OCP的功能非常完善,基本考虑到了日常运维中的方方面面。例如,我们业务上有部分信息集成需求,OCP提供了非常丰富的API接口,我们能够想到的所有操作都可以通过这样的API接口完成,并与现有的运维体系对接。

OMS的迁移平滑。最近把我们的数据库管理平台从MySQL迁移到了OceanBase,整个链路从结构迁移、全量和增量数据迁移,到全量校验,再到反向增量迁移,都非常平滑,极大地降低了DBA在数据迁移过程中的工作量。

写在最后

由于OceanBase有原生高可用、水平扩展、低成本、实时HTAP等特点,百丽选择OceanBase替换MySQL。但在日常使用中,我们发现开发人员对分布式事务概念不明确,对分区和tablegroup概念不清晰等问题,仍然保留着集中式数据库的应用惯性。因此,在替换数据库时,需要运维、架构和相关开发人员共同参与,必要时可以对开发同事开展培训。

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

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

相关文章

VTK —— 二、教程五 - 通过鼠标事件与渲染交互(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功,若无VTK库则请先参考如下链接编译vtk源码: VTK —— 一、Windows10下编译VTK源码,并用Vs2017代码测试(附编译流程、附编译好的库、vtk测试源码) 教程描述 本…

关于下载上传的sheetjs

一、背景 需要讲后端返回来的表格数据通过前端设置导出其中某些字段,而且得是xlsx格式的。 那就考虑使用控件SheetJS。如果是几年前,一般来说,保存excel的文件都是后端去处理,处理完成给前端一个接口,前端调用了打开…

初学React基础

最近准备跟着黑马React学一下React,扩充一下技术面,打算还是以一边学习一边记笔记为主,进行学习! 1. React介绍 1.1. React是什么? React是由FaceBook现在称(Meta)开发的开源 JavaScript 库&a…

如何使用 ArcGIS Pro 查找小区最近的地铁站

学习 GIS 除了可以用在工作上之外,还可以将其运用到生活之中,比如查找距离小区最近的地铁站,这里为大家介绍一下查找的方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的POI数据,除了POI数据…

Python流程控制

描述 Python中的流程控制是编程中用来控制代码执行顺序的结构。包括条件判断(if语句)、循环(for循环和while循环)、以及用于跳出或跳过循环的break和continue语句。 条件判断(if语句) if语句允许我们根据…

C++基础语法练习 - 求平均值

题目链接:https://www.starrycoding.com/problem/156 题目描述 在StarryCoding的语法班期末考试里, n n n名同学的成绩分别为 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1​,a2​,...,an​,请求出全班分数的平均值。 输入格式 第一行…

正则化回归

1. L1正则化 L1正则化是回归参数各个元素绝对值之和。 2. L2正则化 L2正则化是回归参数各个元素平方之和。 3.LOSS回归 线性回归加上L1正则化 4.岭回归 线性回归加上L2正则化 不断增大 L2 约束项参数 α,可以发现岭回归参数优化解不断靠近原点&#xff0c…

中职数字化校园网络建设

中职(职校)数字化校园的校园网建设立足于职业教育、职业学校的特点,充分注意到信息技术的飞速发展、通信成本的迅速降低的特点。在规划和建设校园网时,遵循以下原则: 采用通用和成熟的技术:采用通用的、成熟…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…

macOS 如何关闭文本编辑区的拼写检查?

macOS 如何关闭文本编辑区的拼写检查&#xff1f; 在使用 macOS 自带软件 Freeform 的时候&#xff0c;发现有些单词的拼写检查会一直显示红色下划线&#xff0c;很烦。 找了下&#xff0c;找到了如新关闭这种提示 之后就正常了&#xff1a;

软件测试经理工作日常随记【1】-测试用例

软件测试经理工作日常随记【1】-测试用例 1.测试用例 测试用例&#xff0c;好像是每个讲软测经验的文章的基本输出。各种测试用例的设计及白盒黑盒测试方法重复出现在收集者前面。so&#xff0c;不走寻常路的我&#xff0c;觉得从另外的角度去分享测试用例。日常工作中&#…

MYSQL数据目录结构上篇-表在文件系统中表示

前言感悟:我个人是比较不喜欢只会用,不太懂为什么的这么用,而且有的时候很多官方术 语让人难以读懂, 这里我会用比较大白话的方式,让我自己也能让网友们更加理解,如果书写哪里有误,欢迎大家指出((,,•ω•)ノ"(っω•&#xff40;。)) 从入门开始啦推荐一个学习mysql的视频…

Python urllib 爬虫入门(2)

本文为Python urllib类库爬虫更入门的一些操作和爬虫实例及源码。 目录 模拟浏览器请求 简单模拟 设置随机user-agent 请求超时 HTTP请求类型 Get请求 Post请求 抓取网页动态请求 封装ajax请求 调用 循环调用 抓取小说 封装请求函数 把html写入本地分析 调用 正…

Springboot+Vue项目-基于Java+MySQL的教学资料管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

bite阶段性测试_数据结构

解决问题之前我们要了解什么是度&#xff0c;特别是二叉树中的度&#xff0c;和图论中的度的定义是不同的 什么是度&#xff1a; 在图论中&#xff0c;一个节点&#xff08;或称为顶点&#xff09;的“度”是指与该节点直接相连的边的数量。度是用来衡量一个节点与其他节点连接…

CSS移动端弹性布局

一级标题 二倍图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>背景图片</title><styl…

一个单例模式中使用std::unique_ptr引起的莫名其妙的COFF损坏的问题(未解决)

使用static std::unique_ptr和static std::shared_ptr都不行struct IElementAgendaEvents {//! Called to allow listeners to modify the agenda by adding/removing entries before applying tool operation. Return true if entries added or invalidated.virtual bool …

【机器学习】视觉基础模型的三维意识:前沿探索与局限

视觉基础模型的三维意识&#xff1a;前沿探索与局限 一、引言二、视觉基础模型的三维意识三、当前模型的局限性四、实验与结果五、总结与展望 大规模预训练的进展已经产生了具有强大能力的视觉基础模型。最近的模型不仅可以推广到任意图像的训练任务&#xff0c;而且它们的中间…

spring boot 基础案例【3】构建RESTful API与单元测试

教程1 案例教程 案例仓库 在线编程 教程2 基础教程 教程仓库 在线编程 本案例所在的仓库 本案例所在的文档 进入正文 1.文件目录 1. Chapter21Application.java 地址&#xff1a;chapter2-1/src/main/java/com/didispace/chapter21/Chapter21Application.java package com.d…

CSS @keyframes 动画:颜色变化、背景旋转与放大缩小

在CSS中&#xff0c;keyframes 是一个强大的工具&#xff0c;它允许我们创建复杂的动画效果。今天&#xff0c;我们将一起探索如何使用 keyframes 来实现颜色变化、背景旋转以及放大缩小的动画效果。 动画会在 2 秒内循环播放&#xff0c;并在不同的时间点改变盒子的背景颜色和…