开篇
因为一些原因有幸接触了一些广告相关的工程技术,结合周末随便翻阅的计算广告学一书,写一篇博文沉淀一下。
文章主要从像我这样的小白用户视角,聚焦于广告相关的工程方向,当然文章当中绝对不会出现违规的内部信息,所以各位大佬们也可以放心了,文章主要会围绕计算广告学中提到的系统架构图进行说明。
其实广告真正核心的内容在于算法部分,工程只是脚手架,一些广告系统用到的软件基本上都是开源的系统,可以在文章末尾的公开课中看到,里面有一章讲解如何用开源软件搭建一个广告系统。
广告系统架构图
说明:
从上图可以看出,从在线和离线的角度来看广告可以区分为在线系统和离线系统。
- 离线系统:主要聚焦于算法模型的训练以及离线广告费用结算相关。
- 在线系统:在线系统主要解决广告投放和实时点击计费相关功能。
- 在线系统:包括广告投放引擎、广告索引、广告商家中心、计费中心。
- 投放引擎:主要负责在接受广告投放请求返回对应的广告商品。
- 广告索引:广告索引保存商家投放的广告商品信息。
- 广告商家中心:负责提供给商家购买广告的操作平台。
- 计费中心:实时对商家的广告消耗进行计费并实时实现广告商品的上下架功能。
- 结算中心:负责对广告的消耗进行离线的结算,对商家进行扣款等。
广告系统核心模块
广告商家中心
广告的商家中心作为商家购买广告的入口,给商家提供购买广告的入口,在这里商家可以为建立自己的推广计划,为自己热推的商品购买广告词,设置一些通用的信息类似点击费用、日推广上线等信息。
购买广告成功后会将商品的广告信息实时的进入到广告索引当中,当用户搜索商品的时候投放引擎就能从广告索引中检索到该广告商品。
广告索引
广告索引顾名思义就是用于保存广告商品的索引信息,便于投放引擎检索广告信息。在广告索引的选型上一般的公司都会选用比较成熟的elasticsearch作为广告索引的技术方案。
作为广告的索引引擎,elasticsearch很好的解决了分词和倒排等功能,当然elasticsearch开放的plugin接口能够提供可供扩展的打分排序的功能。毕竟elasticsearch都已经是一个上市公司了,功能还是比较强大的。
当然在建索引的时机选择上应该都会有一些通用的全量和增量实现方式,这些功能感觉各家之间应该也是大同小异的。
投放引擎
投放引擎作为整个广告系统的门面,主要是负责接受广告请求并返回对应的广告商品,主要是作为一个入口串联起后面的广告引擎等系统。
投放引擎在返回的广告商品信息中,不出意外的会携带一些广告的标识信息,包括商品本身信息和广告的一些计费信息,毕竟这些信息在用户点击广告后会通过日志流的形式传给后端系统用于在线计费和离线结算等。
计费中心
计费中心在这里主要是指实时的在线计费功能,也就是说用户在电商平台实时点击广告后回传一条实时日志给后台系统,后台的计费中心会消费该日志并对这个广告商品进行实时计费。
实时计费中心,很大一部分功能解决广告主也就是电商平台的商家对广告消耗的上限设定,类似于某商家规定一天消耗不超过500。实时结算中心一方面通过实时监控广告消耗解决了广告主投放广告产生消耗上限的需求,同时也让电商平台的广告收益最大化,下线达到上限的广告,让其他广告的曝光增加,增加收入。
当然计费中心内部肯定会包含一些通用的反作弊功能,避免恶意广告点击,这些都是比较通用的功能。
结算中心
结算中心一般对广告前一天的广告消耗进行扣费结算,这其中是一个非常复杂的离线处理系统,需要考虑各种情况。一般结算中心在实时性方面都是T+1,也就是在第二天对前一天广告的消耗进行离线计算并对广告主进行扣费。
广告系统中的开源软件
- 1、elasticsearch:广告索引
- 2、kafka:广告点击实时日志
- 3、redis:缓存反作弊
- 4、flume:日志采集系统