编者按:作为一款专注于发现和分享的音乐产品, #网易云音乐 引领音乐产品从“播放器时代”进入“在线社区时代”,为用户打造全新的音乐生活。在大体量的业务数据背后,是何种技术方案在支撑?本文分享网易云音乐PB级分库分表架构向原生分布式数据库架构迁移的技术优化经验。
作者:吕娅婷,网易云音乐资深平台开发工程师
网易云音乐使用最多的数据库是其内部自研的分布式 DDB 。DDB 非原生分布式数据库,而是基于 MySQL 存储节点搭建的中间件,其具有以下特点:
作为网易云音乐主要的 OLTP 方案,DDB 拥有较大的数据体量,其数据流架构如图1所示。从图中可以看出,通过DBI JAR 包这个访问接口向上层应用程序提供服务。整个数据处理流程为:当上层应用程序下发 SQL 后,由DBI 进行解析生成语法树,而通过语法树生成的执行计划由执行器直接下发到底层 #MySQL。多个 MySQL 节点的结果汇聚到 DBI 进行处理,最后返回上层应用程序。
图1 DDB架构
除了 DBI JAR 包(类似 SDK 方式),我们还提供了 QS(Query Server)方式,可将其理解为一个 Proxy。QS 兼容 MySQL 协议,可作为 Proxy 单独部署,相当于一个 MySQL 实体库,支持命令行和应用接口这两种访问方式,进而使应用程序可以像访问 MySQL 一样访问 QS。
在图1中,用户通过控制流可以实现 DDL 处理和元数据分发同步,Master 节点会将元数据同步到 MetaStore 即 元数据库 中,然后将元数据变更通知到每一个 DBI 的应用层。 DBI 和应用集成的方式虽然缩短了整个数据链路,但也带来了一些运维问题,比如当DBI数量较多、底层节点发生大批量切换或更改时,整体操作较为耗时,且若部分DBI未及时感知,可能影响该应用的读取或写入。
DDB 作为一个久经考验的数据库, 在使用过程中也存在一些痛点问题。
基于上述痛点,我们决定将 DDB 切换到原生分布式数据库 OceanBase 。
OceanBase 是一款原生分布式数据库(见图2 ),采用单机分布式一体化架构设计,在弹性扩展、高可用、多活容灾、存储引擎、分布式事务、HTAP、多种主流数据库兼容性、多租户等多个方面都有关键性的技术突破,并在复杂而严苛的金融核心业务场景中久经考验。
图2 OceanBase产品形态
从产品特性和应用案例来初步判断,我们认为OceanBase能够解决我们使用DDB时面临的问题。
然而,DDB和OceanBase 作为两个由不同企业研发、架构差异较大的数据库产品,使我们在迁移过程中遇到了四个挑战。
异构数据同步挑战。 数据库内部的数据传输工具互相不支持,无法直接实现数据同步,因此需要将 DDB 的分片逻辑改造成 OceanBase 的分区,同时实现分布式事务跨节点一致性保障。
业务无感迁移挑战。 迁移过程需要实现业务无感,源端发生 DDL 变更或者 MySQL 节点主从切换时,必须保证在线切换不阻塞迁移。迁移过程对迁移组件本身的高可用也有高要求,需要做到不停服升级,而OceanBase提供的迁移工具——OMS 暂不支持(后续计划支持)。
反向迁移效率挑战。 从 DDB 到 OceanBase 的正向迁移数据最快能达到 GB /s的速度,但反向迁移在大表场景和大流量场景下同步效率较低。同时也需要支持 TB 级数据快速比对。
运维效率挑战。 整个迁移过程中可能会创建上千个同步任务,如果依靠人工运维,效率低下。
由于数据迁移涉及正向同步和反向同步这两个长期的同步任务,对链路稳定性及低延时性要求很高,因此我们开始了严谨的迁移架构与适配工作。
首先,我们自研的CDC 服务——NDC 架构,类似 DTS,可以实现端到端的全量迁移、增量迁移和数据订阅的服务系统。
图3 NDC架构
使用NDC 进行数据迁移同样涉及正向同步、反向同步,正向同步指从 DDB 到 OceanBase,反向同步指从 OceanBase 到 DDB。由于涉及部分回滚场景,因此需要保证反向同步也是稳定、安全的。
正向同步主要支持如下能力:
图4 正向同步方案
Binlog 模式是我们最早支持的同步模式,简单易用、稳定性高、兼容性强。大致流程如下:
相当于为了使下游使用方便,兼容了 MySQL 的 Binlog,将 OceanBase 产生的 Clog 多转了一层转为 Binlog,但由于链路增加,效率会比较低。去年 Binlog 解析模式的效率是每秒25MB/每秒,对我们来说是无法接受的,后来 OceanBase 团队将这个值优化到了140MB/每秒,暂时满足了业务需求。
图5 Binlog同步模式
相比 Bonlog 模式,CDC 模式更简单,因为不需要将 Clog 转换为 Binlog,直接拉取 Clog,使用OBLogClient 启动,具体流程如下:
图6 CDC同步模式
我们对 OBCDC 和 OBLogProxy 也做了调研,两个方案都属于 CDC 模式,OBCDC 是持续迭代版本的 OBLogProxy。
图7 OBCDC 和 OBLogProxy 方案对比
虽然CDC模式省去了binlog生成及解析的额外成本,但由于技术栈、兼容性及可维护性的考量(OceanBase 在 4.2.0版本后将不继续维护 CDC 模式),两种形式都非理想解决方案,因此我们最终并未采用CDC模式。
目前我们基本上实现了业务无感迁移、零数据丢失、正向同步效率GB/s,反向百+MB/s。
图8 正向迁移、反向迁移流程
在迁移过程中,我们共完成了如下方面的适配和优化工作。
后续我们也计划实现通过 AI 迁移,即基于 MCP 的多 Agent 实现 NDC 工具的智能化运维,降低迁移过程中长期同步任务的运维成本。目前还处于早期迁移阶段,相关工作正在进行中。
当前网易云音乐各业务已经逐步开始使用 NDC 进行验证、线上同步、双跑等相关落地,部分业务已完成迁移,周边基础设施也开始陆续跟进,验证了系统是成熟可用的。但为了业务的稳定切换,我们的切换周期相对比较长,还有很多工作要做。
后续我们会进入核心试点和大规模迁移阶段,进一步完善 OceanBase 及周边生态的体系化建设,包括工单、部署、测试、调优、运维等。虽然我们在起步阶段,却已经接受了 OceanBase 社区很多的帮助,在此也非常感谢 OceanBase 的支持帮助。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047136/viewspace-3096542/ ,如需转载,请注明出处,否则将追究法律责任。