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

本文来自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.mzph.cn/web/5568.shtml

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

相关文章

k8s环境prometheus operator监控集群外资源

文章目录 k8s环境添加其他节点基于prometheus operator k8s环境prometheus operator添加node-exporter方式一:通过 ServiceMonitor 方式可以写多个监控node节点运行 external-node.yaml查看资源有没有被创建热更新 外部需要被监控服务器安装 node-exporterdocker 方…

DigitalOcean 托管 Kafka 新增横向扩展功能

自2023年9月推出以来,DigitalOcean托管的Kafka已经使初创公司、不断增长的数字业务以及独立软件供应商(ISV)能够改善实时数据处理和分析,从而做出更具洞察力的决策。在新的一年里,我们很高兴地宣布DigitalOcean托管Kafka的横向扩展功能&#…

C++--const成员及const取地址操作符重载

前言 今天我们来了解一下const成员的基本使用,以及const取地址重载的运用 来开始今天的学习 const成员 1.基本定义, 将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的*this指针,表明在该成员函…

C语言异步编程

回调函数在异步编程中有着重要的作用,在接口编程应用广泛,实战中经常会注册一个回调函数来接收其他程序返回的数据,这样做的好处是调用者无需主动去获取被调用者的数据,仅仅需要回调,让被调用者去传送数据,…

Flutter笔记:DefaultTextStyle和DefaultTextHeightBehavior解读

Flutter笔记 DefaultTextStyle和DefaultTextHeightBehavior解读 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

Unity涂鸦纹理实现

文章目录 前言实现过程UV坐标和UI坐标对齐修改像素代码 前言 心血来潮实现下场景中提供一张纹理进行涂鸦的功能。 最终实现效果: 实现过程 UV坐标和UI坐标对齐 这里的纹理使用了UGUI的Canvas进行显示,所以这里使用一张RawImage。 因为Unity的视口坐标是以左下角…

Postgresql源码(127)投影ExecProject的表达式执行分析

无论是投影还是别的计算,表达式执行的入口和计算逻辑都是统一的,这里已投影为分析表达式执行的流程。 1 投影函数 用例 create table t1(i int primary key, j int, k int); insert into t1 select i, i % 10, i % 100 from generate_series(1,1000000…

STM32利用硬件I2C读取MPU6050陀螺仪数据

有了前面的基本配置,这节读取MPU6050的数据还算是简单,主要就是初始化时给MPU6050一些配置,取消睡眠模式,MPU6050开机是默认睡眠模式的,读写无效,所以上来就要先更改配置: MPU6050寄存器初始化…

Transformer算法组件详解

自2017年Google推出Transformer以来,基于其架构的语言模型便如雨后春笋般涌现,其中Bert、T5等备受瞩目,而近期风靡全球的大模型ChatGPT和LLaMa更是大放异彩。网络上关于Transformer的解析文章非常大。 前言 Transformer是谷歌在2017年的论文…

【webrtc】MessageHandler 7: 基于线程的消息处理:切换main线程向observer发出通知

以当前线程作为main线程 RemoteAudioSource 作为一个handler 仅实现一个退出清理的功能 首先on message的处理会切换到main 线程 :main_thread_其次,这里在main 线程对sink_ 做清理再次,在main 线程做出状态改变,并能通知给所有的observer 做出on changed 行为。对接mediac…

AC+AP三层组网实验(华为)

一,技术简介 APAC架构是一种常见的无线局域网(WLAN)组网方式,主要由接入点(Access Point,简称AP)和接入控制器(Access Controller,简称AC)组成。 在APAC架构…

AI大模型系列:自然语言处理,从规则到统计的演变

AI大模型系列文章目录 文明基石,文字与数字的起源与演变自然语言处理,从规则到统计的演变AI魔法师,提示工程的力量 自然语言处理,从规则到统计的演变 自然语言处理(Natural Language Processing,NLP&…

前端 CSS

目录 选择器 复合选择器 伪类-超链接 结构伪装选择器 伪元素选择器 画盒子 字体属性 CSS三大属性 Emmet写法 背景属性 显示模式 盒子模型 盒子模型-组成 盒子模型-向外溢出 盒子模型-圆角 盒子模型-阴影 flex position定位 CSS小精灵 字体图标 垂直对齐方式…

数据库(MySQL)—— DML语句

数据库(MySQL)—— DML语句 什么是DML语句添加数据给全部字段添加数据批量添加数据 修改数据删除数据 什么是DML语句 在MySQL中,DML(Data Manipulation Language,数据操纵语言)语句主要用于对数据库中的数…

基础安全:CSRF攻击原理与防范

CSRF的概念 CSRF(Cross-Site Request Forgery)中文名为“跨站请求伪造”。这是一种常见的网络攻击手段,攻击者通过构造恶意请求,诱骗已登录的合法用户在不知情的情况下执行非本意的操作。这种攻击方式利用了Web应用程序中用户身份验证的漏洞,即浏览器在用户完成登录后会自…

eclipse导入工程提示Project has no explicit encoding set

eclipse导入工程提示Project has no explicit encoding set 文章目录 eclipse导入工程提示Project has no explicit encoding set一、Eclipse的工程导入二、可能的问题1.在工程名下有黄色叹号 一、Eclipse的工程导入 用Eclipse的导入可以将原有工程导入到新环境中 具体方法是&…

3.C++动态内存管理(超全)

目录 1 .C/C 内存分布 2. C语言中动态内存管理方式:malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 3.3 operator new函数 3.4 定位new表达式(placement-new) (了解) 4. 常…

Linux搭建靶场

提前准备: 文章中所使用到的Linux系统:Ubantu20.4sqlilabs靶场下载地址:GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based. 一. 安装phpstudy phpstudy安装命令:wget -O install.sh h…

增强大模型高效检索:基于LlamaIndex ,构建一个轻量级带有记忆的 ColBERT 检索 Agent

在自然语言处理领域,高效检索相关信息的能力至关重要。将对话式记忆集成到文档检索系统中已经成为增强信息检索代理效果的强大技术。 在文中,我们专为 LlamaIndex 量身定制,将深入探讨构建一个轻量级的带有记忆的 ColBERT 检索代理&#xff…

后端方案设计文档结构模板可参考

文章目录 1 方案设计文档整体结构2 方案详细设计2.1 概要设计2.2 详细设计方案2.2.1 需求分析2.2.2 业务流程设计2.2.3 抽象类:实体对象建模2.2.4 接口设计2.2.5 存储设计 1 方案设计文档整体结构 一,现状:把项目的基本情况和背景都说清楚&a…