广告系统架构浅谈

article/2025/11/6 19:25:32

写在前面

最近即将入职字节跳动的广告系统部门,因此花了一些时间了解了一下现代广告系统的一般架构,在这里分享给大家。

广告系统一般架构

在这里插入图片描述

整体上来看,广告系统由三个主体部分构成:
1、在线的高并发投放引擎(Ad server)。
2、离线的分布式数据处理平台(Grid)。
3、用于在线实时反馈的流式处理平台(Stream computing)。
这三部分各司其职,配合完成整个计算广告的数据挖掘和在线投放任务。
下面我们来看看按遵照功能划分,这个系统中都有哪些重要的模块:

一、广告投放机

广告投放机即图中的Ad server。这是接受广告前端Web server发来的请求,完成广告投放决策并返回最后页面片段的主逻辑。我们可以将它类比于人体的躯体。广告投放机的主要任务是与其他各个功能性模块打交道,并将他们串联起来完成在线广告投放决策。一般来说,为了扩展性的考虑,我们都采用类搜索的投放机架构,即先通过倒排索引从大量的广告候选中等到少量符合条件的或相关的候选,再在这个小的候选集上应用复杂而精确的排序方法找到综合收益最高的若干个广告。对广告投放机来说,最重要的指标是能同时处理的并发数,以及广告决策的延迟。

二、广告检索

广告检索包括图中的Ad index和Ad retrieval两部分。这部分功能,可以类比于人体的心脏,它主要的功能,是实时接受广告投放信息,建立倒排索引,以及在线时根据用户与上下文标签从索引中查找广告候选。实际上,检索技术的重要性体现在所有Web-scale的技术挑战上,也同样是大规模计算广告系统的基础。

三、广告排序

广告排序包括图中的Ad ranking和Click modeling两部分。这部分可以类比于人体的大脑,因为它是广告效果优化的关键。其关键技术,在于离线分布式计算平台上的海量数据支持的点击率预测模型的训练。当然线上如何高查询模型需要的特征并进行高效计算,也是非常关键的。另外,在需要估计点击价值的广告产品中,我们还需要一个点击价值估计的模型,或者一些简单的规则,但是不像点击率预测那样有较为稳定统一的建模方法,因此我们在这里主要强调Click modeling。

四、数据高速公路

即图中的Data highway。这部分完成的功能,是将在线投放的数据准实时传输到离线分布式计算平台与流式计算平台上,供后续处理和建模使用,它可以类比于人体的循环系统。由于在进行受众定向建模时,需要用到广告系统以外的其他用户日志数据或第三方合作数据,因此数据高速公路也担负着收集这些数据源的任务。

五、用户日志生成

即图中的Session log generation。从各个渠道收集来日志,需要先整理成以用户ID为key的统一存储格式,我们把这样的日志称为用户日志(Session log)。这样整理的目的。是为了让后续的受众定向过与程更加简单高效4。

六、商业智能(Business Intelligence,BI)系统

包括ETL过程、Dash-board和Cube。这些是所有以人为最终接口的数据处理和分析流程的总括。因为它担负着对外信息交流的任务,可以类比于人的嘴。由于实际的广告运营不可能完全通过机器的决策来进行,其间必然需要有经验的操作者根据数据反馈对一些系统设置做及时调整。因此,实现一个功能强大,交互便利的BI系统是非常重要的。

七、行为定向

包括结构化标签库(Structural label base), Audience targeting,以及User at- tributes的cache:这部分完成的是挖掘用户日志,根据日志中的行为给用户打上结构化标签库中某些标签的过程。这部分是计算广告的原材料加工厂,相当于人体的胃,也因此在整个系统中具有非常关键的地位。

八、上下文定向

包括半在线页面抓取(Near-line page fetcher)和Page attributes的cache。这部分与行为定向互相配合,负责给上下文页面打上标签,用于在线的广告投放中。

九、定制化用户划分

即图中的Customized audience segmentation。由于广告是媒体替广告主完成用户接触,那么有时需要根据广告主的逻辑来划分用户群,这部分也是具有鲜明广告特色的模块。这个部分指的是从广告主处收集用户信息的产品接口,而收集到的数据如果需要较复杂的加工,也将经过数据高速公路导入受众定向模块来完成。

十、在线行为反馈

这部分指的是一些需要准实时完成的一些任务,包括短时的用户行为标签和短时用户点击反馈等。当然,在利用日志完成这些逻辑之前,必须要进行的步骤是反作弊(Anti-spam)与计价(Billing)。为了组织这样一些前后有依赖关系的数据流加工过程,我们经常选用流式管理平台作为基础设施。需要特别指出,这一部分对于在线广告系统的效果提升意义重大——在很多情形下,把系统信息反馈调整做得更快,比把模型预测做得更准确效果更加显著。

十一、广告管理系统

这部分是广告操作者,即客户执行(Account execute, AE)与广告系统的接口,AE通过广告管理系统定制和调整广告投放,并且与数据仓库交互,获得投放统计数据以支持决策。一般来说,广告系统中只有这部分是面向用户的产品。根据对操作对象开放程度的不同,这一系统有时又有开放自助的需求,在这种情况下,还需要包含相应的财务结算功能。对这部分,读者可以从很多自助式广告产品,比如Adsense,的投放界面中了解这部分的功能,我们在本书中将不做重点讨论。

十二、实时竞价接口

这是广告交易市场实时向需求方平台(DSP)发起广告询价请求,并根据竞价结果胜出DSP的程序交易接口。它包括作为需求方时使用的RTBS(RTB for Supply),以及作为供给方时使用的RTBD(RTB for Demand)。这也是一个广告系统特有的功能模块,在程序化交易原来越流行的今天是广告系统很重要的功能之一。


http://chatgpt.dhexx.cn/article/FQI6XFFJ.shtml

相关文章

广告系统实现

一、系统架构 二、准备工作 1、开发工具:IDEA 2、数据库:MySQL 3、环境:JDK1.8、 Maven 3 4、系统目录结构 三、广告系统的功能 1、广告投放系统 -> 既然是广告系统,一定得有广告数据,数据当然是由广告主或代理…

逻辑位移和算术位移

在C语言标准中&#xff0c;有两种位移分别为算术位移和逻辑位移。 逻辑位移&#xff1a;在位移运算符&#xff08;>>和<<&#xff09;之前的数是无符号数&#xff0c;编译产生的汇编指令是逻辑位移。 算术位移&#xff1a;在位移运算符之前的数是有符号数&#xff…

带符号位移运算,无符号位移运算,位运算

带符号位移运算&#xff1a; &#xff08;符号位也参与移动&#xff09; &#xff08;除了负数右移高位补1&#xff0c;其他情况空位均补0&#xff09; &#xff08;左移右移后可能结果正负都变了&#xff09; >>右移 &#xff08;向右移一位约等于除以2&#xff0c;注意…

显卡和异构计算

显卡和异构计算 本文采用知识共享署名 4.0 国际许可协议进行许可&#xff0c;转载时请注明原文链接&#xff0c;图片在使用时请保留全部内容&#xff0c;可适当缩放并在引用处附上图片所在的文章链接。 显卡GPU 显卡分类 集成显卡独立显卡核芯显卡 显卡性能 架构流处理器核心频…

带符号移位运算详解

十进制正整数有符号左移 示例&#xff1a;10 << 2 40 Java代码&#xff1a; public class ShiftTest {public static void main(String []args){int leftShiftBegin 10;System.out.println("十进制数&#xff1a;" leftShiftBegin " , " &quo…

机器对移位运算的看法

1.先说一个运算口诀叫“左乘右除”&#xff0c;如k<<1>k*2; k>>1>k/2; 2.左移 先看左移运算&#xff0c;因为相对于右移较为简单&#xff1b; x向左移动K位&#xff0c;会丢弃最高的K位&#xff0c;并在右端补K个0&#xff0c;移位运算是从左到右课结合的&a…

定点运算——位移运算

位移运算 前提&#xff1a;下述的移位运算推理过程是建立在合理的移位运算基础上的&#xff0c;即移位运算的结果和实际运算结果一致 位移运算的数学意义 位移运算&#xff0c;相当于小数点的移动&#xff0c;对数值进行扩大或者缩小进制数倍 左移运算&#xff0c;小数点右移…

【逻辑位移和算数位移】

<< 运算符 && >> 运算符 正数位移 当 x>>n 中 x 为正数时&#xff0c;会将x的所有位右移x位&#xff0c;同时左边高位补0 显而易见&#xff0c;运算结束后&#xff0c;值为1 。 可知右移n位&#xff0c;结果就是 x / 2^n&#xff1a;7 / 2 ^2 1;…

算术位移和逻辑位移(一篇懂)

位运算程序员的基本功&#xff0c;但是不得不说这一块儿确实挺让人头疼的。不过还好&#xff0c;你遇到了我&#xff0c;哈哈... 文章目录 必备知识算术移位逻辑移位用例子说话总结 必备知识 计算机是以二进制方式来进行运算的,也就是0和1 。所有数据必须转化成0、1代码计算机才…

矩阵乘测试显卡算力

由于pytorch和tensorflow不支持int8 int16的gemm&#xff0c;因此只能测试fp32 fp16 bf16等精度的tflops&#xff0c;如果要测试int8 int16精度下的数值&#xff0c;需要编写cublas脚本&#xff0c;目前不会CUDA编程&#xff0c;可参考大佬的脚本&#xff1a; cuBLAS矩阵乘法性…

逻辑运算和位移指令

逻辑运算指令 AND OR NOT XOR TEST 逻辑位移指令 SHL SHR 算术位移指令 SAL SAR 小循环位移指令 ROL ROR 大循环位移指令 RCL RCR AND 逻辑与指令 汇编格式&#xff1a;AND 目的操作数&#xff0c;源操作数 执行操作&#xff1a;&#xff08;目的操作数&#xff09;&…

Java 移位操作符

如有理解错误的地方&#xff0c;希望大家能够指正。 移位操作符在以前的开发中并没有使用过&#xff0c;估计在日常的开发中也很少会用到&#xff0c;所以记录下来&#xff0c;以后需要的时候方便查阅。 基本概念 Java里面的移位操作符总共有以下三种&#xff1a; 左移操作符 …

java移位操作示例

java移位操作示例 public class Shift4JTest {/***移位操作符有>>&#xff08;右移&#xff09;、<<&#xff08;左移&#xff09;、>>>&#xff08;右移&#xff09;* >>是带符号右移&#xff0c;负数高位补1&#xff0c;正数高位补0* <<左…

Java 移位运算详解

个人网站&#xff1a;生命不息 折腾不止 1、左移运算符&#xff1a;<< 先随便定义一个int类型的数int&#xff0c;十进制的value 733183670&#xff0c;转换成二进制在计算机中的表示如下&#xff1a; value << 1&#xff0c;左移1位 左移1位后换算成十进制的…

java移位运算_Java移位运算符 “

详解 首先举一个样例来说明不是循环移位&#xff1a; 假设上面的程序改为 i 3L << 63 程序的结果仍然为 1000000000000000000000000000000000000000000000000000000000000000 那么就说明Java中的移位运算不是循环的。 那对上面的问题又怎么解释呢&#xff1f; 在JLS(Jav…

java中的移位操作详解

移位运算&#xff0c;这是一个陌生又熟悉的操作。陌生是指不易理解且不常用&#xff0c;熟悉是指“别人家的开发工程师”在代码中经常使用这种方式进行高低位的截取、哈希计算、乘除法的运算&#xff0c;今天&#xff0c;让我们一起来揭开移位运算的神秘面纱。 Java提供了两种…

html 右侧滑动条取消,滚动条可以设置取消吗?

网页中的滚动条可以取消&#xff0c;下面我们就来看一下隐藏网页中滚动条的方法&#xff1a; 1、使用以下CSS可以隐藏滚动条&#xff1a;.container::-webkit-scrollbar {display:none} 但是要兼容其他浏览器的话这个就不太好用了&#xff0c;这个适用于Chrome 2、为了兼容其他…

html网页设计滚动条怎么设置,css怎么设置滚动条?

在我们HTML页面中经常会用到滚动条来优化我们的HTML页面&#xff0c;那么我们该如何设置滚动条呢&#xff1f;下面我们来看一下使用css设置滚动条的方法。 一、我们可以使用overflow属性设置是否出现滚动条overflow:scroll /* x y 方向都会*/ 或者 overflow-x:scroll /*只是x方…

element的表格设置及滚动条的设置

element的Table 表格 1.通过使用elementUI中的表格&#xff0c;达到我们需要的效果&#xff0c;其中包括对滚动条的修改&#xff0c;以及文字颜色修改等… 2.先看效果&#xff0c;是可以滚动的 HTML <div class"content_table"><el-table :data"tab…

改变滚动条样式

在我们开发网页项目中往往会遇到滚动条&#xff0c;然而滚动条原本的样式太丑了&#xff0c;所以要改变滚动条的样式&#xff0c;让滚动条和我们开发的项目更加的美观更加的好看&#xff1b; 案例&#xff1a; <div style"width: 200px; height: 200px;overflow: aut…