卧槽:油管用MySQL支持24.9亿用户

💡 原文中文,约1700字,阅读约需4分钟。
📝

内容提要

YouTube使用MySQL和Vitess解决了大规模用户扩展性问题。Vitess是一个由YouTube开发的数据库解决方案,通过添加缓存和预加载来加快MySQL复制速度。Vitess架构包括VTTablet、VTGate、键值数据库和VTctld。Vitess是用Go语言编写的,支持MariaDB。

🔎

延伸解读

MySQL 复制瓶颈与优化

YouTube 早期使用 MySQL 主从复制扩展,但 MySQL 复制是单线程的,从服务器难以跟上主服务器的大量写操作。为此,YouTube 通过添加缓存并从二进制日志预加载事件,使复制过程变为内存绑定,从而加快速度。这提示我们,在类似场景下,缓存和预加载是缓解复制延迟的有效手段。

分片带来的挑战

为处理存储需求,YouTube 对 MySQL 进行分区,但分区后事务和连接管理变得复杂,需要应用程序逻辑处理。网友评论指出,分片解决了约 60% 的扩展问题,却引入了分片路由管理的新难题。这表明分片并非银弹,需权衡其带来的复杂性。

Vitess 的抽象层设计

Vitess 通过在每个 MySQL 实例前部署 VTTablet 边车服务器,提供极端可扩展性。VTTablet 控制 MySQL 服务器、管理备份、重写昂贵查询并缓存数据;VTGate 作为无状态代理路由查询,保持连接数低;键值数据库存储拓扑信息;VTctld 更新键值数据库。这种架构将分片细节对应用透明。

规模与演进

YouTube 使用 Vitess 和 MySQL 的组合服务了 24.9 亿用户,但网友指出 YouTube 于 2018 年停止使用 MySQL,转而使用 Vitess,且 Vitess 出自谷歌。2019 年 YouTube 有 20 亿用户,如今增至 27 亿。这提醒我们,技术栈会随规模演进,没有数据库能不经过额外工作就处理数十亿用户。

❓

Q&A

YouTube是如何解决MySQL的扩展性问题的?

YouTube通过开发Vitess,添加缓存和预加载来加快MySQL的复制速度,从而解决了扩展性问题。

Vitess的架构包含哪些主要组件?

Vitess的架构包括VTTablet、VTGate、键值数据库和VTctld。

YouTube在使用MySQL时遇到了什么主要挑战?

主要挑战是MySQL的单线程复制速度限制,导致从服务器无法跟上主服务器的写操作。

Vitess是用什么语言编写的?

Vitess是用Go语言编写的,并支持MariaDB。

YouTube的用户数量在2019年和现在分别是多少?

2019年,YouTube的用户数量为20亿,现在已增至27亿。

分片在YouTube的数据库管理中起到了什么作用?

分片解决了60%的扩展问题,但管理分片路由仍然是一个挑战。

🏷️

标签

➡️

继续阅读