前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YouTube如何利用MySQL支撑24.9亿用户?

YouTube如何利用MySQL支撑24.9亿用户?

作者头像
jeanron100
发布2024-06-27 13:24:38
690
发布2024-06-27 13:24:38
举报

前言:本文概述Vitess架构,如需了解更多信息,请在文章底部查看参考资料。本文基于笔者研究,可能与具体实践情况有所差异。

从前,三个PayPal前员工决定建立一个约会网站,然而他们的商业模式失败了。

因此他们转而创建了一个视频共享网站,并将其命名为YouTube。

他们将视频标题、描述和用户数据存储在MySQL中。随着用户增加,他们采用领导者-追随者(Leader-Follower)复制拓扑设置 MySQL 来扩展。

MySQL 中的领导者-追随者复制拓扑

MySQL中的复制是单线程的,因此,追随者无法跟上领导者的极端写入操作的新数据。

YouTube的增长速度是爆炸性的,其用户数达到惊人的十亿,成为世界上访问量第二大的网站。

因此,他们通过添加缓存进行了横向扩展,并预加载了MySQL二进制日志中的所有事件。这意味着复制变得受内存限制,速度更快。

尽管这暂时解决了他们的可扩展性问题,但新的问题又出现了,比如:

1. 分片

MySQL必须分区以处理存储需求,但在分片后,事务和连接就会变得困难,因此应该使用应用程序逻辑处理。

这意味着应用程序逻辑应该找到要查询的分片,这会增加停机的可能性。

2. 性能

领导者-跟随者复制拓扑导致从跟随者读取陈旧数据,因此,如果需要新鲜数据,应用逻辑必须将读取路由到领导者。

这需要额外的逻辑实现。

3. 保护

有些查询可能需要太长时间才能返回数据,同时,太多的MySQL连接可能存在问题,会使数据库崩溃。

MySQL

他们希望在MySQL之上建立一个抽象层,实现简单性和可扩展性,因此,他们创建了Vitess。

以下是Vitess提供极端可扩展性的方式:

1. 与数据库交互

他们在每个MySQL实例前安装了一个边车(sidecar)服务器,并称之为VTTablet。

VTTablet作为边车服务器运行

作用:

  • 控制MySQL服务器和管理数据库备份
  • 通过添加限制子句重写昂贵的查询
  • 缓存频繁访问的数据以防止出现惊群问题

2. 路由SQL查询

设置了一个无状态代理服务器来路由查询,并称之为VTGate

VTGate将查询路由到特定分片

作用:

  • 根据模式和分片方案找到正确的VTTablet来路由查询
  • 通过连接池保持较低的MySQL连接数
  • 与应用层使用MySQL协议通信
  • 为了简单起见,像一个整体式MySQL服务器一样运行
  • 限制同时进行的事务数量以提高性能

使用多个VTGate服务器进行扩展

同时运行多个VTGate服务器来实现扩展。

3. 状态信息

设置了一个分布式键值数据库来存储有关模式、分片方案和角色的信息。

存储元信息的键值数据库

键值数据库还处理数据库之间的关系,如领导者和跟随者。

YouTube使用Zookeeper来实现键值数据库,并将这些数据缓存在VTGate上以获得更好的性能。

更新键值数据库

他们运行了一个HTTP服务器来保持键值数据库更新,并称之为VTctld。它获取所有服务器及其关系的完整列表,然后更新键值数据库。

总结

Vitess的高级架构

  • VTGate:代理服务器,用于路由查询
  • 键值数据库:拓扑管理的配置服务器
  • VTTablet:每个MySQL上运行的边车服务器

YouTube工程师们用Go编写了Vitess并将其开源,并支持MariaDB。

YouTube通过Vitess+MySQL组合就能服务24.9亿用户,该案例研究表明,MySQL可以轻松处理互联网规模的流量。

>>>>

参考资料

  • Vitess Official Site https://vitess.io/
  • Vitess Architecture Official Docs https://vitess.io/docs/19.0/overview/architecture/
  • Scaling YouTube's Backend: The Vitess Trade-offs - @Scale 2014 - Data https://www.youtube.com/watch?v=5yDO-tmIoXY
  • Vitess: A Distributed Scalable Database Architecture https://www.youtube.com/watch?v=SXJZuGgXINk
  • What Is Vitess? https://vitess.io/docs/19.0/overview/whatisvitess/
  • Vitess on GitHub https://github.com/vitessio/vitess
  • Scalability at YouTube https://www.youtube.com/watch?v=G-lGCC4KKok
  • Vitess Supported Databases https://vitess.io/docs/19.0/overview/supported-databases/
  • Do Mysql slaves run multiple threads to read the Relay log to sync up the Master's operation https://stackoverflow.com/questions/35256926/do-mysql-slaves-run-multiple-threads-to-read-relay-log-for-sync-up-masters-oper
  • 11 Reasons Why YouTube Was Able to Support 100 Million Video Views a Day With Only 9 Engineers https://newsletter.systemdesign.one/p/youtube-scalability
  • Most Visited Websites In The World (May 2024) https://explodingtopics.com/blog/most-visited-websites
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档