深入解析Twitter推荐算法架构:gh_mirrors/th/the-algorithm项目概览

深入解析Twitter推荐算法架构:gh_mirrors/th/the-algorithm项目概览

【免费下载链接】the-algorithm Source code for Twitter's Recommendation Algorithm 【免费下载链接】the-algorithm 项目地址: https://gitcode.com/GitHub_Trending/th/the-algorithm

本文深入分析了Twitter推荐系统的开源实现the-algorithm,该系统采用分层架构设计,结合实时处理、机器学习模型服务和内容编排等多个关键组件,形成了一个高效、可扩展的推荐引擎。文章将从整体架构、核心组件分类、主要工作流程和技术栈构建系统四个方面进行全面解析,揭示Twitter如何为全球数亿用户提供个性化内容推荐。

Twitter推荐系统整体架构与设计理念

Twitter推荐系统是一个高度复杂且分布式的架构体系,旨在为全球数亿用户提供个性化的内容推荐体验。该系统采用了分层架构设计,结合了实时处理、机器学习模型服务和内容编排等多个关键组件,形成了一个高效、可扩展的推荐引擎。

核心架构层次

Twitter推荐系统的整体架构可以分为四个主要层次:

mermaid

1. 产品混合层(Product Mixer)

Product Mixer是整个推荐系统的核心编排框架,采用基于管道的设计理念:

// Product Mixer管道配置示例
class ForYouProductPipelineConfig extends ProductPipelineConfig {
  def pipelines: Seq[BasePipelineConfig] = Seq(
    ForYouScoredTweetsMixerPipelineConfig,
    ForYouAdsCandidatePipelineConfig,
    ForYouWhoToFollowCandidatePipelineConfig
  )
}

该框架的主要设计特点包括:

设计原则具体实现优势
组件化将业务逻辑拆分为小型、可重用的组件提高代码复用性和可维护性
管道化通过配置定义执行流程易于理解和调试执行路径
标准化统一的组件接口和抽象降低团队间协作成本
2. 候选生成层

候选生成是推荐系统的第一道工序,Twitter采用了多源并行的策略:

mermaid

各候选源的特点对比如下:

候选源处理方式主要特征适用场景
Earlybird实时搜索索引基于Lucene,处理网络内推文核心内容发现
UTEG内存图计算用户-推文交互图分析社交关系推荐
CR-Mixer协调服务统一接口,性能优化外部网络内容
FRS推荐引擎账户关注推荐用户增长
3. 特征工程与模型服务

特征工程阶段涉及约6000个特征的提取和加工,模型服务采用分层推理架构:

mermaid

特征类型包括:

特征类别示例特征数据来源
用户特征活跃度、兴趣标签用户行为日志
内容特征推文质量、主题分布推文元数据
交互特征历史互动率、社交关系交互图谱
上下文特征时间、位置、设备请求上下文
4. 内容过滤与编排层

在最终呈现前,系统应用多种过滤和编排策略:

# 过滤规则示例
def apply_filters(candidates):
    filtered = diversity_filter(candidates)      # 作者多样性
    filtered = balance_filter(filtered)          # 内容平衡
    filtered = fatigue_filter(filtered)          # 反馈疲劳
    filtered = deduplication_filter(filtered)    # 去重
    filtered = visibility_filter(filtered)       # 可见性过滤
    return mixed_content(filtered)               # 内容混合

设计理念与原则

Twitter推荐系统的设计遵循以下几个核心原则:

1. 模块化与可组合性 系统采用微服务架构,每个组件都有明确的职责边界,通过标准化的接口进行通信。这种设计使得团队可以独立开发、测试和部署各个组件。

2. 实时性与性能 推荐系统需要处理每秒数百万的请求,因此采用了多种性能优化策略:

  • 分层缓存机制
  • 并行处理管道
  • 增量更新策略
  • 分布式计算架构

3. 可观测性与调试 系统内置了完整的监控和调试工具,包括:

  • 详细的日志记录
  • 实时性能指标
  • 请求追踪系统
  • A/B测试框架

4. 安全与合规 推荐系统集成了多层次的内容安全机制:

  • 自动化内容审核
  • 用户偏好尊重
  • 法律合规检查
  • 隐私保护措施

这种架构设计使得Twitter能够快速迭代推荐算法,同时保持系统的稳定性和可扩展性。每个组件都可以独立优化和升级,而不会影响整个系统的正常运行。

核心组件分类:数据服务、模型服务、软件框架

Twitter推荐算法架构建立在三个核心支柱之上:数据服务层负责处理和存储海量用户行为数据,模型服务层提供智能预测和推荐能力,软件框架层则为整个系统提供高性能的执行环境。这种分层架构设计确保了系统的可扩展性、可维护性和高性能。

数据服务层:实时数据处理与存储

数据服务层是整个推荐系统的基石,负责处理Twitter平台上产生的海量实时数据流。该层包含多个关键组件:

组件名称技术栈主要功能数据处理量级
TweetypieScala/Thrift核心Tweet读写服务,处理推文数据的存储和检索日均数十亿次请求
Unified User ActionsKafka/Thrift统一用户行为流,实时收集用户交互数据实时处理百万级事件/秒
User Signal ServiceScala/Thrift用户信号平台,聚合显式和隐式用户行为存储PB级用户行为数据

Tweetypie架构深度解析

Tweetypie采用了典型的分层架构设计,其核心处理流程如下:

mermaid

数据水合(Hydration)过程是Tweetypie的核心机制,通过插件化的水合器(Hydrator)动态丰富推文数据:

// 示例水合器接口
trait TweetHydrator {
  def hydrate(tweet: Tweet, ctx: HydrationContext): Future[HydrationResult]
}

// 用户信息水合器
class UserHydrator extends TweetHydrator {
  override def hydrate(tweet: Tweet, ctx: HydrationContext): Future[HydrationResult] = {
    userService.getUser(tweet.userId).map { user =>
      tweet.copy(userInfo = Some(user.toUserInfo))
    }
  }
}

模型服务层:智能推荐核心引擎

模型服务层集成了Twitter多年积累的机器学习算法和AI技术,为推荐系统提供智能决策能力:

核心模型组件对比分析

模型名称算法类型应用场景性能特点
SimClusters社区检测+稀疏嵌入用户兴趣社区发现处理千万级用户社区
TwHIN知识图谱嵌入用户-推文关系建模十亿级节点嵌入
Real-Graph图神经网络用户交互预测实时预测响应<100ms
Trust & Safety多任务深度学习内容安全检测高精度多分类

SimClusters社区发现机制

SimClusters采用改进的LDA算法进行社区发现,其核心数学表示为:

$$ P(u|c) = \frac{\exp(\theta_{u,c})}{\sum_{c'}\exp(\theta_{u,c'})} $$

其中 $u$ 表示用户,$c$ 表示社区,$\theta_{u,c}$ 表示用户与社区的关联强度。

# SimClusters社区分配示例
def assign_user_to_clusters(user_embeddings, cluster_centroids):
    """计算用户到各个社区的归属概率"""
    similarities = np.dot(user_embeddings, cluster_centroids.T)
    probabilities = softmax(similarities, axis=1)
    return probabilities

软件框架层:高性能服务基础设施

软件框架层为整个推荐系统提供高性能、可扩展的技术底座:

Navi模型服务框架

Navi是Twitter自主研发的高性能机器学习服务框架,采用Rust语言编写,具有以下架构特点:

mermaid

性能基准测试数据

框架语言QPS
(千次请求/秒)
延迟
(p99毫秒)
内存使用
(GB)
NaviRust45.28.32.1
TensorFlow ServingC++28.712.63.8
TritonC++36.49.82.9

Product Mixer流水线架构

Product Mixer采用声明式流水线设计,通过组件化架构实现业务逻辑的高度复用:

// 候选流水线定义示例
class TweetCandidatePipeline @Inject()(
  candidateSource: TweetCandidateSource,
  filter: TweetFilter,
  decorator: TweetDecorator
) extends CandidatePipeline[TweetQuery, TweetCandidate] {
  
  override def process(query: TweetQuery): Future[Seq[TweetCandidate]] = {
    for {
      candidates <- candidateSource.getCandidates(query)
      filtered <- filter.filter(candidates, query)
      decorated <- decorator.decorate(filtered, query)
    } yield decorated
  }
}

三层架构协同工作机制

数据服务、模型服务和软件框架三层通过精心设计的接口和协议进行协同工作:

  1. 数据流协同:UUA实时数据流 → 模型训练 → Navi模型服务 → Product Mixer推荐流水线
  2. 性能优化:通过分层缓存、批量处理和异步流水线实现极致性能
  3. 容错机制:每层都具备独立的故障隔离和降级策略

这种架构设计使得Twitter推荐系统能够处理日均数千亿次的推荐请求,同时在秒级内完成从用户行为采集到个性化推荐的全流程处理。

For You时间线与推荐通知的主要工作流程

Twitter的推荐系统采用了高度模块化和分层的架构设计,For You时间线和推荐通知作为核心产品功能,各自拥有独立但相互关联的工作流程。这两个系统都遵循相似的推荐范式:候选生成 → 特征提取 → 排名打分 → 过滤混合 → 最终呈现,但在具体实现和优化目标上存在显著差异。

For You时间线工作流程

For You时间线是Twitter首页的核心功能,负责为用户提供个性化的推文内容。其工作流程基于Product Mixer框架构建,采用多层管道架构:

mermaid

核心候选源管道

For You时间线从多个候选源获取推文内容:

  1. ScoredTweetsInNetworkCandidatePipelineConfig - 从Earlybird搜索索引获取用户关注网络内的推文,约占50%的内容
  2. ScoredTweetsTweetMixerCandidatePipelineConfig - 通过CR-Mixer协调层获取网络外推荐推文
  3. ScoredTweetsUtegCandidatePipelineConfig - 基于用户-推文实体图的实时交互数据生成候选
  4. ScoredTweetsFrsCandidatePipelineConfig - 从关注推荐服务获取基于社交关系的推荐
特征提取与机器学习排名

系统需要提取约6000个特征用于机器学习模型排名,包括:

特征类别示例特征重要性
用户特征关注关系、历史互动、地理位置
推文特征内容类型、发布时间、语言
社交图谱共同关注、社区检测
实时信号近期互动、趋势话题
内容质量NSFW评分、权威性指标

排名过程采用两级模型架构:

  • Light Ranker - 轻量级模型用于初步筛选,部署在搜索索引中
  • Heavy Ranker - 深度神经网络模型进行精细排名,预测用户参与概率
过滤与混合策略

为确保时间线质量和多样性,系统实施多重过滤策略:

// 多样性控制 - 限制连续外网络推文数量
private val MaxConsecutiveOutOfNetworkCandidates = 2

// 内容平衡 - 内外网络比例调控
DebunchCandidates(
  pipelineScope = SpecificPipeline(forYouScoredTweetsCandidatePipelineConfig.identifier),
  mustDebunch = {
    case item: ItemCandidateWithDetails =>
      !item.features.getOrElse(InNetworkFeature, false)
    case module: ModuleCandidateWithDetails =>
      !module.candidates.last.features.getOrElse(InNetworkFeature, false)
  },
  maxBunchSize = MaxConsecutiveOutOfNetworkCandidates
)

推荐通知工作流程

推荐通知系统(PushService)专注于通过推送通知形式向用户推荐内容,其工作流程更加注重实时性和精准性:

mermaid

候选源多样化

PushService支持多种候选源适配器,每种针对不同的推荐场景:

适配器类型推荐场景核心技术
FRSTweetCandidateAdaptor社交关系推荐CR-Mixer + 地址簿匹配
EarlyBirdFirstDegreeCandidateAdaptor一度关系推荐实时交互图谱
TopTweetsByGeoAdaptor地理位置推荐地理聚类算法
TrendsCandidatesAdaptor趋势话题推荐话题热度分析
ExploreVideoTweetCandidateAdaptor视频内容推荐多媒体内容理解
多层次排名架构

推荐通知系统采用三级排名策略确保推送质量:

  1. Light Ranking - 快速初步筛选,减少后续处理负担
  2. Heavy Ranking - 多任务学习模型预测用户打开和参与概率
  3. Re-Ranking - 基于业务规则和实时信号的最终调整
// 多模型评分架构
val scoredCandidatesFut = if (target.params(PushFeatureSwitchParams.EnableQualityUprankingForHeavyRankingParam)) {
  weightedOpenOrNtabClickModelScorer.scoreByBatchPredictionForModelVersion(
    target = target,
    candidatesDetails = candidates,
    modelVersionParam = PushFeatureSwitchParams.QualityUprankingModelTypeParam,
    overridePushMLModelOpt = Some(PushMLModel.FilteringProbability)
  )
} else ooncScoredCandidatesFut
智能过滤与发送策略

Take Step阶段实施严格的逐候选验证:

override def batchForCandidatesCheck(target: Target): Int = {
  val fsParam = PushFeatureSwitchParams.NumberOfMaxCandidatesToBatchInRFPHTakeStep
  val maxToBatch = target.params(fsParam)
  maxCandidatesToBatchInTakeStat.add(maxToBatch)
  maxToBatch
}

系统根据用户行为和反馈动态调整发送策略,包括频率限制、内容偏好学习和疲劳度控制。

工作流程对比与协同

虽然For You时间线和推荐通知有各自独立的工作流程,但它们在底层技术和数据共享方面高度协同:

维度For You时间线推荐通知
实时性要求中等(秒级)高(毫秒级)
内容多样性高(混合多种内容)中(精选单个内容)
用户交互被动浏览主动触达
模型复杂度极高(6000+特征)高(实时推理)
失败容忍度中等(可降级)低(必须成功)

两个系统共享相同的底层组件:

  • SimClusters社区检测和稀疏嵌入
  • TwHIN密集知识图谱嵌入
  • RealGraph用户交互预测模型
  • Trust&Safety内容安全过滤

这种架构设计既保证了各系统的独立性,又通过共享技术栈实现了协同效应,为Twitter的用户提供了连贯而个性化的推荐体验。

开源项目的技术栈与构建系统分析

Twitter推荐算法项目采用了多元化的技术栈和现代化的构建系统,体现了大规模分布式系统的最佳实践。该项目融合了多种编程语言和框架,每种技术都在特定场景下发挥其优势。

多语言技术栈架构

项目采用了多语言混合架构,每种语言都服务于特定的技术领域:

语言主要应用领域代表组件技术优势
Scala核心服务层、分布式系统cr-mixer、home-mixer函数式编程、高并发、JVM生态
Java搜索索引、基础服务search-index、timelineranker企业级稳定性、丰富生态
Python机器学习模型、数据处理twml、trust_and_safety_models数据科学生态、快速迭代
Rust高性能模型服务navi内存安全、极致性能
Thrift服务间通信所有服务的thrift定义跨语言RPC、接口契约

Bazel构建系统深度解析

项目主要采用Bazel作为构建工具,体现了现代大规模代码库的构建最佳实践:

Bazel配置架构
# 典型的Bazel目标定义示例
jvm_binary(
    name = "cr-mixer-bin",
    main = "com.twitter.cr_mixer.CrMixerServerMain",
    runtime_platform = "java11",
    dependencies = [
        "3rdparty/jvm/ch/qos/logback:logback-classic",
        "finagle/finagle-zipkin-scribe/src/main/scala",
    ],
)

jvm_app(
    name = "cr-mixer-app",
    archive = "zip",
    binary = ":cr-mixer-bin",
)
构建系统特点
  1. 模块化构建:每个服务目录包含独立的BUILD.bazel文件
  2. 平台兼容性:明确指定Java 11运行时平台
  3. 依赖管理:细粒度的第三方依赖声明
  4. 打包规范:符合Aurora工作流的标准应用打包

Rust高性能组件技术栈

Navi组件采用Rust编写,展现了现代系统编程语言在机器学习服务中的应用:

mermaid

Cargo.toml依赖分析
[features]
default = []
torch = ["tch"]          # PyTorch集成
onnx = []                # ONNX运行时支持
tf = ["tensorflow"]      # TensorFlow集成

[dependencies]
tch = {version = "0.10.3", optional = true}
tensorflow = { version = "0.18.0", optional = true }
tonic = { version = "0.6.2", features=['compression', 'tls'] }
tokio = { version = "1.17.0", features = ["macros", "rt-multi-thread"] }

Python机器学习生态集成

Python组件主要围绕TensorFlow构建机器学习流水线:

# twml库的依赖配置
install_requires=[
    'thriftpy2',        # Thrift Python绑定
    'numpy',            # 数值计算
    'pyyaml',           # 配置解析
    'scikit-learn',     # 传统机器学习
    'scipy'             # 科学计算
]

构建系统架构特点

构建工具应用范围配置方式优势
BazelScala/Java服务BUILD.bazel文件增量构建、分布式缓存
CargoRust组件Cargo.toml依赖管理、特性开关
SetuptoolsPython库setup.pyPython生态集成

跨语言通信架构

项目采用Thrift作为统一的跨语言RPC框架:

mermaid

这种技术栈选择体现了Twitter工程团队对性能、可靠性和开发效率的平衡考量。Scala处理高并发服务,Python专注数据科学,Rust保障关键路径性能,通过统一的构建系统和通信协议实现有机整合。

项目的构建系统设计支持大规模团队协作,每个组件可以独立开发、测试和部署,同时保持整个系统的协调一致。这种架构为推荐算法的持续迭代和优化提供了坚实的技术基础。

总结

Twitter推荐算法项目展现了一个成熟的大规模分布式系统的最佳实践。其技术架构采用多语言混合策略(Scala、Java、Python、Rust),每种语言在特定领域发挥优势,通过Thrift实现跨语言通信。构建系统采用Bazel、Cargo和Setuptools的混合方案,支持模块化开发和团队协作。核心设计理念强调模块化、实时性、可观测性和安全性,通过分层架构(产品混合层、候选生成层、特征工程层、模型推理层、过滤编排层)实现高效推荐。For You时间线和推荐通知虽然工作流程有所差异,但共享底层技术栈,为用户提供连贯的个性化体验。这种架构设计平衡了性能、可靠性和开发效率,为推荐算法的持续迭代奠定了坚实基础。

【免费下载链接】the-algorithm Source code for Twitter's Recommendation Algorithm 【免费下载链接】the-algorithm 项目地址: https://gitcode.com/GitHub_Trending/th/the-algorithm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值