Hotdry.
systems-engineering

Twitter推荐系统的实时候选生成、重排序与反垃圾过滤:Scala与Finagle的高吞吐低延迟实践

探讨Twitter推荐算法的实时实现,包括候选生成、重排序和过滤机制,使用Scala和Finagle构建高效服务。提供工程优化参数和监控要点,确保高吞吐与低延迟。

Twitter 的推荐系统在处理海量用户互动时,需要实时生成候选内容、重排序以提升相关性,并过滤垃圾信息,以维持平台的用户体验和信任度。这种架构的核心在于使用 Scala 语言和 Finagle 框架构建的高吞吐、低延迟服务,这些服务能够应对每秒数百万的请求。

候选生成的首要挑战是高效检索潜在相关推文。系统采用多源候选策略,其中 In-Network 推文约占 50%,通过 search-index 服务从用户关注列表中快速检索。这些推文基于实时用户动作流,由 unified-user-actions 服务捕获并处理。Out-of-Network 候选则依赖 user-tweet-entity-graph (UTEG),这是一个基于 GraphJet 框架的内存交互图服务。它维护用户与推文的动态图结构,通过图遍历算法在毫秒级内生成数百个候选。Scala 的函数式编程特性在这里发挥关键作用:使用不可变数据结构减少并发冲突,而 Finagle 的异步 RPC 机制确保服务间通信的低延迟,通常控制在 50ms 以内。

为了优化候选生成的可落地性,工程师需关注 UTEG 的内存管理参数。例如,图节点的最大度数阈值设置为 500,以避免内存膨胀导致的 GC 暂停;遍历深度限制在 3 层,确保生成候选不超过 1000 个,避免计算开销过大。同时,recos-injector 作为流事件处理器,负责构建输入流,其缓冲区大小建议为 1MB,批处理间隔为 100ms,以平衡实时性和吞吐量。这些参数在生产环境中可通过 A/B 测试迭代,监控指标包括候选生成延迟(目标 <20ms)和命中率(>80%)。

重排序阶段进一步精炼候选集,light-ranker 和 heavy-ranker 模型依次应用。light-ranker 是一个轻量级模型,用于初步筛选高相关候选,减少 heavy-ranker 的负载。Heavy-ranker 则是一个神经网络,融合 SimClusters 社区嵌入和 TwHIN 知识图嵌入,预测用户互动概率。Scala 实现的 product-mixer 框架在这里统筹整个流程,它是一个声明式构建器,支持模块化管道:从候选注入到特征聚合,再到最终排序。Finagle 的未来(Future)组合器允许异步并行计算嵌入相似度,例如 representation-scorer 服务计算用户 - 推文分数,其超时阈值设为 10ms。

在重排序的工程实践中,关键是特征服务的低延迟集成。topic-social-proof 服务识别推文主题,提供社会证明分数;graph-feature-service 计算用户间图特征,如 “用户 A 的关注者中多少人互动用户 B 的推文”。这些服务通过 Finagle 的 Thrift 协议暴露 RPC 接口,服务发现使用 ZooKeeper,注册间隔为 30s。落地参数包括:heavy-ranker 的批大小为 64,推理延迟阈值 < 5ms;如果超过,触发回滚到 light-ranker 主导模式。监控点聚焦于排序分数分布(均值 > 0.5)和 A/B 变异测试的点击率提升(目标 + 2%)。

反垃圾过滤是保障系统完整性的最后一道防线,visibility-filters 服务负责硬过滤和软降权。它集成 trust-and-safety-models,检测 NSFW 或滥用内容,使用 tweepcred 的 PageRank 算法评估用户信誉。Scala 的 actor 模型在 Finagle 中扩展为服务网格,支持分布式过滤规则应用。例如,对低信誉用户(分数 <0.3)的推文,应用粗粒度降权因子 0.5。实时过滤需处理高并发,Finagle 的熔断器(circuit breaker)配置为失败率> 5% 时打开,恢复阈值 10s,避免级联故障。

过滤机制的可操作清单包括:1)定义过滤规则阈值,如 NSFW 置信度 > 0.8 时硬过滤;2)集成 real-graph 模型预测互动风险,如果概率 <0.1 则隔离;3)监控过滤命中率(<1% 为正常),并设置告警当垃圾通过率> 0.5%。这些参数确保系统在高吞吐(>10k QPS)下保持低延迟(P99<100ms)。此外,timelines-aggregation-framework 支持实时聚合特征,如用户信号的滚动窗口(1 小时),减少存储压力。

整体架构的优化依赖于 navi 的 Rust 实现的 ML 模型服务,提供高性能推理;representation-manager 统一检索嵌入,缓存命中率目标 > 90%。在部署时,使用 Bazel 构建管道,测试覆盖率 > 80%。风险控制包括:如果候选生成延迟 > 50ms,降级到静态缓存;重排序失败时,回滚到规则 - based 排序。这样的设计不仅实现了 Twitter 推荐系统的实时性,还为类似大规模推荐工程提供了可复制的实践路径。

通过这些组件的协同,系统在 2023 年开源后展示了其鲁棒性。尽管开源仓库未包含完整构建文件,但核心服务如 home-mixer 和 pushservice 的实现细节揭示了 Scala 与 Finagle 在分布式系统中的优势。工程师可基于此扩展,例如在自定义推荐中调整 UTEG 遍历参数,以适应不同负载。

(字数约 1050)

查看归档