知乎规模化落地OceanBase实践与技术生态共建
作者:知乎数据库负责人代晓磊首先为大家推荐这个 OceanBase 开源负责人老纪的公众号“老纪的技术唠嗑局”,会持续更新和 #数据库、#AI、#技术架构相关的各种技术内容。欢迎感兴趣的朋友们关注!
一、知乎数据架构演进
知乎作为一家中文互联网问答社区,业务场景复杂多样,数据存储和处理需求也极为庞大,数据库架构经历了从单一数据库到多种数据库并存的演进过程。
最初,知乎主要依赖于传统的 SQL 数据库(如 MySQL),但随着业务规模的扩大,SQL 数据库在面对高并发、大数据量的场景时逐渐暴露出性能瓶颈。
为了满足不同业务场景的需求,我们逐步引入了多种数据库类型,包括 NoSQL 数据库(如 Redis、MongoDB)和图数据库。这些数据库各司其职,例如 Redis 用于缓存和快速读取,MongoDB 用于处理非结构化数据,图数据库用于处理用户关系和内容推荐等复杂关系数据。
此外,我们希望能再接入一款分布式数据库来解决裸金属服务器MySQL实例间的隔离问题,并降低存储成本,基于业务需求,我们确定了分布式数据库的选型五要素。
[*]业务场景。业务场景决定了数据库的使用场景和需求,例如对于 KV 类型的场景,需要根据数据量和延迟要求选择合适的数据库。
[*]数据库特性。数据库特性一般需要包括 ACID、高可用性、扩展性等基础能力,以及根据实际业务场景所需要的多租户、云原生 operator 等高级特性。
[*]运维能力。这是确保数据库稳定运行的关键,团队需要具备对数据库的深刻理解和维护能力,尤其是DBA 需要完全掌握数据库的使用技巧,可以从在非核心试用到核心系统顺利上线的这一过程中逐渐学习。
[*]生态完善。一个数据库除了自身的产品力外,周边生态是否足够完善是决定其是否好用的一个核心因素。生态包含平台能力及工具支持,如数据迁移工具、监控报警、备份恢复等,只有将整个生态工具维护好、学习好、使用好的情况下,才能保证整个数据库稳定、高效地运行。
[*]安全。包括防攻击、可控,可控意味着代码开源,通过代码可以了解到整个数据库的运行逻辑,使用起来是可控的。
那么知乎为何选择 OceanBase ,并在核心场景落地呢?
二、OceanBase 在知乎核心场景落地历程
在数据库选型初期,我们接触到 OceanBase 并看中其两项能力:多租户能力、数据压缩能力。
知乎原有的 MySQL 架构是采用的云厂商的裸金属服务器自建而成,拥有上百台高配服务器,包含数千个 MySQL 实例(每台服务器包含4块SSD盘,每块盘上有5个 MySQL 实例)。由于缺乏数据隔离,导致MySQL 实例大小不均衡,大的 MySQL 实例增长过快抢占小实例资源,因此,资源争抢问题明显,且存储空间分配不均,进而促使资源隔离和合理分配等需求的解决被提上日程。
OceanBase 的多租户特性能够有效解决上述问题,通过资源隔离和灵活的租户管理,我们能够更好地利用服务器资源、减少资源碎片化、提高资源利用率。同时,我们也了解到 OceanBase 的数据压缩能力非常强,尤其在海量数据场景能够做到极致降本。
(一)前期调研
在正式上线 OceanBase 前,我们重点测试了兼容性、数据迁移和分区表设计等关键环节。
1.兼容性和使用限制。
测试阶段,首先需要对 OceanBase 和 MySQL 的兼容性进行详细对比和实际验证,通过将原本 MySQL 的业务数据导入 OceanBase 测试集群进行功能验证、性能压测,了解 OceanBase 的使用限制例如表长度限制等,确保业务能够平滑迁移。
2.大表的分区表设计。
MySQL 有一些大表数据量较大,单表将近3TB,为了便于后期数据管理,以及实现更高的查询性能,迁移到 OceanBase 后,需要进行大表分区设计。这就涉及分区规则、分区字段等的选择,例如:分区规则是基于二级分区还是哈希分区、分区字段是选择主查询字段还是业务拆分字段,需要 DBA 和业务人员在熟悉 OceanBase 的同时,结合业务需求和数据特点,共同设计合理的分区规则,以优化数据查询性能和提高数据存储效率。
3.有效划分租户,让硬件资源使用更优。
一般情况下,一个 observer 承接的租户非常多,涉及的资源规格也较高,例如128C512G。面对数据量不大但查询高频的业务场景,或数据量巨大但查询频率较低的审计日志数据等,该如何划分租户资源,实现集群中存储型租户和计算型租户的均衡搭配,使磁盘、Memory、CPU等多种资源得到充分利用,是该阶段需要我们考虑的问题。
(二)应用场景
由于我本人比较关注国产数据库,从OceanBase 正式开源时就开始关注它。经过下载验证、阅读官方文档、全面调研,并加入社区,调研社区用户的使用反馈等,当我确认与MySQL兼容,且产品稳定可靠以及落地可行后,逐步开始在非核心业务线、核心业务线进行验证。我们进行了OceanBase与MySQL的性能对比测试,并将MySQL大表通过OMS迁移至OceanBase,观测增量数据同步的性能。相较MySQL,OceanBase可提升至少30%的读写性能,数据压缩至少2倍。
目前 OceanBase 已在知乎的直答( AI RAG 服务)、安全、教育等多个业务线成功落地,不仅打开了MySQL大实例带来的扩展和存储瓶颈,解决了数据隔离问题,还带来了40%以上的降本效果。知乎的 OceanBase 集群规模已达7套集群,包含33个租户,共计91台高配服务器。
(三)OBKV引入计划
近期,我们计划将 OBKV 也应用到业务场景中,替换Redis。OBKV-Redis 是OceanBase 自研且完全兼容 Redis 协议的持久化缓存数据库。知乎使用内部最大的自研 KV 数据库对 OBKV-Redis 进行了大规模压测,将自研 KV 数据库中的 9000 亿条数据导入 OBKV-Redis,其中 string 类型数据达到 2100 亿条,zset 有序集合数据达到 2837 亿条,哈希数据达到 3299 亿条。
在极致压测场景下,KV 数据存储表现满足大部分业务需求。建议大家在使用 OBKV-Redis 时,重点关注 string 类型的应用,对于其他数据类型,需要根据业务需求进行充分测试,确保其性能和稳定性满足要求。
OBKV-Redis 的引入,可以为知乎的业务提供更强大的持久化存储能力,同时也丰富了 OceanBase 的应用场景。
(四)OceanBase 生态工具链
丰富完善易用的生态工具链是 OceanBase 能在知乎成功落地并稳定运行的重要保障。我们在使用 OceanBase 的过程中,充分利用了生态工具,包括迁移工具 OMS、管控云平台OCP、ob-operator 和 OceanBase Dashboard 等,这些工具覆盖了数据迁移、监控告警、日常运维、平台化、开发者共建等各种需求,完全满足用户与开发者的使用及生态共建需求。
OMS 是 OceanBase 的数据迁移和同步工具,支持多种多种数据库产品、增量 MySQL 变更实时同步、同步和迁移组件的实时监控运维等,同时支持根据业务需求灵活配置数据抽取策略和同步任务,例如基于时间或 ID 进行数据抽取,在减少对线上业务影响的同时,保证了数据的实时性和一致性。在使用 OMS 数据迁移压测过程中,我们仅用了一天时间就将337亿数据全部迁移到了 OceanBase,每秒 QPS 最高达到七八十万,性能非常强劲。目前我们已经使用 OMS 完成了35个迁移任务,包含54个数据源,实现业务数据的高效迁移及实时同步。对于数据量较大的场景,OceanBase 提供了旁路导入能力,可以绕过 SQL 层的接口,直接在数据文件中直接分配空间并插入数据,对比 SQL 层导入会有百倍的效率提升。
OCP 是 OceanBase 非常强大的图形化运维管控平台,可以实现 OceanBase 集群的全生命周期管理,支持包括集群租户的日常运维、监控报警、资源管理等,更高效地实现运维管理。
ob-operator 相当于基于 Kubernetes 的 OCP,用于在 Kubernetes 中快速部署和管理 OceanBase 集群,具备强大的资源调度和管理能力,并且提供了白屏运维工具 OceanBase Dashboard,可以白屏化管控 Kubernetes 中的 node、servers、 PVC 等资源,一键拉起 OceanBase 集群,直观地管理 Kubernetes 中的 OceanBase 集群等,大大简化了部署运维流程。有了 operator 的能力,在 Kubernetes 管控数据库可以实现通过 operator 本身的 controler 和 scheduler 来调度资源和部署、控制 observer 副本数,替换了原本的 yaml 方式,整体在 Kubernetes 管控数据库非常丝滑。由于知乎的 Redis all in Kubernetes ,因此比较重视 OceanBase 在 Kubernetes 平台的工具易用性,下图是知乎总结的关于 OCP 和 ob-operator 的对比情况,供大家参考。
四、技术社区共建
在产品使用的过程中,我们也积极参与 OceanBase 社区的活动,希望与社区成员共同推动 OceanBase 的发展。比如,在2023年,我们和 OceanBase 社区联合举办了“走进知乎”企业行,现场近百名参与者,一起交流技术。再比如,我们加入 OceanBase 社区的 cloud native SIG(特别兴趣小组),与其他成员共同探讨云原生、operator 和 Kubernetes 等技术在 OceanBase 中的应用。
通过参与社区共建活动,一方面,我们能够及时获取 OceanBase 的最新技术动态和发展方向,另一方面,可以和其他用户、开发者共同推动 OceanBase 的技术进步和生态完善。在此鼓励更多的技术团队积极参与社区活动,基于开源、共建开源、贡献开源,共同为分布式数据库的发展贡献力量。
五、总结 & 展望
通过在多个核心业务系统上线使用 OceanBase,我们完成了技术栈的转型升级,并为业务带来了显著收益。OceanBase 的多租户和资源隔离能力有效解决了知乎在资源管理和性能优化方面的痛点;高压缩能力帮助知乎降低了存储成本;迁移服务 OMS、管控云平台 OCP、 ob-operator 等助力知乎实现了对 OceanBase 的高效运维和资源管控;OBKV-Redis 的引入,进一步丰富了 OceanBase 的应用场景,为知乎的业务提供了更强大的持久化存储能力。
展望未来,基于 AI 时代日新月异的发展和 OceanBase 趋于成熟的向量化能力,我们希望进一步探索 OceanBase 与 AI 的充分融合,落地更多向量化场景;在运维方面,将丰富 OCP 的智能巡检能力,正式推广落地 ob-operator 和 OceanBase Dashboard,实现智能运维。同时,我们也期待 OBKV-Redis 的性能、稳定性和监控逐步完善起来。ob-operator 能够进一步提升其管理能力,实现更高效的 Kubernetes 集群管理。
此外,我们将继续深化与 OceanBase 社区的合作,积极参与社区共建活动,共同推动 OceanBase 技术的发展和生态的完善。我们相信,通过与社区的共同努力,OceanBase 将在分布式数据库领域发挥更大的作用,为更多企业的数字化转型提供支持。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]