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

Vitess是一个由YouTube开发并开源的数据库解决方案,用于解决大规模MySQL部署中的扩展性问题。

最初,PayPal的三名员工尝试创建一个约会网站,但失败了。他们转向创建视频分享网站YouTube,并使用MySQL存储视频标题、描述和用户数据。

随着用户数量的增长,YouTube设置了MySQL的主从复制拓扑来扩展。但是,MySQL的复制是单线程的,导致从服务器无法跟上主服务器上大量的写操作。

缓存和预加载:
为了解决可扩展性问题,YouTube通过添加缓存并从MySQL二进制日志中预加载所有事件,使得复制过程成为内存绑定的,从而加快了速度。

写并发问题
尽管暂时解决了可扩展性问题,但出现了新的写入问题,例如必须对MySQL进行分区以处理存储需求,分区后事务和连接变得困难,需要应用程序逻辑来处理。

为了简化和扩展,YouTube创建了一个抽象层Vitess,它通过在每个MySQL实例前安装一个名为VTTablet的边车服务器来提供极端的可扩展性。

Vitess架构:

  • VTTablet:在每个MySQL上运行的边车服务器,可以控制MySQL服务器,管理数据库备份,重写昂贵的查询,缓存频繁访问的数据。
  • VTGate:路由查询的代理服务器。无状态代理服务器,用于路由查询,找到正确的VTTablet路由查询,通过连接池保持MySQL连接数量低,与应用程序层使用MySQL协议通信。
  • 键值数据库:用于拓扑管理的配置服务器。分布式键值数据库,存储有关架构、分片方案和角色的信息,并管理数据库之间的关系,使用Zookeeper实现。
  • VTctld:运行HTTP服务器以保持键值数据库更新,获取服务器及其关系列表,然后更新键值数据库。

Vitess的实现:Vitess是用Go语言编写的,并支持MariaDB。YouTube能够使用Vitess和MySQL的组合服务24.9亿用户。

本案例研究表明,MySQL 可以轻松处理互联网规模的流量。

网友:
1、他们对数据库进行了分片,并在其前面放置了自己的东西来管理分片

2、这真的很有趣,分片解决了 60% 的扩展问题,同时引入了如何管理分片路由的问题。

3、即使你不进行分片,也不在中间添加一些花哨的层,如今的垂直扩展也可以走得很远。一台 64 核服务器,配备 TB 的 RAM 和大量 SSD 存储,价格不到 50k。你需要一些严肃的工作负载来限制这样的设置。

4、他们于 2018 年停止使用 MySQL。取而代之的是 vitess,它的功能远不止手动分片 MySQL。

5、说起来容易做起来难,只需对数据进行分片,然后使用某种分片索引或一致性哈希即可。 
该设计掩盖了如何扩展或缩小服务器。我更感兴趣的是它们如何处理添加和删除节点。 
添加或删除节点时: 

  • 是否有后台进程来复制数据并更新分片索引服务器?如何跟踪进度? 
  • 如果节点在扩展过程中发生故障,会发生什么情况?它可以回滚或取消吗?  
  • 当服务器之间不断发生写入操作时,如何管理记录迁移和索引服务器更新的事务?

5、他们在 2019 年关闭了 Vitess + MySQL,而不是 2006 年。Vitess 出自谷歌。2019 年,他们有 20 亿用户。今天他们有 27 亿。

6、没有任何数据库能够不经过额外工作就处理 24.9 亿用户。