明日方舟正版最新版
1.85GB · 2025-09-26
编者按:作为一款专注于发现和分享的音乐产品,#网易云音乐 引领音乐产品从“播放器时代”进入“在线社区时代”,为用户打造全新的音乐生活。在大体量的业务数据背后,是何种技术方案在支撑?本文分享网易云音乐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 的支持帮助。
最后为大家推荐这个 OceanBase 开源负责人老纪的公众号「老纪的技术唠嗑局」,会持续更新和 #数据库、#AI、#技术架构 相关的各种技术内容。欢迎感兴趣的朋友们关注!
「老纪的技术唠嗑局」不仅希望能持续给大家带来有价值的技术分享,也希望能和大家一起为开源社区贡献一份力量。如果你对 OceanBase 开源社区认可,点亮一颗小星星✨吧!你的每一个Star,都是我们努力的动力。