在线广告系统工程架构

news2024/11/15 11:08:04

一、广告系统概览

  • 广告投放系统:供广告主使用,核心功能包括会员续费、广告库管理、设定推广条件、设置广告出价、查看投放效果等。
  • 广告运营后台:供平台的产品运营使用,核心功能包括广告位管理、广告策略管理、以及各种运营工具。
  • 广告检索平台:承接C端的高并发请求,负责从海量广告库中筛选出几个或者几十个广告,实时性要求高,这个平台通常由多个微服务组成。
  • AB实验平台:广告业务的稳定器,任何广告策略上的调整均可以通过此平台进行灰度实验,观察收入指标的变化。
  • 广告计费平台:面向C端,负责实时扣费,和收入直接挂钩,可用性要求高。
  • 账务管理中心:广告业务中的财务系统,统管金额相关的业务,包括充值、冻结、扣费等。
  • 大数据平台:整个广告系统的底盘,需要聚合各种异构数据源,完成离线和实时数据分析和统计,产出业务报表,生产模型特征等。

二、广告投放系统

广告平台提供对上游广告主和下游媒体(包括网站、APP等流量提供方)的整体服务能力。

供广告主使用,核心功能包括会员续费、广告库管理、设定推广条件、设置广告出价、查看投放效果等。

三、广告检索平台

广告检索平台负责承接C端的流量请求,从海量广告库中筛选出最合适的前N个广告,并在几十毫秒内返回结果,它是一个多级筛选和排序的过程。

Recall层侧重算法模型,Search层侧重业务。从下到上,计算复杂度逐层增加,候选集逐层减少。

3.1 广告检索设计重点

性能设计是检索平台的重点,通常有以下手段:

  • 做好服务分层,各层均可水平扩展。
  • 采用Redis缓存,避免高并发请求直接打到数据库,缓存可按业务规划多套,进行分流。
  • 采用多线程并行化某些子流程,比如多路召回逻辑、多模型打分逻辑。
  • 热点数据进行本地缓存,比如广告位的配置信息以及策略配置信息,在服务启动时就可以预加载到本地,然后定时进行同步。
  • 非核心流程设置超时熔断走降级逻辑,比如溢价策略(不溢价只是少赚了,不影响广告召回)。
  • 和主流程无关的逻辑异步执行,比如扣费信息缓存、召回结果缓存等。
  • 精简RPC返回结果或者Redis缓存对象的结构,去掉不必要的字段,减少IO数据包大小。
  • GC优化,包括JVM堆内存的设置、垃圾收集器的选择、GC频次优化和GC耗时优化。

四、广告计费平台

计费平台是核心系统,主要完成实时扣费功能。比如 CPC 结算方式下,广告主设置的预算是 50 元,每次点击扣 1 元,当扣费金额达到预算时,需要将广告及时下线。

除此之外,计费平台还需要支持 CPM、CPT 等多种结算方式,以及支持反作弊、余额撞线处理、扣费订单的摊销和对账等功能。

计费平台的特点是: 并发高、数据量大、同时可用性要求高,需要做到不少扣,不重复扣。 下面以 CPC 实时点击扣费为例,详细说下技术方案。

首先,整个扣费流程做了异步化处理,当收到实时扣费请求后,系统先将扣费时用到的信息缓存到 Redis,然后发送 MQ 消息,这两步完成后扣费动作就算结束了。

这样做的好处是:能确保扣费接口的性能,同时利用 MQ 的可靠性投递和重试机制确保整个扣费流程的最终一致性。

为了提高可用性,针对 Redis 和 MQ 不可用的情况均采用了降级方案。Redis 不可用时,切换到 TiKV 进行持久化;MQ 投递失败时,改成线程池异步处理。

每次有效点击都需要生成 1 条扣费订单,面临大数据量的存储问题。目前我们采用的是 MySQL 分库分表,后期会考虑使用 HBase 等分布式存储。另外,订单和账务系统之间的数据一致性,采用大数据平台做天级别的增量抽取,通过 Hive 任务完成对账和监控。

五、广告技术挑战

对广告业务有了初步了解后,再来看下广告系统面临的技术挑战:

1、高并发 :广告引擎和 C 端流量对接,请求量大(平峰往往有上万 QPS),要求实时响应,必须在几十毫秒内返回结果。

2、业务逻辑复杂 :一次广告请求,涉及到多路召回、算法模型打分、竞价排序等复杂的业务流程,策略多,执行链路长。

3、稳定性要求高 :广告系统直接跟收入挂钩,广告引擎以及计费平台等核心系统的稳定性要求很高,可用性至少要做到 3 个 9。

4、大数据存储和计算 :随业务发展,推广数量以及扣费订单数量很容易达到千万甚至上亿规模,另外收入报表的聚合维度多,单报表可能达到百亿级别的记录数。

5、账务的准确性 :广告扣费属于金融性质的操作,需要做到不丢失、不重复,否则会损害某一方的利益。另外,如果收入数据不准确,还可能影响到业务决策。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/672260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS学习路之开发篇—多媒体开发(相机开发 一)

HarmonyOS相机模块支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照、连拍和录像等。 基本概念 相机静态能力 用于描述相机的固有能力的一系列参数,比如朝向、支持…

华为OD机试之按单词下标区间翻转文章内容(Java源码)

文章目录 按单词下标区间翻转文章内容题目描述输入描述输出描述示例代码 按单词下标区间翻转文章内容 题目描述 给定一段英文文章片段,由若干单词组成,单词间以空格间隔,单词下标从0开始。 请翻转片段中指定区间的单词顺序并返回翻转后的内…

芯片工程师求职题目之设计基础篇(1)

1. 进制转换 会算数值在二进制、八进制、十进制以及十六进制之间的任意转换。 会算数值的正码、反码、补码、BCD码。 2. 什么是格雷码(Gray code),它有什么优点。 在一组二进制编码中,若任意两个相邻的数值还有1位二进制数不同,则称这种编…

算法程序设计 之 最长公共子序列(4/8)

一、实验目的: 理解并掌握动态规划算法的基本思想和设计步骤。 实验内容若给定序列X{x1,x2,...,xm},Z{z1,z2,...,zk},若Z是X的子序列,当且仅当存在一个严格递增下标序列{i1,...,ik},使得对于所有j1,2,...,k有:zjxij。例如&#x…

智能家居APP软件开发有何优势?

传统家居行业营销模式已经无法满足现代人多样化个性化的需求,也跟不上互联网时代的发展步伐了,很多传统家居行业都陷入了营销困境。通过智能家居APP软件开发,可以利用互联网改造传统模式,探索新的发展模式,可以说智能家…

Bootstrap 简介

文章目录 Bootstrap 简介什么是 Bootstrap?Bootstrap 包的内容Bootstrap 实例 Bootstrap 简介 什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。 历史 Bootstrap 是由 Twi…

【软件测试知识】什么是持续集成?

持续集成是一种 DevOps 软件开发实践。采用持续集成时,开发人员会定期将代码变更合并到一个中央存储库中,之后系统会自动运行构建和测试操作。持续集成通常是指软件发布流程的构建或集成阶段,需要用到自动化组件(例如 CI 或构建服…

EasyUI表格增加筛选和导出的方法

一、前言 最近写前端页面,要从后台查询表格数据; 查到数据后,就想增加个数据筛选功能,如果再查后台的话会影响效率(还得加参数、再调用后台接口、后台再执行sql),就想前端能不能自己筛选下已经…

车载以太网 - 传输层 - TCP通信过程

目录 TCP 通信阶段 1、连接建立Connection establishment 2、数据传输 Data transfer 3、连接释放 Connection release TCP通信的三个阶段: TCP连接(三次握手) 1、Client(ECUA) -> Server(ECU B)第一次握手 2、Server -> Client 第二次握手…

软件工程基础速通教程(北京理工大学)

文章目录 前言软工上课情况考后感题型分析概念部分大题部分数据流图和数据字典数据流图数据字典 结构化设计工具程序流程图盒图(N-S图)PAD图判定表和判定树PDL(伪码) 软件测试白盒测试法语句覆盖判定覆盖,条件覆盖&…

【MMDetection3.0】训练自己的数据集

本文记录下MMDetection3.0版本,即截至目前最新的版本,训练自定义数据集的过程。当前MMDetection已经封装的很好了,虽然易于使用,但其API也愈发复杂,对于新手不太友好,这里记录下自己的踩坑经历。 数据部分…

5.英语词性之副词

五.什么是副词 副词是修饰动词,形容词,副词的词语,有时也可以修饰数词,介词,连词,名词或全 句。副词是表示行为或状态特征的词,主要作状语,也可以作表语,定语&#xff0c…

音视频开发:Qt在视频剪辑3D桌面软件获胜, 嵌入式不敌安卓

1 Qt Android嵌入式应用层开发方向对比 大家都知道啊,做嵌入式linux设备,一些没有屏幕,比如安防摄像头,门铃之类的,另外一些嵌入式设备是有触控屏,在触控屏上还跑应用软件的,这种比如商场各种…

citywalk话题增长704.76%,小红书本地化内容营销怎么玩?

2023年初发布的《2023小红书年度生活趋势:投入真实生活》报告中提到,今后年轻人会更加意识到周围和附近的重要性,在十大生活趋势预测中,近邻升温(2022年相关笔记数量同比上涨213%)、野到家门口(…

建立小型医学数据库(总结)

建立小型医学数据库 小型医学数据库可以用于存储和管理医学数据,如患者病历、药品信息、试验结果等。这对于医疗机构和科研机构来说非常必要,可以提高数据管理和共享的效率,进而促进医学研究和诊疗水平的提升。 建立小型医学数据库有以下基本…

转发和重定向的区别及其原理

在web应用中完成资源的跳转 在一个web应用中完成资源的跳转可以通过转发或者重定向两种方式, 跳转的资源只要是服务器内部合法的资源即可(如Servlet、JSP、HTML…) 转发机制使用场景: 某个Servlet向request域当中绑定了数据,希望从其他Servlet当中把request域里面…

【Python】Django 基础知识

系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录 系列文章目录前言安装启动项目查看所有子命令主要文件setting 配置项URL 请求路径path 转换器HttpResponse 输出中文乱码models的objects代码自动补全views的request 代码自动补全views的request.…

沃尔玛、亚马逊跨境电商如何实现自养账号采退、海淘及测评的

今天曹哥还是针对下亚马逊、沃尔玛跨境平台如何实现自己养买家号可以给自己采购、海淘及测评等技术问题 首先你要有一个稳定的环境方案,这个是做自养号采购、海淘及测评的基础。环境有很多,从早期的虚拟机,模拟机,云手机&#xf…

[进阶]Java:IO流分类、文件字节输入流、读取字节数据、避免乱码问题

IO流概述 I表示intput,是数据从硬盘文件读入到内存的过程,称之输入,负责读。O表示output,是内存程序的数据从内存到写出到硬盘文件的过程,称之输出,负责写。 IO流的分类 按流的方向分 按流中的数据最小单…

树状数组(入门附模板)

声明:本篇文章图片非原创 目录 简介 lowbit函数 结构分析 单点修改,区间查询 区间修改,单点查询 区间修改,区间查询 模板题 树状数组1–单点修改,区间查询 题目描述 输入格式 输出格式 输入输出样例 输入 #1 输出 #1 说明/提示 分析 代码 树状数…