图解 Twitter 架构图

2024-06-17 10:04
文章标签 图解 twitter 架构图

本文主要是介绍图解 Twitter 架构图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

两年前,马老板收购了twitter,并且做了一系列的大动作。那么今天我们来看一下这个全球最火的软件之一的架构。
在这里插入图片描述
在这里插入图片描述

Twitter解析

开始之前,我先提前说明一下,我之前不是做搜推广的,所以对这些了解不是很深,如果有搜推广大佬看到有错的地方,欢迎指出来,感谢!

大体框架

在这里插入图片描述

各个部分拆解来看

1. 前端请求部分

在这里插入图片描述

这部分是 twitter 的前端页面请求,twitter 通过来源判断请求后端服务的方式。

  • 如果是安卓设备就使用 TLS-API 请求后端
  • 如果是苹果设备或者web端就直接基于GraphQL发送请求给后端

TLS 是 Twitter 的经典(传输层安全)APl。 我不是很懂为啥需要区别两个设备,一个走TLS-API、另一个走GraphQL。难道是历史遗留原因?有懂的小伙伴可以评论区讲解一下。

而 GraphQL 是一个 Facebook 开发的用于 API 查询语言和服务端运行时的开源数据查询语言,有灵活、高效的数据查询和交互方式。但这里应该还有一层gateway,前端与 Twitter 所有微服务之间的网关。 可能原图中省略了。

2. 总体模块

我们先来聊一下这两个模块

在这里插入图片描述
左边的for you 应该就是基于 following 而多加了点内容,而之所以放入following的内容,我猜测是为了留存率,因为For You 很明显大部分都是推荐的内容,万一推荐的内容不喜欢,导致这部分内容点击率低,而使得留存率低,所以会放一些following的内容,保住留存率,并且慢慢根据算法去推送可能感兴趣的内容

而右边的 following 大部分推文都是关注的人。

在这里插入图片描述

3. 时间轴模块

时间轴模块是twitter的核心模块。
在这里插入图片描述

这里被叫做mixer是有道理的,内容为主的app,都会涉及搜推广工作, Twitter 时间线是由一堆不同的内容源组成源,并根据百分比排列在时间轴上,通过算法微调用户的体验,也就是千人千面

例如,时间轴上 60% 的推文来自关注的人,推荐的内容占20%,广告占 20%,然后再基于此进行调高或调低。

  • people discovery service:关注的人所发的推文。
  • ad mixer:需要召回的广告,并且是该用户可能感兴趣的广告
  • onboarding service:基于所关注的人去推荐新内容来扩充内容版本,也就是引流。
  • timeline scorer:对召回的推文、广告、新内容做打分、进行排序,来决定展示在用户面前的顺序。

多个微服务之间用的是 thrift RPC 做rpc调用。这个rpc框架还是很火的。好像是apache社区的。

这和大部分的推荐系统一样,都是相似的架构。

4. home页面

在这里插入图片描述

那么这部分其实和timeline是类似的,只是召回的比例不一样,这部分重点更多的是推荐。

接下来介绍一下存储介质
在这里插入图片描述

  • manhattan :Twitter 的分布式数据库,官网有详细介绍:https://blog.x.com/engineering/en_us/a/2014/manhattan-our-real-time-multi-tenant-distributed-database-for-twitter-scale
    在这里插入图片描述

  • Gizmoduck:Twitter 的缓存库。

  • social graph:猜测是一个存储社交的图数据库,存储用户和用户之间的联系。

  • tweetyPie:应该就是处理所有与推文相关的服务。

在这里插入图片描述

5. 推荐模块

在这里插入图片描述

Fetch:尽可能的召回数据

  • CF mixer:应该是将所有的用户特征进行召回,包括用户画像,倒排索引,向量数据等等
  • EarlyBird:基于Lucene的实时倒排索引,实时搜索性能比MySQL高出一个数量级,内存效率提高了一倍,并能灵活地添加相关性过滤功能。
  • Uteg:猜测是用户画像特征
  • spaces:Twitter的视频流数据,一般会做为embedding向量化操作。
  • communicates:Twitter的社区数据。

Feature:尽可能的提取特征,做特征工程

  • Candidate Sources:输出的特征是后续推荐系统的输入,也就是推荐系统会推出具备这些特征的内容,而这些内容,是符合用户特征的,尽可能的留住用户。

Score:对特征进行排序

  • Prediction Service:对用户特征进行预测,预测出可能也对哪些特征感兴趣。比如喜欢NBA的人,可能会喜欢耐克。

在这里插入图片描述

Feature Hydration:根据文档介绍,hydration就是获取具备上述所错的feature特征的所有的推文的详细信息。

Alex Xu 大佬的图片

原twitter地址:https://x.com/alexxubyte/status/1594008281340530688
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 本周可能就会淘汰 TLS,因为只有当 Android 应用程序使用时间 ≥1 年时,才需要使用 TLS(这部分我不理解)
  • Home mixer 的计算速度比 Timeline 快 10 倍
  • 广告混合器可以大大提高相关性,并且用更少的曝光获取更多的点击,广告对于你来说越有趣,你看它的时间就越长。(是这样翻译吧?)

最后

当然 reddit 上面也有很多讨论,我把链接放这里,大家有兴趣也可以看看 https://www.reddit.com/r/ProgrammerHumor/comments/yz8zas/elons_10_pm_whiteboard_twitter_for_dummies/
在这里插入图片描述

这篇关于图解 Twitter 架构图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069139

相关文章

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

图解可观测Metrics, tracing, and logging

最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过,也是去年后半年到现在一直在做和研究的东西。从去年的关于Metrics的goappmonitor,到今年在排查问题时脑洞的基于log全链路(Tracing)追踪系统的设计,正好是对这三个话题的实践。这不禁让我对它们的关系进行思考:Metrics和Loggi

【数据结构】排序算法系列——希尔排序(附源码+图解)

希尔排序 算法思想 希尔排序(Shell Sort)是一种改进的插入排序算法,希尔排序的创造者Donald Shell想出了这个极具创造力的改进。其时间复杂度取决于步长序列(gap)的选择。我们在插入排序中,会发现是对整体数据直接进行了统一的插入排序,每个数据之间的间隙是1,这里的1指的就是步长序列gap。在希尔排序中,我们会将整体数据一分为多份,进行散布式的插入排序,这时候每一个子序列之间的

算法图解(8~10贪心,动态规划,K最近邻算法)

贪心算法 在每一步都选择局部最优解,从而期望最终得到全局最优解。 贪心算法并不总能保证全局最优解,因此需要满足以下两个条件: 贪心选择性质:可以通过局部最优选择构造出全局最优解。最优子结构:问题的最优解包含其子问题的最优解。 实例:给定面额的硬币,用最少硬币凑出指定金额 int minCoins(vector<int>& coins, int amount) {int count = 0

Java虚拟机--JVM内存堆布局图解分析

文章来源: https://www.cnblogs.com/WJ5888/p/4374791.html JAVA能够实现跨平台的一个根本原因,是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件,据此也可以知道,为啥Java语言的执行速度比C/C++语言执行的速度要慢了,当然原因肯定不止这一个,如在JVM中没有数据寄存器,指令集使用的是栈来保存

【图解版】Likes Vs Dislikes——C语言提高题【7 kyu】

一、原题 链接:Training on Likes Vs Dislikes | Codewars YouTube had a like and a dislike button, which allowed users to express their opinions about particular content. It was set up in such a way that you

基于Tomcat的JavaWeb(ASP)项目构建(图解)

目录 配置IDEA的TOMCAT环境 环境设置 导入API(可选) 创建项目 构建项目 ​编辑 运行项目 项目结果 ​编辑 查看配置基础项目 配置IDEA的TOMCAT环境 环境设置 导入API(可选) 创建项目 构建项目 运行项目 项目结果 查看配置基础项目 了解Web Application: Explo

风趣图解LLMs RAG的15种设计模式-第二课

全部用的是Midjourney连续性一致性绘图画成