写点什么

Twitter 采用 BotMaker 技术对抗垃圾推文

  • 2014-09-02
  • 本文字数:1571 字

    阅读完需:约 5 分钟

作为新兴媒体网站,Twitter 有着和传统媒体截然不同的使用方式,比如与传统媒体多重防止爬虫爬取网站内容相比,Twitter 对开发者开放了非常多的 API,以方便他们通过各种方式与 Twitter 后台交互。又比如 Twitter 对实时性的要求很高,比起纸媒、门户网站、博客、邮件来讲,快速响应的用户体验要求很高。在暴露大量接口和高实时性这两个产品设计的驱动下,Twitter 成为了人们非常青睐的社交网站。然而,接踵而来的就是那个永恒的话题:如何对抗垃圾信息。在这个问题上,Twitter 的两个设计上的优点反而成为了对抗中的挑战,垃圾信息可以从各种接口以各种形式接入,并且以近乎瞬间的速度直接推送到用户。以往成熟应用于电子邮件、博客等内容的垃圾信息对抗技术,在这两个挑战面前显得力不从心。这便是 BotMaker 诞生的契机。据博文提供的数据,在采用了 BotMaker 技术以后,该系统每天处理多达数十亿条推文,并成功的将垃圾信息的数目缩减了 40%。

Twitter 于 8 月 20 日在其官方博客发表了一篇博文(需科学上网),介绍了 BotMaker 的设计理念、挑战以及架构。

从设计目标来讲,Twitter 希望垃圾信息能够通过一种层层过滤的方式拦截:最理想的第一层,就是在垃圾信息制造者撰写垃圾推文的时候判断出结果,并阻止该垃圾推文的发布;没有被拦截住的垃圾推文,则采用第二层,即不断扫描现有的推文,从中尽快找出垃圾推文并清除,从而降低垃圾推文被用户阅读的可能性;最后一层则是对整个系统的更新速度进行了设想,因为垃圾推文品种千奇百怪,随时随地都在发生变化,系统需要在尽量少修改代码的情况下,尽可能快的更新,以应对层出不穷的垃圾推文。

在这种设计理念的驱动下,系统能够很好的过滤垃圾推文,但是随之而来的是三个挑战,BotMaker 对易用性、普适性以及实时性方面的要求很高。因此 Twitter 将其设计成了一种基于规则的系统,系统维护人员通过撰写简单的规则而不是修改代码来对抗垃圾推文,从而达到上述指标的要求。通俗来讲,BotMaker 的规则由两部分组成,一是触发条件;二是动作。如博文中所提到的简单例子:

复制代码
Condition:
HasSpamUrl(GetUrls(tweetText))
Action:
Deny()

所表达的意思就是:如果当前推文中包含了垃圾网址,那么这条推文就会被拒绝发布。这种规则系统的设计,一般需要遵循维护人员看得懂,简单规则可拼接成复杂规则,新规则的添加不需要改动代码以及规则起作用的时间只需要几秒钟等等原则。

然而,看似简单的规则系统背后,需要大量的计算来给出类似是否包含垃圾网址这样的判断,这些支撑数据都是要通过不断对推文、转发、收藏、粉丝和私信等等数据计算出来,而且还要支持一定的机器学习相关规则如分类规则。在 Twitter Storm 分布式系统的支持下,博文给出了 BotMaker 系统的设计架构:

图中以用户发表推文整个流程来解释了 BotMaker 的组成。首先,在用户撰写推文的过程中,Scarecrow 模块就开始根据推文内容来判断其是否是垃圾推文了,这个阶段主要的技术指标是高实时性,规则相对简单,如关键字以及一些统计规律;其次,在推文发表之后,Sniper 会根据发表日志来扫描推文,通过机器学习中分类器等方法构成的规则,不那么实时的来异步判断是否是垃圾推文;再次,系统会对用户一个阶段的行为建模,来提取辨别垃圾推文的特征,这部分工作可以离线完成。

博文最后称,Botmaker 开辟了 Twitter 对抗垃圾博文的新技术,有了这个系统,Twitter 的工程师们以前数以天计的编写垃圾推文过滤代码的日子已经成为过去,开发效率得到了极大的提升,并且效果也非常的明显。在未来,工程师们还会根据易用性、普适性和实时性等原则来对 Twitter 其他的系统进行修改和完善。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-09-02 09:322155
用户头像

发布了 268 篇内容, 共 125.9 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

方寸之间,书写天地

小天同学

个人总结 4月日更 1 周年盛典 我和写作平台的故事 InfoQ 写作平台 1 周年

模块 1 作业

流水亮

二阶单位圆

山@支

计算机原理学习笔记 Day3

穿过生命散发芬芳

计算机原理 4月日更

Nginx源码编译安装与运行

马里奥

nginx 安装 笔记

哭了!从腾讯辞职后找不到工作,投了20多家简历,却只面过一家

Java架构师迁哥

【基金系列】10年理财规划师经验分享:不想当韭菜就看一下这些内容

小Q

学习 基金会 理财 基金

Java线程讲解,这次没有人学不会了吧!!!

霖~

lombok编译报错:java: 找不到符号

李印

IntelliJ IDEA lombok

Zabbix 产品周期

耳东@Erdong

zabbix 4月日更 lifecycle

Rust:关于闭包的一点研究

Microwood

rust 闭包 closure

Java入门第一课

ベ布小禅

4月日更

荣耀,单刷苹果大boss

脑极体

第二周作业

Geek_2e7dd7

架构实战营

清理SpringBoot应用无用的metrics指标

远鹏

Java springboot metrics micrometer

年度盛会 | Atlassian Team 2021 全球大会重磅嘉宾介绍

Atlassian

Agile Zoom Atlassian Slack

《采访融云CTO杨攀:融云七年发展史》(采访提纲)

后台技术汇

调查采访能力考核

变易世界,简易战略,不易华为

脑极体

逐行解读Spring- 没人比我更懂循环依赖

学Java关注我

Java 编程 架构 编程语言 技术宅

Vue cli项目 修改运行命令和端口号

空城机

Vue 大前端 4月日更 vue cli

想靠接私活月入5W?建议根据这几个开源的SpringBoot项目(含小程序)模仿一下~

Java架构师迁哥

重读《重构2》- 提取函数

顿晓

4月日更 提取函数

为什么我们的生活越来越快?

石云升

读书笔记 28天写作 4月日更

产品 0 期 - 第八周作业

vipyinzhiwei

Redis-Sentinel 深入浅出原理和实战

leonsh

redis redis sentinel

深度图解Redis Cluster原理

leonsh

redis Gossip redis cluster

绝了!阿里面试官跟我死磕MySQL,结果我却拿了个高薪offer

码农之家

Java 程序员 面试 MySQL 高可用 刷题笔记

手机自带的多功能百宝箱,没人用真的太可惜了。

彭宏豪95

iphone 效率 工具 苹果 4月日更

应用宝SDK接入记录

风翱

sdk 4月日更 应用宝

洛谷 || 混合牛奶 Mixing Milk(贪心算法)

Bob

算法 刷题 4月日更

如何横扫大厂Offer?这份“1000道Java后端面试速成笔记”程序员(银四)必备

比伯

Java 程序员 程序人生 软件架构 java编程

Twitter采用BotMaker技术对抗垃圾推文_语言 & 开发_张天雷_InfoQ精选文章