导语:本文根据DTCC大会中翼鸥教育(Classin)数据库运维负责人刘江的演讲整理而来,主要介绍了翼鸥教育在面临存储、运维等痛点时,寻求新技术解决方案过程中的选型思考、场景测试与踩坑经验。
大家好,我是刘江,在翼鸥教育主要负责数据库与大数据运维相关等工作。
我今天的分享主要从四部分展开:第一,介绍翼鸥教育业务的存储现状及运维痛点;第二,分布式数据库选型中的思考;第三,对比业内两款比较流行的分布式数据库(TiDB、OceanBase)并结合翼鸥教育的业务场景进行测试;第四,相关业务上分布式数据库的一些后续计划。
业务背景: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 中去。
好的,以上就是我的分享,谢谢大家。
欢迎持续关注 OceanBase 技术社区,我们将不断输出技术干货内容,与千万技术人共同成长!!!
搜索🔍钉钉群(33254054),或扫描下方二维码,还可进入 OceanBase 技术答疑群,有任何技术问题在里面都能找到答案哦~