日活2.5亿的Twitter 使用了哪些数据库?

Twitter 使用什么数据库存储用户每天发送的数亿条推文?是 SQL、NoSQL 还是其它持久化存储系统?

Twitter 使用什么数据库?

任何一个稍微有点规模的系统其存储层绝不会只使用一种数据库,服务于数以亿计用户的Twitter更是如此。Twitter使用的数据库主要有以下几种:

  • Hadoop:用于社交图分析、推荐、趋势、API 分析、用户参与度预测、广告定位、广告分析、推文印象处理、进行 MySQL 备份、Manhattan 备份和存储前端抄写员日志。
  • MySQL 和 Manhattan:存储用户数据。
  • Memcache、Redis: 用于缓存
  • FlockDB: 用于存储社交图谱
  • MetricsDB: 用于存储平台数据指标
  • Blobstore: 用于存储图像、视频和大型二进制对象。

现在让我们分别讨论一下这些数据存储。

Hadoop

Twitter 运行着世界上最大的 Hadoop 集群之一。最初,Hadoop 被用于 Twitter 上的 MySQL 备份,随着时间的推移,其使用案例大大增加。

如今,它不但用于MySQL 备份,还用于对用户在平台上执行的操作进行分析,包括社交图谱分析、推荐、趋势、API 分析、用户参与度预测、广告定位、广告分析、推文印象处理等。

Hadoop 文件系统存储了超过 500 PB 的数据,运行在数万个实例上。整个集群使用Hadoop Federation 功能进行管理,每天运行数十万个 Hadoop 作业和数千万个 Hadoop 任务。

Twitter每天有超过 15 万个服务和 1.3 亿个容器在运行。

为了扩展服务,Hadoop 使用不同的Namenode独立运行,且彼此之间没有依赖关系。

有一些节点称为数据节点Datanode,用于数据存储。这些数据节点在集群中向 Namenode 注册。

为了管理命名空间,使用了View 文件系统,这对于管理具有多个 Namenode 的集群很有用。

每个集群都有超过3500个Namenode。

关系数据库-MySQL,PostgreSQL

Twitter 最初以 MySQL 作为主要数据存储,然后逐渐从单一实例发展到大规模集群。

Twitter 自成立之初就拥有了世界上最大的 MySQL 集群之一。它包含数千个节点的 MySQL 实例,每秒可处理数百万次查询。

MySQL 主要有两种用例:

  1. 充当 Twitter 分片框架内分布式数据存储的存储节点。MySQL 存储节点为整个分布式存储提供可靠性和性能。
  2. 为广告、身份验证、Twitter 趋势和许多内部服务等服务提供支持。

Twitter 的工程团队还基于 Apache Mesos 构建了一个可扩展的 MySQL 数据库集群管理框架,称为 Mysos。它的主要目的是简化和自动化 MySQL 数据库实例的管理和调度,使得数据库在大规模环境中更加稳定和可靠。

除了 MySQL,其他基于 SQL 的数据存储(如 PostgreSQL 和 Vertica)也用于存储广告活动、销售和内部工具数据。

BlobStore

Blobstore 是 Twitter 的可扩展存储系统,用于存储用户图片、视频和其他大型二进制对象。它使 Twitter 能够降低存储用户上传的推文图片的成本。

它是一个高性能系统,能够每秒处理数十万的请求的同时在几十毫秒内提供图片。

当图片上传到 Blobstore 时,它会通过异步队列服务器将图片同步到 Twitter 的所有数据中心。

Memcache 和 Redis

通过缓存,Twitter 向客户端每秒传递约 120GB 的数据。

Twitter 的缓存有两个主要用途:

  • 第一个是存储热点数据,可以避免直接访问数据库。
  • 第二个,用于存储需要反复计算的中间数据或最终结果,避免重复计算。

Twitter 内部运行着许多缓存服务,其中之一是Redis。Redis 集群缓存用户消息、广告支出、展示次数和参与度等等。

此外,Twitter 还自研了Twemcache,这是 Memcache 的定制版本,适合大规模生产部署。该平台拥有数百个缓存实例,内存中存储着来自 30 多个服务的超过 20TB 的数据。总体而言,缓存层每天可处理超过 2 万亿次查询。

为了方便缓存的管理,Twitter又自研了一款轻量级缓存代理服务器–Twemproxy,它支持 Memcached 和 Redis 协议。它的主要作用是将客户端的请求分发到多个缓存服务器,从而实现缓存系统的横向扩展。Twemproxy 提供了一个单一的入口,使得客户端无需知道后端有多少缓存服务器,也无需处理服务器之间的数据分布和负载均衡问题。

Metrics DB

MetricsDB 是 Twitter 用于存储和管理平台数据指标的时间序列数据库。它具有高效的压缩和多区支持等特性,能够处理海量数据和高并发查询。指标的摄取率超过每分钟 50 亿个指标,每分钟 25K 个查询请求。

最初,Manhattan 用作指标存储数据库,但 Twitter 面临可扩展性问题以及不支持附加的分钟指标标签。

这导致了内部开发 Metrics DB,使用了 Facebook 内存时间序列数据库 Gorilla 的压缩算法。

Metrics DB 提供多区域支持、指标分区,压缩效率高于 Twitter 使用的其他数据存储。使用 Gorilla 的压缩算法,Twitter 减少了 95% 的空间使用量。

MetricsDB 有 3 个主要组件:

  • ClusterManager:ClusterManager 负责管理整个 MetricsDB 集群,包括协调数据的分配、处理节点的状态监控、负载均衡等。它确保所有的数据存储节点正常工作,并在出现问题时进行相应的处理。想象一个公司的经理,他负责管理公司的所有员工,分配任务,监控工作进度,并确保每个人都在按计划工作。如果某个员工遇到问题,经理会及时介入,进行调整和帮助。ClusterManager 的作用类似于这位经理,管理和协调整个集群的运作。
  • BackendServers:BackendServers 是实际存储和处理数据的节点。每个服务器存储一定量的时间序列数据,并负责处理查询请求。这些服务器是系统的核心部分,每个 BackendServer 都会在内存中保存所有指标的最新两小时数据,BackendServer 还会缓存经常访问的指标和时间范围的旧数据。
  • Coordinators:Coordinators 负责处理客户端的请求,并与 BackendServers 协作以完成数据存储和查询操作。它们充当客户端和 BackendServers 之间的中介,确保数据的正确存取和高效处理。想象一家大型公司的前台接待员,他们接待来访者,并根据来访者的需求将其引导到相应的部门或人员。Coordinators 就像这些接待员,负责处理客户端请求并将其分配到正确的存储节点。

FlockDB

FlockDB 是一个分布式图形数据存储,专为快速图形遍历、存储邻接表、支持高频添加、删除和更新操作、分页处理数百万条目、横向扩展和运行图形遍历查询而设计。

Twitter 使用它来存储社交图,包含谁关注谁等信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3246748.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

《YOLOv10改进实战专栏》专栏介绍 专栏目录

《YOLOv10改进实战专栏》介绍及目录 YOLOv10官方仓库地址 专栏地址:点击跳转 专栏导航如下: 🎀基础入门篇🎀 万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指…

Vue学习---vue cli 项目创建

使用的编辑工具webStorm 创建例子: hello vue create hello 选择 vue3 进行创建 运行 npm run serve 测试访问:http://localhost:8080 改动内容重新编译: npm run build dist 目录就是编译后的可运行内容

浅谈C嘎嘎类与对象

本篇文章与大家浅谈一下C嘎嘎的类与对象知识点 类的定义 关键字:class 语法格式: class 类名 { };//这里的分号不能少 此外,class有三个属性分别是private、public、protected,这三个属性是干啥的,相…

MSPM0G3507——时钟主频拉到80MHZ

先点开使用时钟树 在配置时钟界面这样配置

Ghost Browser指纹浏览器年+IPXProxy代理IP组合:SheIn卖家必看

SheIn是一家时尚电商公司,其用户数量近年来增长迅速,在全球的知名度越来越高。SheIn跨境电商卖家想要提升店铺曝光和排名,从而增加销量和信誉的话,就需要满足独立IP、模拟设备参数、独立环境等条件。同时满足这些条件的话就需要用…

生成式人工智能(AI)的未来

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

windows qt编译报错 无法打开包括文件: “EGL/egl.h”: No such file or directory

windows mingw32 qt creator QtAV 推荐ffmpeg依赖包 QT5.14.2 如果出现:无法打开包括文件: “EGL/egl.h”: No such file or directory 可能是Qt6的问题.在QT5上安装。 编译步骤: git clone https://github.com/wang-bin/QtAV.git cd QtAV &&…

【深度学习教程】

文章目录 pytorch官方教程知识蒸馏:https://pytorch.org/tutorials/beginner/knowledge_distillation_tutorial.html 李宏毅-机器学习/深度学习https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.phphttps://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.phphttp…

最新Qt6的下载与成功安装详细介绍

引言 Qt6 是一款强大的跨平台应用程序开发框架,支持多种编程语言,最常用的是C。Qt6带来了许多改进和新功能,包括对C17的支持、增强的QML和UI技术、新的图形架构,以及构建系统方面的革新。本文将指导你如何在Windows平台上下载和安…

第五章:卷-将磁盘挂载到容器

本章内容包括: 创建多容器pod创建一个可在容器间共享磁盘存储的卷在pod中使用git仓库将持久性存储挂载到pod使用预先配置的持久性存储动态调配持久存储 在前面说过,pod类似逻辑主机,在逻辑主机中运行的进程共享如CPU、RAM、网络接口等资源&am…

一分钟了解什么是1U,2U服务器?

一、什么是1U,2U服务器? 什么是1U服务器呢?所谓的1U服务器就是一种高可用高密度的低成本服务器平台,U是服务器机箱的高度 1U等于4.45厘米 ,那3U就是3x4.5CM了。 u(unit的缩略语)是一种表示组合式机架外部尺寸的单位&a…

【时时三省】tessy 集成测试:小白入门指导手册

目录 1,创建集成测试模块且分析源文件 2,设置测试环境 3,TIE界面设置相关函数 4,SCE界面增加用例 5,编辑数据 6,用例所对应的测试函数序列 7,添加 work task 函数 8,为测试场景添加函数 9,为函数赋值 10,编辑时间序列的数值 11,执行用例 12,其他注意事项…

【论文阅读】(StemGNN)多元时间序列预测的谱时间图神经网络

(StemGNN)Spectral Temporal Graph Neural Network for Multivariate Time-series Forecasting 引用: Cao D , Wang Y , Duan J ,et al.Spectral Temporal Graph Neural Network for Multivariate Time-series Forecasting[J]. 2021.DOI:10.…

DockerHub无法拉取镜像怎么办

快速构建企业级AIGC项目 LangChat是Java生态下企业级AIGC项目解决方案,在RBAC权限体系的基础上,集成AIGC大模型功能,帮助企业快速定制知识库、企业机器人。 网站文档:Index – LangChat 后台地址:LangChain Chat 前台…

【深度学习入门篇 ⑧】关于卷积神经网络

【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

昇思25天学习打卡营第13天|CycleGAN 图像风格迁移互换全流程解析

目录 数据集下载和加载 可视化 构建生成器 构建判别器 优化器和损失函数 前向计算 计算梯度和反向传播 模型训练 模型推理 数据集下载和加载 使用 download 接口下载数据集,并将下载后的数据集自动解压到当前目录下。数据下载之前需要使用 pip install dow…

el-table表格操作列错行处理

解决方法&#xff1a; <style>::v-deep .el-table th.el-table__cell > .cell {white-space: nowrap !important;} </style>

Template execution failed: ReferenceError: name is not defined

问题 我们使用了html-webpack-plugin&#xff08;webpack&#xff09;进行编译html&#xff0c;导致的错误。 排查结果 连接地址 html-webpack-plugin版本低(2.30.1)&#xff0c;html模板里面不能有符号&#xff0c;注释都不行 // var reg new RegExp((^|&)${name}([^&…

测试——基础篇

内容纲要: 软件测试的生命周期 如何描述一个bug 如何定义bug的级别 bug的生命周期 如何开始第一次测试 测试的执行和bug管理 产生争执怎么办 1. 软件测试的生命周期 需求分析→测试计划→ 测试设计、测试开发→ 测试执行→ 测试评估 需求分析:需求是否正确,是否可行测试计划:…

Qt基础 | Qt全局定义 | qglobal头文件中的数据类型、函数、宏定义

文章目录 一、数据类型定义二、函数三、宏定义 QtGlobal头文件包含了 Qt 类库的一些全局定义 &#xff0c;包括基本数据类型、函数和宏&#xff0c;一般的Qt类的头文件都会包含该文件。 详细内容可参考&#xff1a;https://doc.qt.io/qt-5/qtglobal.html 一、数据类型定义 为了…