图解 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/
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI 6.0(Xcode 16)全新 @Entry 和 @Previewable 宏让开发妙趣横生

概览 如火如荼的 WWDC 2024 已进入第五天,苹果开发平台中众多海量新功能都争先恐后的喷薄欲出。 在这里就让我们从中挑两个轻松有趣的新功能展示给小伙伴们吧:它们分别是 全新的 Entry 和 Previewable 宏。 在本篇博文中,您将学到如下内容&a…

WEB基础--Mybatis

了解Mybatis 什么是Mybatis 市面上最流行的技术架构:SSM 他们代表了 Spring业务层框架,SpringMvc WEB层框架以及MyBatis数据库持久层框架。 MyBatis 作为一个数据库持久层框架,是基于ORM规范(对象关系映射) 。类似我们以前的JDBC 和 JPA。…

DzzOffice集成功能最丰富的开源PHP+MySQL办公系统套件

DzzOffice是一套开源办公套件,旨在为企业和团队提供类似“Google企业应用套件”和“微软Office365”的协同办公平台。以下是对DzzOffice的详细介绍: 主要功能和应用: 网盘:支持企业、团队文件的集中管理,提供文件标签…

memory动态内存管理学习之shared_ptr

此头文件是动态内存管理库的一部分。std::shared_ptr 是一种通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可持有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的持有对象的 shared_ptr 被销毁;最后剩下的持有对象的 s…

PID_Compact指令博图仿真

一、PID_Compact 指令管脚介绍 做仿真前,肯定要对主角有一定了解才能够按我们需要的去控制。 主要管脚介绍: 输入参数: setpoint:自动模式下的用户设定值; input:实际反馈值,非模拟量&#x…

[Linux] TCP协议介绍(2): TCP协议的“三次握手“过程分析、超时重传机制介绍...

上一篇文章中, 已经介绍了TCP协议的数据格式, 简单分析了其与UDP协议 关于可靠性方面的差异 本篇文章, 介绍分析一下 使用TCP协议通信, 非常重要的一个过程: 三次握手 TCP的"三次握手" TCP协议是有连接的传输层协议, 即使用TCP协议通信, 是需要建立连接的 TCP协议…

【LeetCode 动态规划】买卖股票的最佳时机问题合集

文章目录 1. 买卖股票的最佳时机含冷冻期 1. 买卖股票的最佳时机含冷冻期 题目链接&#x1f517; &#x1f34e;题目思路&#xff1a; &#x1f34e;题目代码&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();ve…

快手爬票概述

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 无论是出差还是旅行&#xff0c;都无法离开交通工具的支持。现如今随着科技水平的提高&#xff0c;高铁与动车成为人们喜爱的交通工具。如果想要知道…

代码随想录二刷DAY1~3

Day1 704 二分查找&#xff0c;简单 我也有自己写题解的能力了&#xff0c;而且思维很清晰&#xff1a; 找什么就在if里写什么。 class Solution {public: int search(vector<int>& nums, int target) { int l0,rnums.size()-1; while(l<r){ …

【计算机网络】已解决:“‘ping‘ 不是内部或外部命令,也不是可运行的程序或批处理文件”报错

文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确解决方法与示例五、注意事项 已解决“‘ping’ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件”报错 一、问题分析背景 在Windows操作系统中&#xff0c;ping 命令是一个常用的网络诊断…

动态规划的递归写法和递推写法详解

目录 动态规划的概念 动态规划的递归写法 动态规划的递推写法 动态规划的概念 动态规划是一种用来解决一类最优化问题的算法思想。简单来说&#xff0c;动态规划将一个复杂的问题分解成若干个子问题&#xff0c;通过综合子问题的最优解来得到原问题的最优解。需要注意的是&…

【stm32-新建工程】

stm32-新建工程 ■ 下载相关STM32Cube官方固件包&#xff08;F1&#xff0c;F4&#xff0c;F7&#xff0c;H7&#xff09;■ 1. ST官方搜索STM32Cube■ 2. 搜索 STM32Cube■ 3. 点击获取软件■ 4. 选择对应的版本下载■ 5. 输入账号信息■ 6. 出现下载弹框&#xff0c;等待下载…

Codeforces Round 953 (Div. 2)(A~D题解)

这次比赛是我最顺利的一次比赛&#xff0c;也是成功在中途打进前1500&#xff0c;写完第三道题的时候也是保持在1600左右&#xff0c;但是后面就啥都不会了&#xff0c;还吃了点罚时&#xff0c;虽说如此也算是看到进步了&#xff0c;D题学长说很简单&#xff0c;但是我当时分析…

如何实现“变”CF而不变有效值

存在一些特殊需求,需要在保证有效值不变的情况下,“改变”正弦波的峰值因数(CF),如图,由绿色波形变为灰色波形: 正常的正弦波为 f ( t ) = 2 A ⋅ s i n ( 2 π T t ) f(t)=\sqrt{2}A\cdot sin(\frac{2\pi}{T}t) f(t)=2 ​A⋅sin(T2π​t) ,CF值为 2 \sqrt{2} 2 ​ …

Vue路由守卫的使用

示例如下&#xff1a;&#xff08;第一张图&#xff09;当你点击车1的时候你写了路由守卫就点不开出现无权访问 &#xff08;第二张图&#xff0c;就是可以访问后的图&#xff09;有路由守卫点不开的情况下当你在本地存储中写了你在路由守卫中写的东西就可以进入了 你需要在r…

[文献解读]:斯坦福最新研究-HumanPlus:人形机器人跟踪和模仿人类

摘要 制造具有与人类相似外形的机器人的关键论点之一是&#xff0c;我们可以利用大量人类数据进行训练。然而&#xff0c;由于人形机器人感知和控制的复杂性、人形机器人与人类在形态和驱动方面仍然存在的物理差距&#xff0c;以及人形机器人缺乏从自我中心视觉学习自主技能的…

基于STM32和人工智能的自动驾驶小车系统

目录 引言环境准备自动驾驶小车系统基础代码实现&#xff1a;实现自动驾驶小车系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;自动驾驶应用与优化问题解决方案与优化收尾与总结 1. 引言 随着人工智能和嵌入式系统技术的…

Oracle--存储结构

总览 一、逻辑存储结构 二、物理存储结构 1.数据文件 2.控制文件 3.日志文件 4.服务器参数文件 5.密码文件 总览 一、逻辑存储结构 数据块是Oracle逻辑存储结构中的最小的逻辑单位&#xff0c;一个数据库块对应一个或者多个物理块&#xff0c;大小由参数DB_BLOCK_SIZE决…

一段代码读取Chrome存储的所有账号密码和Cookie

先写结论&#xff1a; Chrome密码管理里的账号密码&#xff0c;还有Cookie&#xff0c;安全性并不算太高&#xff0c;一段代码就可以自动读取并上报到其它地方。 尤其是国内用户大多喜欢破解软件&#xff0c;这些软件只要注入这样一段代码&#xff0c;就无声无息的把你的所有账…

KT-H6测距模块标品,测距范围1500m,demo报价1000RMB,批量报价500RMB

激光测距传感器是一种用于测量距离的模块,通常由传感器和相关电子设备组成,测距模块可以集成到各种设备和系统中,以实现准确的测距和定位功能。KT-H6系列激光测距模块,为自主研发,激光波长905nm的激光器,专为热成像、夜视仪、无人机、安防、瞄具等产品定身打造,其优点是…