百词斩是一款针对英语学习开发的“图背单词”APP,覆盖全年龄段英语水平和学习需求,致力于让记单词成为一种乐趣。《DB 大咖说》第 14 期邀请到了百词斩 CTO 敬宓。
他是一名非常资深的技术专家,先后在百度、迅雷等公司工作过,对于分布式架构、数据库等领域有着非常深入的研究。长期从事复杂软件系统开发和设计,培养了他非常重视测试和验证的工作习惯。这一工作习惯到他担任百词斩 CTO 也一直坚持,也体现在百词斩从 MySQL 数据库迁移到 OB Cloud 云数据库(以下简称 OB Cloud)替换升级过程当中。
谨慎的选型、全面的测试和周密的准备为迁移工作的顺利完成提供了充分保障,本期访谈敬宓分享了百词斩如何将拥有 30 个节点的 MySQL 数据库迁移到 OB Cloud 云数据库(以下简称 OB Cloud)的完整成长过程。
本文为此次访谈的精简梳理,篇幅有限,如果您对互联网企业数据库选型、传统数据架构升级等话题感兴趣,可以观看下方完整音视频~👇
百词斩是成都终身成长科技有限公司推出的一款英语单词学习 APP。它采用了图片记忆法法让英语单词记忆更加形象生动,帮助学生解决英语单词难记的难题,在“外语学习类 APP”中用户活跃度长期排名第一。
2012 年,百词斩正式上线,至今用户累计已超过 2 亿。对于这样一款用户过亿的互联网流行 APP,要保证用户的使用体验并非易事。百词斩不仅要保证用户随时随地能上线开始英语学习,同时,还要记录用户的每一次上线学习过程,包括选择了哪本词书、学习了哪些词汇、有哪些词汇需要复习等。而这些数据就保存在一个名为学习记录的核心数据库中。
随着用户的增长,学习记录数据库一直在不断扩容,如今已经保存了 2 亿多用户的学习数据,节点数达到了 30 个。2024 年初,百词斩决定对该数据库进行替换升级——从 MySQL 迁移到 OB Cloud,将节点数从 30 个减少为 3 个,最终实现成本节省 20%-30%,同时还改变了此前高度依赖人工扩缩容的方式,大大提升了运维效率,为百词斩进一步降本提效和业务创新提供了充分的保障。
在百词斩的众多数据库中,学习记录的数据库是最为核心的业务数据库之一,也是百词斩数据量最大的一个数据库,它需要记录所有用户的全部学习过程。伴随着用户持续上线学习和新用户的不断增加,百词斩的数据库数据量和节点数的持续剧增。
“百词斩诞生在 2011 年,作为一个互联网 APP,我们选择的也都是当时主流的技术栈。MySQL 当时在互联网公司非常流行,所以学习记录系统的数据库选的也是 MySQL。”百词斩 CTO 敬宓表示。
敬宓是一位技术大咖,曾在百度、迅雷等多家公司从事软件开发和架构设计工作。2021 年进入百词斩,全面负责公司的技术工作,包括基础架构的搭建、云服务的改进和优化以及 AI、多基础设施等新技术的探索。
“因为数据量一直在增长,我们的数据库节点数一直在增加。前两年因为线上学习业务的兴起,百词斩学习记录等核心业务增长很快,每年需要新增 3-4 个节点。”敬宓说。
百词斩的系统部署在公有云上,数据库采用的也是云服务商的 MySQL RDS 服务,其最大数据存储量为 3TB 左右,当数据量增加到超过节点最大承载能力时就要扩容。对于新增用户,扩容比较容易,直接路由到新的节点就可以了。但对于老用户的数据,扩容相对就比较麻烦,此时需要对旧数据重新进行分片,过去完全靠 DBA 的经验人工来完成。随着业务的发展,到目前为止这个数据库的节点数已经扩展到 30 个。这个办法越来越难以继续了。
第一,要保证如此多的节点都正常运行、不宕机,非常不容易。尽管当今云服务商的基础设施已经非常好了,但仍然有可能因为软硬件等各方面的原因,让设备宕机,一旦一个节点宕机会直接影响业务的正常进行,这个系统的维护和容灾、备份都带来相当大的压力。
第二,人工拆库拆表需要付出很高的人力成本。比如,需要去监控哪些节点快要达到上限了,然后在快要达到上限之前赶紧把这个节点上的数据分开,运维成本很高。同时,开发成本也很高,因为开发人员需要知道到哪个节点去读取数据。
第三,从技术上的角度上来说,这种单纯靠手工做数据的分布式部署不是真正的分布式解决方案。
“因为通过人工去进行数据的分布经常会出现这样的问题:虽然拆分出来的节点满足了数据的分布式部署需求,但是各个节点它的冷热是不均匀的。比如,因新增节点上通常是新用户或者是最近很活跃的用户在使用,压力会很大,即使人为地做些优化,也不能做到动态的平衡,很容易会出现压力不均的情况,很难解决。”敬宓说。
另外,大量的独立 RDS 导致与大数据平台的数据进行同步时需要创建大量的 DTS 同步链路,同步链路的运维复杂度和成本随着 RDS 实例数的日渐增多变得居高不下。
去年 7 月,不堪数据运维压力的百词斩决定做出改变。在敬宓看来,要改变这种纯手工进行数据分布式部署的被动局面,采用分布式数据库进行升级是一个不错的选择。在百度工作期间,敬宓曾参加了一个分布式数据库的研发,这就是后来的开源项目 Apache Doris 的前身,可以说他本人对于分布式数据库技术非常了解。因此,百词斩很快就明确了要选一款可靠的分布式数据库。
敬宓透露,百词斩其实早在前两年线上教育爆发期间就有了更换数据库的想法,只是当时业务发展太快、有太多更紧迫的工作要做,直到去年 7 月才腾出精力来着手进行数据库的升级。
不过,市场上分布式数据库厂商很多,要从中选出一款合适自己的也不是一个很容易做出的决策。从去年 7 月份开始,针对公司业务的需求特点,百词斩进行了近两个月的市场调研和验证,还和一些厂商做了沟通,最后初步选定了 OB Cloud。
“选择 OB Cloud 的根本原因是它非常适配我们的需求,比如,OB Cloud 的高数据压缩比、其计算能力等比较适应我们的应用场景。而且它有很多成功的应用案例,这些案例的最终实施效果都非常好。”敬宓介绍。
另外,在与 OceanBase 沟通、进行产品验证期间,OceanBase 团队的配合度和支持度很高,双方的沟通非常顺畅,这也成为百词斩最终决定选择 OceanBase 的一个重要因素。
初步敲定了 OB Cloud 以后,百词斩并没有立马启动数据库的迁移工作,而是进行了长达近 3 个月的测试,最后才最终敲定选择 OB Cloud。敬宓说,在这 3 个月期间,百词斩做了充分的测试。为了尽可能准备适配实际应用场景,百词斩要求测试数据量要达到总数据量的 1/10。
“我们搭建起来 3 个节点的一个集群,测试数据达到 TB 级。我们几乎测试了各种场景的数据库性能,如大批量写入、大批量读出,以及故障恢复能力。比如,我们测试了突然关掉一个节点和网络突然中断等各种极端的情形下数据库的表现。”敬宓说。
测试内容还包括数据库的计算能力、数据库的接口和易用性等。正是因为百词斩的测试非常充分,所以后来真正开始进行数据库的升级替换时就非常顺利。从今年 1 月份百词斩正式开始进行数据库的迁移,通常是每两周迁移一次,一次 2 个节点,到后期节点数逐渐增加,到今年 6 月底基本完成全部节点迁移。
“在迁移之前我们做了充分的准备,针对正常的使用情况进行模拟,所以后面的工作很顺利。而且,趁这个机会,我们还把这个已经有 10 年以上历史的程序代码进行了一次梳理,部分进行精简和重构。”敬宓说。
随着学习记录数据库逐步完成向 OB Cloud 的迁移,新数据库的好处也逐渐体现出来。
首先是大大简化了数据库的管理工作。比如,数据库节点数得到大幅减少,从原来的 30 个节点减少到现在的 3 个节点。同时,数据的存储空间也得到大幅节约。“OB Cloud 的压缩比很高,迁移后,OB Cloud 的数据占用的存储空间不到原来的 1/5。”敬宓介绍。
随着节点数的减少,百词斩的数据库成本也得到明显降低。敬宓介绍,数据库的成本大约降低了 20-30%。而且这种成本的节省还是留有充分余地的情况下。比如,现在 3 个节点的算力和存储空间都预留了不少的增长空间。
除此外,DBA 工作压力也得到很大程度缓解。DBA 不再需要时刻盯着数据库,一旦发现临近阈值,就要马上要准备扩容。在此前人工进行扩容时,需要 DBA 去安排数据如何在不同节点之间的分配,这个工作不仅要了解业务,还对 DBA 的以往经验要求非常高。如今,数据的分片工作都由 OB Cloud 自动完成,运维效率大幅提升。
数据库的替换升级还带来另一个好处是,系统的可扩展性得到改善。存储不再与计算资源规格强绑定,30C 集群规格可存储对等 RDS 200T 的数据容量。
敬宓介绍,此次学习记录数据库顺利完成迁移,让百词斩对 OceanBase 有了更为全面和深入的了解,也为将来其他数据库的迁移积累了宝贵的经验。现在,百词斩正在评估其他一些业务的数据库是否要迁移。一些新业务在设计时,OceanBase 数据库也成为首选。
当前,百词斩还在探索 OceanBase 的更多能力,如 AI 和 HTAP 等能力如何在未来为百词斩的业务赋能。从很多常规的数据库运维工作中解脱出来的 DBA,也有了更多精力可以来做这些探索。
“今天,业务对数据库的诉求越来越多,作为 DBA 应该将更多精力向业务倾斜,参与到数据架构的设计和数据的治理当中,参与到系统的架构设计当中。在理解工作发展方向和战略的前提下,帮助公司进行数据方面的规划,也能让 DBA 的职业边界大幅拓宽,在职场发展中更有竞争力。”敬宓说。
💥 惊 喜 预 告!10 月 23 日,2024 OceanBase 年度发布会将在北京望京凯悦酒店举办,届时百词斩 CTO 敬宓将来到现场分享 OB Cloud 在百词斩的最佳实践,欢迎感兴趣的小伙伴点击文末“阅读原文”报名参会~
📩 📩 写在最后:
左右滑动查看更多
🙋♀️ 🙋♂️ 多平台完整版访谈可搜索:
🎬 B站、微博、视频号:搜索用户 OceanBase数据库
🎧 小宇宙:搜索 DB大咖说 进行订阅
📲 联系我们:搜索 obpublic 添加微信小助手