返回顶部
首页 > 资讯 > 数据库 >怎么浅析Facebook对MySQL数据库的深度优化
  • 920
分享到

怎么浅析Facebook对MySQL数据库的深度优化

2023-06-10 11:06:54 920人浏览 安东尼
摘要

这期内容当中小编将会给大家带来有关怎么浅析Facebook对MySQL数据库的深度优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Facebook拥有世界上最大的Mysql数据库集群,其中包含了成千上万

这期内容当中小编将会给大家带来有关怎么浅析Facebook对MySQL数据库的深度优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

Facebook拥有世界上最大的Mysql数据库集群,其中包含了成千上万台服务器,这些服务器分布在跨越两个大洲的多个数据中心里。
通过几乎将所有的任务全部自动化,这个集群只有一只非常小的mysql DBA团队来进行管理,集群甚至可以自己运行。而实现这种自动化的核心组件之一就是所谓的MPS系统,即“Mysql Pool Scanner”。
MPS是一个大部分用python写的复杂状态机。它能够代替DBA执行很多例行任务,并且可以让我们以很少或是不施加人为干预就能执行批量维护工作。
单一数据库结点
在Facebook数以千计的数据库服务器中,每一个都能存储一定数量的MySQL实例。一个实例是一个单独的MySQL进程,以其自身的数据集监听着一个单独的端口。简单来说,我们假设在图表和示例中每个服务器正好有两个实例。
整个数据集分割为无数的shard,并且每个实例都拥有一组这样的shard,每个都在其自身的数据库Schema里。一个Facebook用户的信息在其创建的时候会分配给一个shard,这样每个shard就会包含有成千上万用户的相关数据。
用一个单一数据库服务器的图表可以更容易解释这一点:
怎么浅析Facebook对MySQL数据库的深度优化

每个实例在驻留于不同服务器上的其他实例上都有几个副本,而这些服务器通常是在不同数据中心里的。这样做主要是为了实现两个目的:
高可用性:如果一台服务器宕机了,我们在其他地方还有可用数据来提供服务。
性能:不同的地理位置拥有它们自己的副本,这样便可以使读取服务本地化。
这里是一个简单的replica set示意,它的每个服务器都只有一个实例,并且其他实例为空(我们称这些是spares):
一个服务器本质上是实例容器,所以现实中的情况可以会变得更为复杂。
例如,一个单一服务器拥有一个主实例也可能拥有一个不同主实例的从实例,像下面这样:
怎么浅析Facebook对MySQL数据库的深度优化

这里MPS依赖于两个重要的“building block”操作:
1. 创建一个副本/放置服务器
第一个building block操作是在一台不同的主机上创建一个实例的副本。我们使用Xtrabackup的修改版本来执行大多数复制操作。如果我们在复制成功完成后移除实例,替代过程也是同样的操作。
首先,系统为此操作分配一个空闲实例。我们选择其中一个从实例或主实例并复制其数据到新分配的空闲实例。下表显示了这一替代操作,它在复制完成后将实例移除:
2. 升级主实例
第二个building block操作是将一个不同的实例升级为一个replica set的主实例。
在升级过程中,我们首先选择一个目标,停止写入到replica set,将从实例改为从新的主实例进行复制,并恢复写入。在下图中演示了一个删除操作,即在升级成功完成之后旧实例会被丢弃。为简单起见,下面的replica set只包含三个实例:
怎么浅析Facebook对MySQL数据库的深度优化

这两个操作对于大多数使用MySQL的公司来说通常是很复杂的过程,而在Facebook,它不需要人为干预的情况下就已经可以由MPS快速而安全的全自动化运行。
主机管理和状态
通过上文我们已经解决了基本问题,现在可以利用这些building block来探索更为抽象的概念。
MPS会连接到一个存有当前所有数据库主机状态和元数据的库,这个库还包含了当前和过期MPS的复制操作。注册表是由数据库服务器自身进行管理,因此数据库集群和MPS可与不需要安装一个复杂的应用服务器。MPS本身实际上是无状态的,它在自己的主机池上运行并依赖于上述的库来进行状态管理。而状态是分别并行处理的。
当一个服务器在数据中心被“唤醒”(连接并配置好一个新的机架),它会每隔几分钟运行一个本地代理。此代理会执行以下步骤:
收集关于它自身的数据。(我在哪里?我有什么硬件?我正在运行什么版本的软件?)
根据问题对主机进行分类。(是否是在active的集群中被唤醒的?磁盘运转是否正常?闪存卡是否正常?)
确保服务器已注册,核心库系统中所包含的元数据保持最新。
在首次运行中,如果没有服务器的当前记录就将服务器上的实例置为初始的“reimage”状态。这便是新服务器在MPS中生命的开端。
所以每隔几分钟,每台正常的服务器都会到核心库“报道”并更新其状态,同时同步数据使用和系统健康度之类的事项。
目前MPS管理的最小单元就是一个实例。每个实例可以处于不同的状态。这些重要状态如下所列:
生产状态:实例正在服务于生产环境的流量。
空闲状态:实例准备被复制或被分配一些其他工作。
空闲分配状态:实例已被选中作为复制的对象,并且复制正在进行中。
空闲解除分配状态:.临时分流状态。实例已经改从生产环境移除并等待分流和清理。不会有实例在此状态停留很久。
排出状态:实例未被使用,而是预留给测试,数据中心维护等。需要有人工干预使得主机脱离此状态。
重塑(reimage)状态: 此状态下,拥有所有实例的服务器正处在重塑或修复过程中。此状态下的服务器会被移交并由一个称为Windex的协同系统加以管理。
由于MPS执行操作或是人工干预,一个实例可能会在不同状态间转换。以下状态表显示了几个主要状态以及可能让一个实例在不同状态间转换的操作。
怎么浅析Facebook对MySQL数据库的深度优化

上图只展示了MPS中一个实例很小一部分的可能采取的路径。这里所描述的状态改变是简单复制和维护操作的结果。还有很多其他原因可以让实例改变状态,并且将所有操作和检查都进行硬编码会让软件维护起来变得困难复杂。满足“问题”是MPS中另一个基本概念。
“问题”是附属于实例的一个属性。如果一台主机上所有的实例都有此问题,那么我们就会认为它是附属于服务器本身的。另外一种考虑问题的方式类似于标签。MPS会通过一个决策矩阵来协助有某个特定问题的实例做出决策。它基本上是一个个元组之间的映射(状态,问题)——(行动,状态)。
通过具体例子理解起来会更容易一些:
(生产,低空闲)——(替换,空闲解除分配):用有限空间在生产中替代一个实例,同时将其迁移至一台不同的服务器。
(空闲解除分配,旧内核)——(迁移,重塑):如果一个实例在此状态发生迁移,它就不会有生产数据,那么为什么不对它进行重塑呢?
(生产,主实例位于撤退位置)——(升级,生产):我们应该把主实例升级至正确的位置,并将此实例置于生产状态。
MPS中不同的状态和“问题”使得我们可以创建一个灵活、可维护的基础设施,用来管理服务器的整个生命周期。
MPS所解决的常见问题
在一个大型数据中心中,每天都会有几十个甚至上百个的服务器故障发生。下面介绍一些不需要人工干预,MPS就能自行处理的日常故障:
检测到损坏的从实例并将其禁用,直到它们在后台被替换。
损坏的主实例降级,这样正常运行的副本便会取代它们并在后台进行替换。
服务器上由于增长而耗尽空间的实例会被迁移至未充分使用的服务器。
当数据中心中存在成千上万台服务器的时候,升级新内核、改变分区大小或是升级控制器固件的维护工作会变得非常复杂。而对于像是迁移某些框架或是为工程团队分配测试服务器这些本地化操作也面临同样的问题。以下是一个运维人员可以通过单一命令让MPS执行的常见维护操作:
将任意数量的数据库服务器下架并移出生产环境。大多数这样的操作可以在24小时内完成。
在特定并发下重塑上万台机器(例如执行内核升级)。MPS会替代每台机器然后发送给Windex。
为一个新项目或测试分配任意数量的空闲空间。例如想要200台服务器来运行测试?完全没问题。
在一个新数据中心的特定并发下,为整个Facebook数据集创建副本。
用MPS将基础任务自动化,这样可以对我们所管理的服务器进行更好的规划,而且还能解放MySQL数据库团队来让他们从事更具挑战的工作。

上述就是小编为大家分享的怎么浅析Facebook对MySQL数据库的深度优化了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么浅析Facebook对MySQL数据库的深度优化

本文链接: https://lsjlt.com/news/260281.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么浅析Facebook对MySQL数据库的深度优化
    这期内容当中小编将会给大家带来有关怎么浅析Facebook对MySQL数据库的深度优化,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Facebook拥有世界上最大的MySQL数据库集群,其中包含了成千上万...
    99+
    2023-06-10
  • 如何优化数据库的数据深度学习
    优化数据库的数据深度学习可以通过以下几种方法实现: 数据清洗:确保数据库中的数据质量良好,包括去除重复数据、处理缺失值、处理异常值等,以确保深度学习模型不会因为低质量的数据而产生错误的结果。 数据归一化:对数据库中的数据进行归一化处...
    99+
    2024-07-03
    数据库
  • MySQL百万数据深度分页优化思路解析
    目录业务场景瓶颈再现问题分析回表覆盖索引IOLIMTI 2000,10 ?问题总结解决方案优化前后性能对比业务场景 一般在项目开发中会有很多的统计数据需要进行上报分析,一般在分析过后会在后台展示出来给运营和产品进行分页查...
    99+
    2023-05-12
    MySQL数据分页优化 MySQL分页优化百万级数据
  • 怎么浅谈数据库优化方案
    今天就跟大家聊聊有关怎么浅谈数据库优化方案,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。下面给大家分析了数据库优化方案,具体内容如下1. 利用表分区...
    99+
    2024-04-02
  • mysql数据库怎么优化
    mysql数据库怎么优化?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。mysql数据库怎么优化1.使用小的整数类型2.无特殊情...
    99+
    2024-04-02
  • 怎么优化Mysql数据库
    这篇文章将为大家详细讲解有关怎么优化Mysql数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。学无止境,数据库优化分为方方面面,在这里,我进行了比较全的总结,分享给正...
    99+
    2024-04-02
  • 如何浅析MySQL数据库磁盘I/O调整优化
    如何浅析MySQL数据库磁盘I/O调整优化,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。目前web的应用大多都以I/O密集型为...
    99+
    2024-04-02
  • 怎么做MySQL内核深度优化
    这篇文章将为大家详细讲解有关怎么做MySQL内核深度优化,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.内核性能的优化由于腾讯云上的DB基本都需要跨园区灾备的特性,因此...
    99+
    2024-04-02
  • 怎么深入浅析ASO关键词优化
    怎么深入浅析ASO关键词优化 ,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SEO人会经常自己挖掘一些长尾词,一般常用的做法是关注本行业即时出现的热点新闻、轰动...
    99+
    2023-06-10
  • mysql数据库优化怎么用
    mysql 数据库优化可提升性能、效率和可靠性。优化方法有:索引优化:创建索引加快数据检索;优化索引减少冗余,提升查询效率;复合索引提升复合查询性能。查询优化:分析慢查询日志优化低效查询...
    99+
    2024-05-30
    mysql 数据访问
  • 数据库也去中心化?深度解析分布式数据库
    在云计算、大数据等新技术的带动下,越来越多的企业需要对结构化的数据进行查询、分析、处理和更新。同时,随着创新业务的不断增加,业务的复杂及庞大的体量必然会产生错综复杂且规模巨大的结构化数据,这些都必然迫使企业对数据库的需求指向大规模、高可靠、...
    99+
    2023-06-04
  • 优化数据库质量:提升数据分析的精度
    1. 数据收集的质量控制 明确数据源:识别数据来源并评估其可靠性。 数据验证:使用数据类型检查、范围检查和格式验证来确保数据的完整性和一致性。 数据清洗:删除或更正不完整、不一致或无效的数据。 2. 数据存储的结构化 表设计:创建规...
    99+
    2024-04-02
  • Mysql深度分页搜索怎么优化
    要优化MySQL深度分页搜索,可以考虑以下几种方法: 使用索引:确保搜索的字段上有适当的索引。对于深度分页搜索,较大的表可能需要...
    99+
    2023-10-28
    Mysql
  • MySQL数据库优化是怎么样的
    这期内容当中小编将会给大家带来有关MySQL数据库优化是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的...
    99+
    2024-04-02
  • 深入浅析Spring的数据库连接池
    深入浅析Spring的数据库连接池?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数据库连接池对一个简单的数据库应用,由于对数据库的访问不是很频繁,这时可以简单地...
    99+
    2023-05-31
    spring 数据库连接池
  • (5)MySQL进阶篇SQL优化(优化数据库对象)
    1.概述 在数据库设计过程中,用户可能会经常遇到这种问题:是否应该把所有表都按照第三范式来设计?表里面的字段到底改设置为多大长度合适?这些问题虽然很小,但是如果设计不当则可能会给将来的应用带来很多的性能问题。本章中将介绍MySQL中一些数...
    99+
    2014-06-29
    (5)MySQL进阶篇SQL优化(优化数据库对象)
  • MySQL数据库怎么进行优化
    这篇文章主要讲解了“MySQL数据库怎么进行优化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL数据库怎么进行优化”吧!  MySQL数据库怎么优化...
    99+
    2024-04-02
  • 怎么优化MySQL数据库性能
    这篇文章主要为大家展示了“怎么优化MySQL数据库性能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么优化MySQL数据库性能”这篇文章吧。  1、选取最适用...
    99+
    2024-04-02
  • 深度解析PHP数据库接口的优势及原因
    标题:深度解析PHP数据库接口的优势及原因 随着互联网的发展和数据处理需求的增加,数据库操作在Web开发中扮演着至关重要的角色。而作为一种流行的服务器端脚本语言,PHP为开发人员提供了...
    99+
    2024-03-12
    接口 数据库 php sql语句 防止sql注入
  • 数据库优化秘笈:优化你的数据库,提升网站速度
    ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作