Twitter 工作原理|架构解析|社交APP逻辑

这是对Twitter 工作原理|架构解析|社交APP逻辑_哔哩哔哩_bilibili的学习,感谢up小凡生一

 在两年半前,埃隆·马斯克收购了Twitter,并且进行了一系列重大改革。今天我们来解析一下这个全球知名社交平台的架构。首先,我们根据马斯克两年前晒出的草图来绘制一个大体的框架图。按照草图,Twitter的前端页面会根据来源判断,以不同方式向后端发送请求。如果是安卓设备,就通过T2S API请求后端;如果是苹果设备或Web端,就直接基于Web SQL发送请求给后端。Web SQL是一个类似JSON的数据结构。

T2S API有两种解释:一种说法是Twitter的经典传输层,安全的API网关系统,也就是沿用了HTTPS;另一种说法是T2S是Twitter系统的缩写,即Twitter的最初主业务。马斯克曾提到,可能会淘汰T2S API,因为只有当安卓应用程序使用超过一年后,才需要使用这个API。

 接下来,我们来看Twitter的两个主要模块:“For you”和“Following”。这两个模块对应着以前的“Home”和“Letters”。“For you”模块根据用户平时浏览的内容推荐相似内容,也会有一些“Following”的内容。这样做的目的是为了提高留存率,因为“For you”大部分是推荐内容,如果推荐的内容不感兴趣,可能会导致点击率低,从而影响留存率。所以在召回时,会召回一些“Following”的内容,以保持留存率,并根据算法推送可能感兴趣的内容,来调整推荐和关注内容的比例。

 “Following”模块主要是关注的人发布的推文。我们了解了这两个模块后,来分析这两个模块。“Following”是时间轴模块,而时间轴模块是Twitter的核心模块,位于草图中间偏上的位置。时间轴上60%的推文来自于关注的人,推荐内容占20%,广告也占20%,然后基于此进行调整。

我们逐个分析小模块:

  • People discover:关注的人所发推文的服务。

  • Reservers:需要召回的广告,并且是该用户可能感兴趣的广告。这是Twitter主要的变现手段,马斯克也有补充,广告混合器可以大大提高相关性,并且用更少的曝光获取更多的点击。

  • On boring server:基于所关注的人去推荐新内容来扩展内容板块,也就是引流。

  • Ta scholar:对召回的推文广告新内容做打分进行排序,来决定展示在用户面前的顺序。排序非常重要,排在前面意味着有更高的曝光,可能带来更大的收益。

  • 这几个小模块之间都是以微服务的形式做调用关系,多个微服务之间用的是Free RPC做RPC调用,主要由阿帕奇社区做维护。

总体来说,Twitter的架构和大部分推荐系统的架构相似。接下来我们来看Home页面,这部分其实和时间线也有类似的召回计算排序,只是召回和计算的重点不一,重点更多的放在了推荐上。不过这部分的计算要比探探模块要快,因为历史原因,导致它耐模块很难做变动,毕竟Home模块是比较新的模块。

接着来介绍一下存储介质:

  • Manhattan:Twitter的分布式数据库,类似于一个分布式的MySQL。

  • GIS:Twitter的分布式缓存,类似于Redis。

  • Show show gap:我猜测是一个存储社交图数据库,存储用户和用户之间的联系,这样就不需要每一次召回的时候都计算一次用户和用户之间的关系了。

 

Twitter处理所有与推文相关的服务,然后到了推荐模块,这个模块在草图的右下角。推荐模块包括召回动作,尽可能的召回数据,然后进行特征提取,做特征工程,输出的特征是后续推荐系统的输入,也就是推荐系统会推出具备这些特征的内容,而这些内容是符合用户特征的,尽可能的留住用户。这些特征会根据fit的数据来做权重比例,而这个权重比例就会在下一个score环节做计算,来决定最终的排序。

  • Publication service:对用户特征进行预测,预测出可能会对哪一些特征感兴趣。

  • Future hydration:其实就是将用户的特征进行存储,方便快速调用。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础学习内容大纲

Java基础学习内容大纲 第一阶段:建立编程思想 ​ Java概述:如何快速学习Java技术、Java历史、Java特点、Sublime、Java运行机制、JDK、转义字符、Java开发规范、Java API ​ 变量:数据类型、变量基本使用、数据类型转换 ​ 运算符:运算符介绍、算数运算符、关系运算符、…

如何对多维样本进行KS检验

对于形状为 ( 10000 , 1 , 304 ) (10000, 1, 304) (10000,1,304)的三维数据,若需使用scipy.stats.ks_2samp进行KS检验,可按以下步骤处理: 数据降维 KS检验要求输入为一维数组,需将三维数据展平或按特定维度聚合: • 方…

在 VMware 虚拟机中安装 Windows7

文章目录 前言1.安装VMware 虚拟机1. VMware虚拟机软件安装2. 虚拟机创建配置(超详细步骤)3. Windows7系统安装 3、安装 VMware tools4. VMware Tools安装与优化5. 总结与常见问题 前言 最近有不少朋友在问如何在电脑上同时使用多个操作系统&#xff0c…

直播预告|TinyVue 组件库高级用法:定制你的企业级UI体系

TinyVue 是一个跨端跨框架的企业级 UI 组件库,基于 renderless 无渲染组件设计架构,实现了一套代码同时支持 Vue2 和 Vue3,支持 PC 和移动端,包含 100 多个功能丰富的精美组件,可帮助开发者高效开发 Web 应用。 4 月 …

分治而不割裂—分治协同式敏捷工作模式

分治而不割裂:解密敏捷协同工作模式如何驱动大企业持续领跑 在数字化浪潮中,亚马逊仅用11天完成Prime Day全球技术架构升级,华为5G基站项目组创造过单周迭代47个功能模块的纪录,这些商业奇迹的背后,都隐藏着一个共性秘…

Python列表全面解析:从基础到高阶操作

一、为什么需要列表? 在Python中,列表是可变有序序列,用于存储多个元素的容器。相较于单一变量存储独立值,列表能更高效地管理批量数据,其特点包括: ​引用存储:列表元素存储的是对象的引用​…

Spring知识点梳理

一、Spring(Spring Framework) 1、IOC(控制反转) 1)什么是IOC控制反转? 为了解藕,有反转就有“正转”,“正转”就是程序员手动 new对象;“反转”就是将对象的创建、对…

SpringBoot启动后自动执行方法的各种方式-笔记

1. SpringBoot启动后自动执行方法的各种方式 1.1 PostConstruct 注解 作用:在依赖注入完成后执行初始化方法。 适用场景:需要在Bean初始化时执行某些操作(如配置、预加载数据)。 注意:该方法在Bean初始化阶段执行&…

基础知识-java流steam

Java Stream 流详解 一、Stream 概述 #mermaid-svg-ZXmu5UZgAcGGq8EN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ZXmu5UZgAcGGq8EN .error-icon{fill:#552222;}#mermaid-svg-ZXmu5UZgAcGGq8EN .error-text{fil…

8.Android(通过Manifest配置文件传递数据(meta-data))

配置文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><applicationandroid:allowBackup"tr…

java 解析入参里的cron表达式,修改周时间

文章目录 前言一、java 解析入参里的cron表达式,修改周时间二、使用步骤1.示例 总结 前言 一、java 解析入参里的cron表达式,修改周时间 示例&#xff1a; 第一种: 0 0 0,16 ? * 0,1 第2种 0 0 0,16 ? * 1-7 第3种 0 0 0,16 ? * ? 第4种 0 0 0,16 ? * * 二、使用步骤 1…

DTO,VO,PO,Entity

1. DTO (Data Transfer Object) 定义 DTO 是数据传输对象&#xff0c;用于在不同系统或层之间传输数据。 目的 简化数据传输&#xff0c;降低耦合&#xff0c;通常只包含需要传输的字段&#xff0c;避免暴露内部实现细节。 使用场景 Controller 和 Service 或 远程调用 之…

从零搭建高可用分布式限流组件:设计模式与Redis令牌桶实践

一、需求背景与设计目标 在分布式系统中&#xff0c;面对突发流量时需要一种精准可控的流量控制手段。我们的组件需要具备&#xff1a; 多维度限流&#xff08;用户/IP/服务节点/自定义表达式&#xff09;分布式环境下精准控制开箱即用的Spring Boot Starter集成高扩展性的架…

Node.js 事件循环和线程池任务完整指南​

在 Node.js 的运行体系中&#xff0c;事件循环和线程池是保障其高效异步处理能力的核心组件。事件循环负责调度各类异步任务的执行顺序&#xff0c;而线程池则承担着处理 CPU 密集型及部分特定 I/O 任务的工作。接下来&#xff0c;我们将结合图示&#xff0c;详细剖析两者的工作…

echarts自定义图表--仪表盘

基于仪表盘类型的自定义表盘 上图为3层结构组成 正常一个仪表盘配置要在外圈和内圈之间制造一条缝隙间隔 再创建一个仪表盘配置 背景透明 进度条拉满 进度条颜色和数据的背景相同开始处的线 又一个仪表盘配置 数值固定一个比较小的值 <!DOCTYPE html> <html><h…

【数据结构】图论存储结构深度解析:邻接多重表如何实现无向图O(1)删边?邻接矩阵/链表/十字链对比

邻接多重表 导读一、有向图的存储结构二、邻接多重表三、存储结构四、算法评价4.1 时间复杂度4.2 空间复杂度 五、四种存储方式的总结5.1 空间复杂度5.2 找相邻边5.3 删除边或结点5.4 适用于5.5 表示方式 六、图的基本操作结语 导读 大家好&#xff0c;很高兴又和大家见面啦&a…

【Rust】所有权

目录 所有权基本概念所有权介绍栈与堆变量作用域 字符串字符串字面值&#xff08;&str&#xff09;String 类型相互转换所有权 内存结构对比注意事项和常见坑使用场景 内存与分配变量与数据交互的方式&#xff08;一&#xff09;&#xff1a;移动变量与数据交互的方式&…

4月29日日记

终于是考完解析几何了&#xff0c;今天昨天突击了一下&#xff0c;感觉确实学会了很多之前不会的东西&#xff0c;但是可能距离高分还差很多。这次考试不太理想。大部分原因是前期没学&#xff0c;吸取教训&#xff0c;早点开始复习微积分。明天还有一节微积分&#xff0c;但是…

【深度对比】Google Play与IOS 马甲包处理差异分析

在移动应用发布与推广过程中&#xff0c;马甲包&#xff08;Cloned App / Alternate Version&#xff09; 曾被广泛用于流量测试、风险隔离、多品牌运营等场景中。随着 Google Play 与 Apple App Store 审核政策不断收紧&#xff0c;开发者们越来越关注两个平台对“马甲包”的态…

MCP 架构全解析:Host、Client 与 Server 的协同机制

目录 &#x1f3d7;️ MCP 架构全解析&#xff1a;Host、Client 与 Server 的协同机制 &#x1f4cc; 引言 &#x1f9e9; 核心架构组件 1. Host&#xff08;主机&#xff09; 2. Client&#xff08;客户端&#xff09; 3. Server&#xff08;服务器&#xff09; &#…