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.pswp.cn/bicheng/78913.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78913.shtml
英文地址,請注明出處:http://en.pswp.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; &#…