当前位置:首页 > 技术文章 > 日活 2.5 亿的 Twitter 使用了哪些数据库?

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

Twitter 使用什么数据库存储用户每天发送的数亿条推文?是 SQL、NoSQL 还是其它持久化存储系统?Twitter 使用什么数据库?任何一个稍微有点规模的系统其存储层绝不会只使用一种数据库,服务于数以亿计用户的Twitter更是如此。Twitter使用的数据库主要有以下几种:Hadoop:用于社交图分析、推荐、趋势、API 分析、用户参与度预测、广告定位、广告分析、推文印象处理、进行 MySQL 备份、Manhattan 备份和存储前端抄写员日志。MySQL 和 Manhattan:存储

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 主要有两种用例:


  • 充当 Twitter 分片框架内分布式数据存储的存储节点。MySQL 存储节点为整个分布式存储提供可靠性和性能。

  • 为广告、身份验证、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 使用它来存储社交图,包含谁关注谁等信息。


图片


声明:本站所有内容均为自动采集而来,如有侵权,请联系删除
标签: Twitter处理
返回列表

上一篇:什么是架构师的真正内核?

没有最新的文章了...

相关文章

Redis连环五十二问!看谁顶得住?

Redis连环五十二问!看谁顶得住?

基本 1.说说什么是Redis? Redis是一种基于键...

用 PHP 处理 10 亿行数据!

用 PHP 处理 10 亿行数据!

今天,我将带大家一起走进“挑衅十亿行“数据的世界。当然,这个事情是依据GitHub上的一个“十亿行挑衅”(1brc)运动而来,现在正在进行,如果你没有听说过,可查看Gunnar Morlings 的 1brc 存储库。https://github.com/gunnarmorling/1brc我之所以...

2024 年的最佳 PHP 框架

2024 年的最佳 PHP 框架

在本文中,我们将预测在 2024 年持续风行的最佳 PHP 框架。我们首先将看看PHP框架是什么,什么时候该斟酌应用PHP框架,以及应用PHP框架的重要长处都是什么。我还会介绍最合适初学者的 PHP 框架以及用于 Web 开发的最佳框架。什么是PHP框架?     &...

一文读懂多家厂商的大模型训练、推理、部署策略

一文读懂多家厂商的大模型训练、推理、部署策略

4 月 20 日,第 102 期源创会在武汉胜利举行。本期邀请来自武汉人工智能研讨院、华为、MindSpore、京东云、Gitee AI 的人工智能专家,环绕【大模型竞技与性能优化】主题发表演讲。接下来就一起看看本期运动的出色瞬间吧!大合影 get ✅披萨和礼物不能少!接下来进入主题演讲回想环节。可...

请立刻停止编写 Dockerfiles 并使用 docker init

请立刻停止编写 Dockerfiles 并使用 docker init

您是那种认为编写 Dockerfile 和 docker-compose.yml 文件很苦楚的人之一吗?我承认,我就是其中之一。我总是想知道我是否遵守了 Dockerfile、 docker-compose 文件的最佳编写实践,我畏惧在不知不觉中引入了安全破绽。但是现在,我不必再担忧这个问题了,感激...

服务器为什么大多用 Linux 而不是 Windows ?

服务器为什么大多用 Linux 而不是 Windows ?

前几天在知乎看到一个话题很有意思,且很有讨论意义。“服务器为什么大多用 Linux”,除了开源、好用等原因,回答也代表了各种不同人需求和看法,摘取一些分享给大家,也欢迎留言讨论。来自知乎好友“熊大你又骗俺”的回答首先在20年前,windows server+iis+asp+access 的方案,还是...