菜单

可见性引擎

相关源文件

目的与范围

可见性引擎(Visibility Engine)是Twitter内容过滤和安全基础设施的关键组件。它根据预定义的可见性规则评估内容项(推文、用户、空间等),以确定内容是否以及如何向用户显示。本文档解释了可见性引擎的架构、工作流程和关键组件。

有关安全级别的信息,请参阅安全级别。有关具体可见性规则和策略的详细信息,请参阅可见性规则

系统概览

可见性引擎是一个规则评估系统,它通过可见性规则管道处理内容。根据评估结果,它会生成裁定,以决定内容可见性(允许、删除、插页式、有限互动等),具体取决于内容被查看时的上下文和安全级别。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala1-266

核心组件

可见性引擎由几个关键组件组成,它们协同工作以根据可见性规则评估内容

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala17-23 visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala250-266

可见性规则引擎

VisibilityRuleEngine是负责根据可见性规则评估内容的核心组件。它协调整个评估过程,从规则预处理到结果生成。

主要职责

  • 解决规则所需的特征依赖性
  • 以正确的顺序评估规则
  • 处理规则失败和异常
  • 生成最终可见性裁定

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala17-248

评估上下文

EvaluationContext为规则评估提供必要的上下文,包括参数、特征提供者和统计接收器。还有一个名为ProvidedEvaluationContext的专门版本,它包含额外的运行时信息。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala11-13

可见性策略

VisibilityPolicy定义了针对特定内容类型和安全级别应应用哪些规则。它提供了从内容ID到应评估的规则序列的映射。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala48-52

可见性结果和可见性结果构建器

VisibilityResult包含最终裁定和规则评估的详细信息。它是使用VisibilityResultBuilder构建的,后者遵循构建器模式来累积评估结果。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala6-7

评估工作流

规则评估过程遵循特定的工作流程,以确保规则得到正确高效的评估

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala112-182 visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala212-247

1. 规则预处理

在规则评估之前,可见性引擎可能会预处理规则以优化评估过程。这包括:

  • 过滤掉已禁用的规则
  • 组织规则以实现高效评估
  • 准备规则之间的依赖关系

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala31-38

2. 特征解析

引擎使用FeatureMap.resolve方法解析规则所需的所有特征。未能解析的特征会被单独跟踪,因为它们可能会影响规则评估。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala220-244

3. 规则评估

规则按顺序评估。对于每条规则:

  • 引擎检查规则是否已评估
  • 如果规则的特征依赖关系失败,它会使用回退操作或将规则标记为失败
  • 如果启用了短路机制并且已做出决定,则可以跳过其余规则
  • 否则,规则将使用其evaluate方法进行评估
  • 结果构建器会根据规则的结果进行更新

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala120-181

4. 失败闭合检查

规则评估后,引擎会检查是否应抛出失败闭合异常。这是一种安全机制,可确保在关键规则失败时默认隐藏内容。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala184-193

5. 结果最终化

引擎通过检查所有规则是否已评估,并酌情将结果标记为已完成,从而最终化结果。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala195-210

规则状态和操作

规则可以产生不同的状态和操作,从而决定内容的可见性

状态管理描述
已评估规则已完全评估
已跳过规则已被跳过(例如,已禁用)
短路规则评估因短路而被绕过
特征失败规则因缺少特征而无法评估
规则失败规则评估发生错误
暂停规则被暂停(例如,用于实验)
已禁用规则已禁用
操作描述
允许内容被允许显示
删除内容被完全删除
警告页内容显示在警告插页式页面后
有限内容具有有限的互动选项
未评估未确定任何操作

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala12 visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala153-174

安全机制

可见性引擎包含多项安全机制,以确保强大的内容过滤功能

短路

启用后,短路允许引擎在达到裁定后停止评估规则。这在不影响安全性的前提下提高了性能。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala130-132

失败闭合行为

失败闭合行为确保,如果关键特征或规则失败,系统默认隐藏内容,而不是显示可能有害的内容。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala184-193

回退操作

规则可以定义回退操作,当其特征依赖项无法解析时使用这些操作。这确保即使数据不完整,系统也能做出合理的可见性决策。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala146-148

指标与监控

可见性引擎包含全面的指标记录

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala65-79 visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala135-162

与其他系统集成

可见性引擎与Twitter推荐算法中的其他几个系统集成

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala41-80

配置与自定义

可见性引擎通过多种机制实现高度可配置

策略提供者

PolicyProvider可用于为不同的安全级别提供自定义规则集。这允许灵活的规则配置,而无需更改代码。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala48-52

门控

各种门控控制引擎的行为

  • enableComposableActions:允许组合多个规则操作
  • enableFailClosed:启用失败闭合行为
  • enableShortCircuiting:启用规则短路

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala20-21 visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala253-257

安全级别参数

每个安全级别都有一个相关的启用参数,可用于完全禁用该安全级别的规则评估。

来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala53-80

结论

可见性引擎提供了一个灵活的、基于规则的系统,用于评估Twitter平台内的内容可见性。通过在不同安全级别处理可配置规则集中的内容,它确保了适当的内容过滤,同时通过短路和失败闭合行为等机制保持了性能和可靠性。