阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

突破 MySQL 三大技术瓶颈,分布式数据库在翼鸥教育中的技术实践

  • 2023-03-01
    北京
  • 本文字数:4064 字

    阅读完需:约 13 分钟

突破MySQL三大技术瓶颈,分布式数据库在翼鸥教育中的技术实践

本文根据 DTCC 大会中翼鸥教育(Classin)数据库运维负责人刘江的演讲整理而来,主要介绍了翼欧教育在面临存储、运维等痛点时,寻求新技术解决方案过程中的选型思考、场景测试与踩坑经验。

业务背景:MySQL 带来的三个技术瓶颈

 

翼鸥教育( Classln)是一个教与学一体化的平台,全球 150 多个国家的 6 万多所学校与机构都选择在教与学场景中应用 Classln。此外,还有 TeacherIn、NOBOOK 等教育科技产品。

 

翼鸥教育的业务数据主要存储在MySQL数据库上,生产环境有近百套集群。数据库架构主要是 MySQL 主从架构,业务通过读写域名的方式访问数据库。同时,我们对 Orchestrator 做了定制化,能够管理 MySQL 主从的高可用。此外,我们也对一些核心的、数据量较大的集群做了分库分表。

 

在使用 MySQL 的过程中,我们遇到了三个主要的瓶颈。

 

第一,读写瓶颈。在疫情期间,翼鸥教育的业务翻倍,流量猛增,由于 MySQL 这样的单机版数据库无法像分布式数据库一样做到平滑的水平扩展,线上许多集群存在明显的读写瓶颈。

 

第二,容量瓶颈。翼鸥教育的数据增长很快,线上一些大表的性能问题逐渐暴露,随着数据量的增长,磁盘空间也慢慢地遇到了容量瓶颈。

 

第三,分库分表的历史遗留问题。由于一些历史原因,翼鸥教育线上的分库分表分的并不彻底,分表之间也存在关联的一些操作。这些不合理、不规范的使用,导致数据库不断出现新的问题。

 

基于以上瓶颈,我们开始寻找新的数据库解决方案,并把目标投向了分布式数据库

数据库选型时的五个考量因素

 

众所周知,分布式数据库自身具备水平扩展、高可用以及数据强一致等特点,除了这些能力,我们还十分看重它是否稳定、是否易运维、是否低成本、是否具备高性能、是否有丰富的生态。

 

稳定性。当我们将业务迁移至分布式数据库后,服务的稳定性是特别重要的。对于用户来说,他们或许并不在乎一个产品的底层存储是什么,但一定在乎服务是否足够稳定。

 

易运维。由于分布式数据库的门槛相对较高,如果它能提供一些智能化或平台化的运维工具,我们的运维人员所需的学习成本则会大大降低。

 

性能。我们希望能在有限的节点,且在可容忍的延迟范围内,考察一下分布式数据库能支撑多大的吞吐量。

 

生态。在将业务数据真正迁移到分布式数据库后,随着业务场景的丰富和数据量的增长,后续可能还会遇到各种各样的问题。如果数据库产品有一个良好的生态,就能帮助我们快速找到问题的解决方案。

 

成本。对于创业公司来说,降成本是一个无法避免的选型因素,就不再赘述了。

 

基于以上几个考察因素,翼鸥教育选择了解并测试业内流行的两款分布式数据库:TiDB 和 OceanBase(见图 1)。



图 1 TiDB 和 OceanBase 的主要特点

 

TiDB

TiDB 是一款支持混合事务处理和分析处理(Hybrid Transaction Analytical Processing,HTAP)的融合型数据库产品,可以做到水平扩容和缩容,也能达到金融级高可用能力,数据能够达到强一致。TiDB 的表数据可以自动分裂,不需要 DBA 介入,这个功能非常好用。同时,TiDB 的社区也很活跃,当我们遇到问题时,在 TiDB 社区中基本能找到解决方法。

OceanBase

OceanBase 也拥有 HTAP 能力、并具备水平扩容或缩容、金融级高可用、数据强一致这三个特点。在 OceanBase 3.x 版本中,如果表的数据比较大,需要我们进行手动分区,在 OceanBase 4.0 版本后,开始支持大数据自动分区。

 

我们认为 OceanBase 具备一个特别吸引人的能力,就是它支持多租户和资源隔离。一个集群在承担众多业务的情况下,做到业务不互相影响是非常重要的。而且,当我们遇到问题时,在 OceanBase 社区也能快速得到解决方案。此外我们发现 OceanBase 为了能让客户及时收到别人对自己提问、解答的回复,设置了消息提醒,通过服务号绑定社区帐号就能在我们的问题得到解答时第一时间看到。

 

在初步对 TiDB 和 OceanBase 进行考察后,我们根据翼鸥教育的业务场景对两款数据库做了进一步的对比和测试。

TiDB 和 OceanBase 的对比测试

 

我们的对比测试不局限于压力测试,因为两款数据库的压力测试都有极高的性能表现,甚至 OceanBase 在 TPC-C、TPC-H 中都取得了世界级的突破,所以我们并不担心两款数据库的性能,而是从两个具体的业务场景中测试慢日志、CPU、事务延迟、数据同步、在线 DDL、压测响应等。

测试场景一:OceanBase 慢日志少,CPU、延迟指标表现平稳

 

第一个场景是翼鸥教育的某个 MySQL 业务集群(写峰值 1.3k,读峰值 3.5k,数据近 2TB),见图 2 ,其特点是单库分表,多分表之间存在关联查询,且存在多分表插入和更新等操作。

 


图 2 第一个测试场景概述

 

我们选择了 TiDB v6.1 和 OceanBase v3.1.4 进行测试与对比,测试所用的机器配置为 3 台 64C/256G/3T SSD。我们将线上的真实流量引入测试集群,测试的 TiDB 架构如图 3 所示,通过 DM 同步 MySQL 的 dml 操作,模拟写流量,写入 TiDB cluster 。再通过 TcpCopy 复制 MySQL 读流量,回放到 TiDB cluster 来模拟读流量。对 OceanBase 测试的架构也与其类似,通过 OMS 采集写流量,通过 Tcp Copy 拷贝和回放读流量,再回放到 OceanBase cluster。

 


图 3 TiDB 在第一个场景中测试的架构

 

通过对 TiDB 和 OceanBase 这两款产品的测试,我们得到了关于慢日志、CPU、延迟等方面的数据。

 

首先,对于慢日志,我们通过图 4 和图 5 可以看到。 TiDB 的慢日志比较多,OceanBase 也出现了慢日志,但次数较少。这是由于 TiDB 优化器不稳定,出现索引走错的情况,而 OceanBase 不支持倒序索引,其查询不走索引。

 


图 4 TiDB 慢日志测试数据



图 5 OceanBase 慢日志测试数据


其次,对于 CPU 指标,我们可以从图 6 和图 7 中的数据得知,由于 TiDB 的延迟发生了一些波动, TiDB 的 CPU 使用率也出现了较为明显的波动,而 OceanBase 的 CPU 使用率表现非常平稳。

 


图 6 TiDB 的 CPU 数据



图 7 OceanBase 的 CPU 数据

 

最后来看延迟指标,见图 8 与图 9,在整个测试过程中,TiDB 出现了几次小的波动,OceanBase 整体较为稳定。



图 8 TiDB 的延迟数据

 


图 9 OceanBase 的延迟数据


从延迟和 CPU 这两个角度来看,OceanBase 都要优于 TiDB。因为 TiDB 的数据在大于某个值后会自动拆分,数据会自动分散在各个节点上,而分表的查询或关联的更新基本走的都是分布式事务。OceanBase 支持本地事务,数据都在一个 zone 内,查询走的都是本地事务,所以其延迟比分布式事务低。

测试场景二: OceanBase 较 TiDB,数据清洗快 2.74 倍,数据同步快 2.6 倍

 

第二个测试场景是某业务需要从上游的多套 MySQL 集群汇集数据并清洗,数据清洗完成后提供线上服务。该业务场景的数据涉及多个上游集群,且清洗后的数据单表记录数最大达到 30 亿。

 


图 10 第二个测试场景概述

 

我们还是采用 TiDB v6.1 和 OceanBase v3.1.4 进行测试对比,机器配置仍为 3 台 64C/256G/3T SSD。在本次测试中,我们对两个数据库产品采用同一套清洗程序进行数据清洗,考察业务迁移后数据的压缩率、数据同步时间、数据清洗时间、在线 DDL 用时、业务接口压测响应时间。

 

测试 TiDB 的架构见图 11,通过 DM 把上游多个 MySQL 表的数据同步到下游的 TiDB cluster。在同步完数据后,业务程序会对同步过来的数据进行清洗,并将清洗完的数据写到本集群的新库中。

 


图 11 TiDB 在第二个场景中测试的架构

 

OceanBase 的测试架构如图 12 所示,与 TiDB 的测试架构类似。通过 OMS 采集上游的数据,再同步到 OceanBase cluster,业务程序也是在本集群进行数据的清洗,并将清洗完的数据写到本集群的新库中。


图 12 OceanBase 在第二个场景中测试的架构

 

经过测试,我们分别对比了 TiDB 和 OceanBase 在数据压缩率、数据同步时间、数据清洗时间、在线 DDL 用时、业务接口压测响应时间的表现。

1、数据压缩率对比

从图 13 来看,TiDB 和 OceanBase 对于单表各有优势。但前者的整体压缩率优于后者。

 


图 13 数据迁移后的压缩率对比

2、数据同步时间对比

我们并没有对同步的配置做优化,只是采用了默认的同步配置,发现 TiDB 所需的数据迁移时间是 50674 秒,OceanBase 只要 19406 秒。如图 14 所示,相当于 OceanBase 比 TiDB 的数据同步快 2.6 倍。

 


图 14 数据同步时间对比

3、数据清洗时间对比

数据清洗时间也关乎上线耗时,是业务迁移中比较重要的节点。我们的测试结果显示,同一套清洗程序,TiDB 的数据清洗用时是 OceanBase 的 2.74 倍,这意味着使用 OceanBase 的上线耗时比使用 TiDB 要短。因此,我们的研发人员对 OceanBase 的性能充满了信心和期待。

 

图 15 数据清洗时间对比

4、表在线 DDL 用时对比


如图 16 所示,OceanBase 在线 DDL 加索引的用时比 TiDB 短很多,尤其对于一些大表的改表用时,测试结果的差距非常明显。这一对比结果,让我们感到非常意外。

 

图 16 表在线 DDL 用时对比

5、接口压测相应时间对比


我们选取了五个核心接口,采用相同的压测线程数对同一接口进行压测,经过测试,我们发现 OceanBase 的响应比 TiDB 的响应快两倍。

 


图 17 接口压测响应时间对比

后续规划:核心业务迁移至 OceanBase

 

基于此次分布式数据库的选型及测试、对比数据,我们制定了两个计划。

 

首先,翼鸥教育决定在核心业务中使用 OceanBase 数据库。目前,我们准备上线上面提到的 Y 业务。我们希望把 MySQL 集群数据汇聚到 OceanBase,通过租户隔离供大数据抽取和大后台业务使用。同时将部分增量数据通过 OMS 同步 Kafka 供大数据实时场景消费。此外,我们会陆续在其他业务中接入 OceanBase。

 

其次,翼鸥教育会重点关注 OceanBase 4.0 版本,并尝试新功能。

  • OLAP 能力。由于翼鸥教育后台的查询会严重拖累线上的输出性能,因此后续我们会将后台查询尝试迁移至 OceanBase 中。

  • OceanBase v4.0 支持 I/O 隔离,也是我们想尝试的一个功能。

  • 以前的分布式数据库对机器的规格要求较高,测试成本比较大,OceanBase v4.0 支持单机分布式,对机器规格的要求更低,我们也会尝试用较低的机器配置来搭建 OceanBase,通过多租户的方式提供多套测试环境。

  • 目前翼鸥教育的数据库监控都依赖于 Zabbix,而 Zabbix 数据都存储在 MySQL 中,接入的设备越来越多后,MySQL 遭遇了读写瓶颈,OceanBase v4.0 针对 Zabbix 做了适配,我们会尝试把 Zabbix 监控存储也写到 OceanBase 中去。

 

作者简介:


刘江,中翼鸥教育(Classin)数据库运维负责人

2023-03-01 10:433395
用户头像
李冬梅 加V:busulishang4668

发布了 808 篇内容, 共 376.9 次阅读, 收获喜欢 998 次。

关注

评论

发布
暂无评论
发现更多内容

南洋迪克“整装”起飞,数夫系统打通端到端高效服务流程

神奇视野

采访236位第一批秋招上岸的同学后,我整理了这份Java面试手册

收到请回复

Java 架构 面试 语言 & 开发 秋招

被裁后半月面试8家公司无果,凭借这份Java面试指南成功入职阿里

收到请回复

Java 架构 语言 & 开发

Python图像处理丨图像的灰度线性变换

华为云开发者联盟

Python 人工智能

Solana流支付协议Zebec完成850万美元融资,CircleVentures等参投

小哈区块

英特尔推出数据中心GPU Flex系列,以开放式软件堆栈助力开发者

科技之家

Solana流支付协议Zebec完成850万美元融资,CircleVentures等参投

EOSdreamer111

认识微服务 SpringCloud (史上最全学习路线)

微服务 spring could 8月月更

后台服务架构高性能设计之道

C++后台开发

后台开发 后端开发 Linux服务器开发 高性能服务器 C++开发

Solana流支付协议Zebec完成850万美元融资,CircleVentures等参投

西柚子

JVM性能调优都做了什么?阿里内网JVM虚拟机性能调优指南给出了答案

退休的汤姆

程序员 JVM 面经 社招 秋招

后端开发必备:mysql数据库建表的15个小技巧

Java永远的神

MySQL 数据库 程序员 面试 后端

记一次血淋淋的MySQL崩溃修复案例

华为云开发者联盟

数据库 后端

【实用】用 FP 思想将 JS 循环做简单封装~

掘金安东尼

前端 8月月更

数夫携手图森,打造高整木定制数字化标杆

神奇视野

Mysql大法-Mysql索引失效VS Mysql存储引擎

知识浅谈

8月月更

想要达到阿里P6?最少啃完这本500页Java并发多线程源码笔记

收到请回复

Java 程序员 架构 技术管理 语言 & 开发

DTSE 技术讲座 |云原生架构下的数字身份治理实践

华为云开发者联盟

云计算 云原生 后端 SaaS

并发量很大?阿里上传在GitHub的亿级流量百万并发手册爆火

退休的汤姆

Java 程序员 阿里 并发 秋招

蚂蚁金服开源的这份SpringBoot笔记,曾在24小时内GitHub星标48k

收到请回复

Java 架构 面试 语言 & 开发 秋招

【导航】RT-Thread 学习专栏目录 【快速跳转】

矜辰所致

目录 RT-Thread 8月月更

网络知识平面简介

俞凡

网络 知识平面

全卫定制龙头企业-伽蓝集团数字化转型之路

神奇视野

面对数字化转型,金融ITer要补的第一堂课:运营

三少爷的见

数字化转型 运营 数据运营 金融业cio指南 证券行业

Solana流支付协议Zebec完成850万美元融资,CircleVentures等参投

股市老人

RT-Thread记录(十八、I2C软件包 — 温湿度传感器 SHT21与EEPROM 24C02)

矜辰所致

软件包 RT-Thread 8月月更

前端工资涨不上去?可能是你没掌握构建工具:关于 Webpack、Babel、esbuild、Vite、Rollup、Parcel、SWC......的那些事

代码与野兽

前端 前端架构 前端工程化 webpack babel

“阿里爸爸”最新Java面试指南,基础+框架+数据库+系统设计+算法

收到请回复

Java 架构 计算机 语言 & 开发

九章云极DataCanvas公司携因果学习开源重器登录WAIC!

九章云极DataCanvas

人工智能

史上秋招最全500道Java面试题:JVM+分布式+算法+锁+MQ+微服务+数据库

退休的汤姆

Java 程序员 社招 Java工程师 秋招

契约测试的三种模式

agnostic

契约测试

突破MySQL三大技术瓶颈,分布式数据库在翼鸥教育中的技术实践_数据库_刘江_InfoQ精选文章