从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.rhkb.cn/news/316918.html

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

相关文章

FORM调用标准AP\AR\GL\FA界面

EBS FORM客户化界面有时候数据需要追溯打开AP\AR\GL\FA等界面: 一种打开日记账的方式: PROCEDURE SHOW_JOURNAL ISparent_form_id FormModule;child_form_id FormModule; BEGINclose_jrn;parent_form_id : FIND_FORM(:SYSTEM.CURRENT_FORM);COPY(TO…

安卓数据库SQLite

目录 一、SQLite数据库二、SQLiteOpenHelper和SQLiteDatabase2.1 SQLiteOpenHelper2.2 SQLiteDatabase 三、常见数据库使用介绍3.1 创建数据库3.2 插入数据3.3 修改数据(升级数据库)3.4 删除数据3.5 查询数据3.6 关闭数据库3.7 删除数据库 一、SQLite数据…

Apache中如何配置 ws 接口

Apache中如何配置 wss 接口 在Apache中配置WebSockets的支持,你需要使用mod_proxy_wstunnel模块,该模块是Apache的一个代理模块,它允许你代理WebSocket请求。 以下是配置步骤的简要说明和示例: 确保你的Apache服务器安装了mod_…

【linux-1-Ubuntu常用命令-vim编辑器-Vscode链接ubuntu远程开发】

目录 1. 安装虚拟机Vmare和在虚拟机上安装Ubuntu系统:2. 常用的Ubuntu常识和常用命令2.1 文件系统结构2.2 常用命令2.3 vim编辑器 3. Ubuntu能联网但是ping不通电脑:4. Windows上安装VScode链接ubuntu系统,进行远程开发: 1. 安装虚…

变电站综合自动化系统:Modbus-PLC-645转IEC104网关方案

前言 电力行业作为关系国计民生的重要基础产业,是关系千家万户的公用事业。但是要做好电力行业安全保障工作的前提,是需要对应的技术人员详细了解电力工业使用的系统、设备以及各类协议的安全特性,本文将主要介绍IEC 104协议的定义和钡铼技术…

【百度Apollo】探索自动驾驶:Apollo 新版本 Beta 全新的Dreamview+,便捷灵活更丰富

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引入一、Dreamview介绍二、Dreamview 新特性2.1、基于模式的多场景——流程更简洁地图视角调节:调试流…

使用 scikit-learn 进行机器学习的基本原理-2

介绍 scikit-learn 估计器对象 每个算法都通过“Estimator”对象在 scikit-learn 中公开。 例如,线性回归是:sklearn.linear_model.LinearRegression 估计器参数:估计器的所有参数都可以在实例化时设置: 拟合数据 让我们用 nump…

智能体可靠性的革命性提升,揭秘知识工程领域的参考架构新篇章

引言:知识工程的演变与重要性 知识工程(Knowledge Engineering,KE)是一个涉及激发、捕获、概念化和形式化知识以用于信息系统的过程。自计算机科学和人工智能(AI)历史以来,知识工程的工作流程因…

【酱浦菌-爬虫技术细节】解决学术堂爬虫翻页(下一页)问题

首先我们通过css选择器获取页码信息,这里的css选择器,选择的是含有a标签的所有li标签,代码如下: li html_web.css(div.pd_c_xslb_left_fenye ul li>a) for li in li:li_url li.css(a::attr(href)).get()li_num li.css(a::t…

vue2迁移到vue3,v-model的调整

项目从vue2迁移到vue3,v-model不能再使用了,需要如何调整? 下面只提示变化最小的迁移,不赘述vue2和vue3中的常规写法。 vue2迁移到vue3,往往不想去调整之前的代码,以下就使用改动较小的方案进行调整。 I…

口袋实验室--使用AD2学习频谱参数测试

目录 1. 简介 2. 频谱相关参数 2.1 频谱相关基本概念 2.1.1 采样时间间隔 2.1.2 采样频率 2.1.3 采样点数 2.1.4 采样时间长度 2.1.5 谱线数 2.1.6 奈奎斯特频率 2.1.7 频谱分辨率 2.1.8 最高分析频率 2.1.9 频谱泄露 2.2 窗函数 2.2.1 AD2的窗函数 2.2.2 测试矩…

Python来计算 1,2,3,4 能组成多少个不相同且不重复的三位数?

我们今天的例子是 有 1,2,3,4 四个数字,它们能组成多省个互不相同且无重复的三位数?都分别是多少? 话不多说,我们先上代码 num 0 # 我们写了三个for循环,表示生成的三位数 for i…

【韩国】UE5的MetaHuman确实可以导入Blender进行编辑。

UE5的MetaHuman确实可以导入Blender进行编辑。根据网络上的信息,你可以将MetaHuman模型导出为FBX文件,然后在Blender中进行修改。修改完成后,你可以将其重新导入到Unreal Engine 5中4。请注意,当你在Blender中编辑模型时&#xff…

六天以太坊去中心化租房平台,前端+合约源码

六天以太坊去中心化租房平台 概述项目结构合约部署运行项目功能介绍一、首页二、房东后台我的房屋我的订单上架新房屋 三、租户后台我的房屋我的订单 四、仲裁后台 下载地址 概述 六天区块链房屋租赁系统,采用去中心化的方式实现了房屋的租赁功能。房东可在平台上托…

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现

深度学习论文: MobileNetV4 - Universal Models for the Mobile Ecosystem及其PyTorch实现 MobileNetV4 - Universal Models for the Mobile Ecosystem PDF: https://arxiv.org/pdf/2404.10518.pdf PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: ht…

视频怎么批量压缩?5个好用的电脑软件和在线网站

视频怎么批量压缩?有时候我们需要批量压缩视频来节省存储空间,便于管理文件和空间,快速的传输发送给他人。有些快捷的视频压缩工具却只支持单个视频导入,非常影响压缩效率,那么今天就向大家从软件和在线网站2个角度介绍…

Python 数据可视化 boxplot

Python 数据可视化 boxplot import pandas as pd import matplotlib.pyplot as plt import numpy as np import seaborn as sns# 读取 TSV 文件 df pd.read_csv(result.tsv, sep\t)normal_df df[df["sample_name"].str.contains("normal")] tumor_df df…

Transformers 自然语言处理(二)

原文:zh.annas-archive.org/md5/a1e65552fc41f3b5a667f63d9bed854c 译者:飞龙 协议:CC BY-NC-SA 4.0 第四章:从头开始预训练 RoBERTa 模型 在本章中,我们将从头开始构建一个 RoBERTa 模型。该模型将使用我们在 BERT 模…

DVWA靶场

DVWA是指Damn Vulnerable Web Application,是一个用于教育和训练网络安全人员的虚拟漏洞应用程序。DVWA模拟了一个包含了多种常见Web安全漏洞的虚拟环境,包括SQL注入、XSS攻击、CSRF攻击等等。通过使用DVWA,安全人员可以学习和实践各种Web安全…

Django-admin单例模式和懒加载

Django-admin单例模式和懒加载 单例模式 class Foo:def __init__(self):self.name "张三"def __new__(cls, *args, **kwargs):empty_object super().__new__(cls)return empty_objectobj1 Foo() obj2 Foo()当我们实例化对象时,就会在内存开一个空间…