首先,我们来了解两个基本概念。
互联网广告分为搜索广告和展示广告两大类。简单来说,搜索广告就是用户主动输入关键词以后,搜索引擎在返回结果中展示出的相关广告。而展示广告,则是在搜索引擎之外的网站或 App 中,用户在浏览页面的情况下,被动看到的广告。比如说,在打开一些 App 时出现的开屏广告,以及朋友圈中的广告等等。
尽管这两种广告的业务形态不太一样,但是它们后台的广告引擎本质上都是相似的,主要的区别是约束条件上的不同。
在搜索广告中,因为它和搜索词有很强的相关性,所以,我们需要针对搜索词进行一系列的分析,这和我们上一讲说过的查询分析过程类似,这里我就不多讲了。而展示广告没有搜索词的约束条件,展示能力也就更灵活。因此,今天我们主要以展示广告为例,来说一说从用户打开网站到看到广告,广告系统是如何工作的。
为了方便你理解,我梳理了一张广告引擎的核心功能架构图。接下来,我就依据这个架构图,从 用户浏览 和 广告主投放广告 这两个方面,来为你详讲解一下广告引擎的工作过程。
一方面,当用户浏览网页时,网页会向服务端发起一个广告请求。服务端接到广告请求后,会先进行请求解析,也就是通过用户在系统中的唯一 ID、网站地址以及广告位 ID,去后台查询相关的广告请求的扩展信息。
那怎么查询呢?一般来说,通过系统之前对用户的长期行为收集和分析,我们就能知道该用户的喜好,比如喜欢看篮球、喜欢购物等。根据得到的结果,我们会为用户打上相应的标签。同理,对于各种网页和广告位,我们也会分析好网页分类等信息。然后,我们会提前将这些分析好的结果保存在 Key-value 数据库中,以支持快速查询。这样一来,广告请求解析就可以通过查询 Key-value 数据库,得到相关信息了。
另一方面,广告主在投放广告时,为了保证广告的后续效果,往往会进行广告设置,也就是给广告投放加上一些定向投放的条件。比如说,只投放给北京的用户,年龄段在 20 岁以上,对篮球感兴趣,使用某一型号的手机等。这些限制条件,我们都可以用标签的形式来表示。因此,一个广告设置,抽象出来就是一系列标签的组合。
所以我们说,广告引擎处理一个广告请求的过程,本质上就是根据用户的广告请求信息,找出标签匹配的广告设置,并将广告进行排序返回的过程。这一点非常重要,我们后面讲的内容都是围绕它来展开的,我希望你能记住它。
返回广告以后,我们还需要收集广告的后续监测数据,比如说是否展现给了用户,以及是否被用户点击等后续行为。那有些后续行为还涉及广告计费,比如,如果广告是按点击付费的话,那么只要有用户点击了广告,就会产生对应的费用。这时广告系统不仅需要进行相应的计费,还需要快速修改系统中的广告数据,使得系统能在广告主的预算花完之后就立即停止投放。
好了,以上就是广告引擎的工作过程。你会发现,尽管广告引擎在业务形态和流程上都有自己的特点,但是,它的核心检索流程和搜索引擎是类似的,也分为了索引构建、检索召回候选集和排序返回这三个部分。不过,和搜索引擎相比,由于广告引擎没有明确的关键词限制,因此在如何构造倒排索引上,广告引擎会有更大的灵活度。
接下来,我们就一起来看看,广告引擎是怎么结合自己的业务特点,来进行高性能的检索设计,从而能在 0.1 秒内返回合适的广告。