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

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

作者头像
jeanron100
发布于 2024-06-27 05:24:38
发布于 2024-06-27 05:24:38
1650
举报

前言:本文概述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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
云原生数据库vitess简介
Vitess是用于部署,扩展和管理MySQL实例的大型群集的数据库解决方案。它在架构上可以像在专用硬件上一样有效地在公共或私有云架构中运行。它结合了NoSQL数据库的可伸缩性,并扩展了许多重要的MySQL功能。Vitess可以帮助您解决以下问题:
有点技术
2020/07/14
6.2K0
云原生数据库vitess简介
分库分表之初识Vitess
Vitess,作为海外最为知名的分库分表产品,一直以来在国内声音不多。近期抽空了解下这个产品,特分享出来。本文部分内容取自Vitess官网https://vitess.io。
用户5548425
2021/09/09
2.4K0
分库分表之初识Vitess
开源中间件Vitess助力MySQL实现分库分表
Vitess自2011年以来一直为YouTube的所有数据库流量提供服务,目前已被许多企业采用,以满足其生产需求。
MySQL轻松学
2019/10/24
4.4K0
组件分享之后端组件——基于Golang的数据库集群系统vitess
近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。
cn華少
2022/06/17
6270
YouTube 数据库如何保存巨量视频文件?
本文最初发表于 scaleyourapp.com 网站,经原作者 Shivang Sarawagi 授权由 InfoQ 中文站翻译分享。
深度学习与Python
2022/11/28
1.6K0
YouTube 数据库如何保存巨量视频文件?
Vitess项目
说明:Vitess是一个数据库集群系统,通过广义分片对MySQL进行水平扩展。通过封装分片路由逻辑,Vitess允许应用程序代码和数据库查询保持与数据在多个分片上的分布无关。使用Vitess,您甚至可以根据需要增加分割和合并分片,原子切换步骤只需几秒钟。自2011年以来,Vitess一直是YouTube数据库基础架构的核心组件,并且已经发展到包含数以万计的MySQL节点。
CNCF
2019/12/05
4290
Vitess online DDL介绍
Vitess 引入了一种运行模式迁移的新方法:非阻塞的、异步的、预定的online DDL。通过 online DDL,Vitess 简化了模式迁移过程,它获得了操作开销的所有权,并为用户提供了一个简单、熟悉的界面:标准的 ALTER TABLE 语句。
CNCF
2021/03/15
1.6K0
Vitess online DDL介绍
我们对比了5款数据库,告诉你NewSQL的独到之处
对大多数开发人员而言,SQL 以及 MySQL、PostgreSQL 等关系数据库管理系统(即 RDBMS)并不陌生。RDBMS 的基本架构原则已历经了数十年的发展。而 MongoDB、Cassandra 等 NoSQL 解决方案,则是在本世纪初为满足数据分布可扩展的需求而提出的。
IT阅读排行榜
2019/06/14
7.7K0
谈下mysql中间件(问题域、业内组件)
这段时间团队在梳理mysql使用上的一些痛点(分库分表、读写分离、权限控制、监控告警、日志审计等),也调研了业内一些mysql中间件的实现,这里把对问题域的思考,以及常见中间件整理沉淀一下
王昂
2018/09/28
3K1
『数据密集型应用系统设计』读书笔记(五)
在前面几章,我们讨论了数据系统的各个方面,但仅限于数据存储在单台机器上的情况。现在我们进入更高的层次,在接下来的几章讨论将数据库分布到多台机器的情况。
1ess
2021/12/28
3690
『数据密集型应用系统设计』读书笔记(五)
Raft 协议学习笔记
好久没有更新博客了,最近研究了Raft 协议,谈谈自己对 Raft 协议的理解。希望这篇文章能够帮助大家理解 Raft 论文。
用户2060079
2018/10/11
4850
为什么Vitess推荐每个MySQL服务器250GB?
Vitess对数据库的可伸缩性有自己的看法。有些观点很少有争议,比如应该如何通过复制提供持久性,但是我发现一个有趣的建议是每个MySQL服务器250GB。
CNCF
2019/12/04
1.1K0
GitHub分享了他们将自己1200+节点、300+TB数据存储的MySQL从5.7升级至8.0的故事
GitHub分享了他们将自己1200+节点、300+TB数据存储的MySQL集群从5.7升级至8.0的故事
贺春旸的技术博客
2023/12/09
3860
分布式系统模式1-简介
来源: https://martinfowler.com/articles/patterns-of-distributed-systems/
java达人
2020/12/03
7740
分布式系统模式1-简介
宣布etcd 3.4
作者:Gyuho Lee(AWS,@gyuho),Jingyi Hu(谷歌,@jingyih)
CNCF
2019/12/04
1.3K0
宣布etcd 3.4
技术分享 | 提升Hadoop性能和利用率你知道有哪些吗?
时下流行的词汇是大数据和Hadoop。了解大数据的知道Hadoop有三个组件,即HDFS、MapReduce和Yarn。 HDFS代表Hadoop分布式文件系统。 Hadoop分布式文件系统用于整个集群中以块的形式在计算机之间存储数据。 MapReduce是一种编程模型,可以用来编写我们的业务逻辑并获取所需的数据。 而Yarn是HDFS和Spark、Hbase等其他应用程序之间的接口。我们不知道的是,Hadoop使用了很多其他应用程序有助于其最佳性能和利用率。 1、Hbase HBase是一个基于HDFS的
加米谷大数据
2018/04/02
1.3K0
技术分享 | 提升Hadoop性能和利用率你知道有哪些吗?
高性能 MySQL 第四版(GPT 重译)(四)
在个人项目中运行 MySQL,甚至在年轻公司中运行 MySQL,与在市��已经建立并且“呈现指数增长”业务中运行 MySQL 大不相同。在高速业务环境中,流量可能每年增长数倍,环境变得更加复杂,伴随的数据需求迅速增加。扩展 MySQL 与其他类型的服务器大不相同,主要是因为数据的有状态性质。将其与 Web 服务器进行比较,后者的广泛接受的模型是在负载均衡器后面添加更多服务器通常是您需要做的全部。
ApacheCN_飞龙
2024/03/20
2040
高性能 MySQL 第四版(GPT 重译)(四)
数据库是如何分片的?
如果你使用过 Google 或 YouTube,那么你很可能已经访问过分片数据。分片通过将数据分区存储在多个服务器上,而不是将所有内容放在一个巨大的服务器上,以实现扩展数据库的目的。这篇文章将介绍数据库分片的工作原理、思考如何给你自己的数据库分片,以及其他一些有用的、可以提供帮助的工具,尤其是针对 MySQL 和 Postgres。
出其东门
2023/09/02
4210
数据库是如何分片的?
Raft: 寻找可理解的共识算法(完)
Figure 10: Switching directly from one configuration to another is unsafe because different servers will switch at different times. In this example, the cluster grows from three servers to five. Unfortunately, there is a point in time where two different leaders can be elected for the same term, one with a majority of the old configuration (Cold) and another with a majority of the new configuration (Cnew).
s09g
2022/07/06
5080
Raft: 寻找可理解的共识算法(完)
如何在云中部署低延迟解决方案
作者 | Peter Lawrey,Nick Tindall 译者 | Sambodhi 策划 | 褚杏娟 过去,为了从“内部”(通常都是位于同一地点)的硬件中获得最大的性能和最低的延迟,这些有低延迟需求的公司都是在裸机服务器上部署的,放弃了虚拟化和容器化的便利性和可编程性。 近来,这些公司日益转向公共和私有“云”环境,或为其所调整的低延迟 / 高容量(LL/HV)系统提供卫星服务,或在一些场合下用于 LL/HV 工作负载本身。 这个演示是在一个典型的云原生环境中实现了 Chronicle Que
深度学习与Python
2023/03/29
4360
如何在云中部署低延迟解决方案
相关推荐
云原生数据库vitess简介
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档