可见性引擎(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
在规则评估之前,可见性引擎可能会预处理规则以优化评估过程。这包括:
来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala31-38
引擎使用FeatureMap.resolve方法解析规则所需的所有特征。未能解析的特征会被单独跟踪,因为它们可能会影响规则评估。
来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala220-244
规则按顺序评估。对于每条规则:
evaluate方法进行评估来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala120-181
规则评估后,引擎会检查是否应抛出失败闭合异常。这是一种安全机制,可确保在关键规则失败时默认隐藏内容。
来源:visibilitylib/src/main/scala/com/twitter/visibility/engine/VisibilityRuleEngine.scala184-193
引擎通过检查所有规则是否已评估,并酌情将结果标记为已完成,从而最终化结果。
来源: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平台内的内容可见性。通过在不同安全级别处理可配置规则集中的内容,它确保了适当的内容过滤,同时通过短路和失败闭合行为等机制保持了性能和可靠性。