【附下载】手摸手带你搭建广告需求平台DSP
这是彭文华的第110篇原创
以前分享过DMP(数据管理平台)的来龙去脉。DMP是互联网最挣钱的广告系统中的用户基础数据提供方。百度的凤巢、淘宝的直通车(阿里妈妈)还有腾讯的广点通,是老牌三大网络广告投放平台,现在多了一个头条的巨量引擎。
阿里妈妈曾经创造了阿里巴巴80%的现金收入。现在头条系的流量也起来了,巨量引擎给今日头条每年带来超千亿的广告收入!
简单来说,我们在互联网上看到的任何一个广告,再说一遍,是任何一个广告,背后都有一个DSP系统在支持着。
今天就给大家分享一下广告系统核心DSP(Demand Side Platform,广告需求方平台)的架构设计。
DSP是个啥?
DSP就是广告主需求平台,是广告系统中最重要的系统,相当于电商系统中的交易平台一样。只不过呢,DSP是广告主在买展现的机会(广告位),卖家是广告展现位置的拥有者(媒体),商品就是用户的点击了(商机)。简单来说,DSP就是互联网公司用流量变现的超级利器!
互联网广告系统整体是这个样子的:
如图所示,整个广告系统作为平台,一边是广告主,一边是媒体提供的广告位。拥有广告位资源的媒体,通过接入SSP,将广告资源放在供应商平台上;想投放广告的广告主,则在DSP上制定投放计划,寻找投放资源,ADN广告网络和ADX广告交易市场则完成双方需求的匹配和投放。
所以广告系统的需求基本上就能列出来了:
要给广告主提供媒体端提供的广告位资源列表
要给广告主提供按需购买和展现广告的服务
要给广告主提供广告展示和点击的效果
要在广告费用用完的时候及时停止展示,同时给双方提供费用清单
DSP数据流应该如何架构?
既然整个广告系统已经摸的差不多了,咱就把DSP放大看看。按照信息系统建设的逻辑,先把DSP的业务流程梳理一下,然后再划分其各项功能,然后就能把数据逻辑和架构整理出来了。
我们先画出业务流程图,以百度推广为例,它的投放流程如下:
广告主在百度凤巢上的流程是这样的:先建立投放计划,计划中会建立投放单元,然后管理创意,选择关键词,对关键词进行竞价(出价),确认后完成投放计划。凤巢就会根据广告主设置的规则,进行广告投放。每当有人搜索一个关键词,就按照规则给他展示;有人点击,就给他计费;最后在广告主的页面上把统计结果展示出来。
既然业务流程弄清楚了,那就可以开始画系统的架构图了。DSP其实囊括了:
广告渠道接入能力,对接ADX;
用户标签数据接入能力,对接DMP;
投放策略管理能力,面向广告主的投放素材的投放策略管理,从需求侧(广告侧)增加点击概率;
算法能力,资源的智能匹配,让合适的人在合适的地方和时间看到合适的广告,从供应侧(用户侧)增加点击概率;
实时能力,实时监控,动态调整,不浪费一个展现机会,也不多展示一次;
统计展现能力,实时计算和统计,能长时间追溯和分析。
上图基本上就是DSP所需要的各项关键能力。底层需要有广告渠道和用户数据对接能力,核心是策略和算法能力,上层得有实时监控和数据统计展示能力。
系统架构有了,咱再画一下数据架构图。先整理一下思路:用户数据有DMP,广告资源有ADX,我们都不用管;算法和策略各自有一帮人负责,一方面那些都属于事务性,另一方面属于算法和策略方面,咱数据组也不用管,只需要考虑实时监测和数据统计展现就行了。
前面肯定得有实时数据采集,另外还得从DMP里拿到用户标签数据。中间得是两个应用,一个是广告资源列表,一个是广告购买(RTB),现在都是竞价购买的形式(这些不属于DSP,只是辅助理解业务)。后面则是数据统计和展示服务。整个系统大概就是这样的:
中间的广告业务应用就扔给业务开发团队,我们往下梳理数据架构图。前面的实时数据采集一般就是Nginx转发,后面可以用flume,但必须得用kafka进行分发,一边走实时,一边走离线。这里因为涉及到钱,可能要回溯很久的数据,所以建议Lambda架构,因为kappa回溯老数据的时候非常费劲。实时这边建议直接走flink+kafka,缓存用redis,持久用Hbase,算完之后数据建议直接扔实时数仓里。离线那边就随便了,用Hive + Spark就行;实时数仓可以用CK、Doris、Druid等;展示用Data V、Davinci等。所以数据架构图就出来了:
当然,这个架构图还很简单,很多细节还没细化,比如第三方的数据没及时到,该咋办?各个指标应该如何管理和计算?如何保证各个环节的exactly only、深分页等等。这些都是流失计费系统需要解决的问题。
数据不及时:FLink自身的Watermark机制,增加环节Retry,多等一会;
exactly only:两阶段递交、三阶段递交、paxos保证端到端exactly only;
深分页:分桶+谓词下推+并行查询。
各大厂DSP实时OLAP选型
百度凤巢用的是自研的Drios(原百度palo),17年开源,后来当时的创始人叶谦大佬带研发团队出来创业。现在已经是炙手可热的MPP类实时OLAP产品了。他们的公众号是DorisDB,大家可以关注一波,里面有美团、小米、京东等大厂的分享经验,我就不复制粘贴了。之前分享过一个进大厂的小秘籍,就是找一些只有大厂才会用的产品,会用了,练熟了,就好进大厂了。这个秘籍一般人我不告诉他!
阿里优酷用的是定制化的kylin,这个很有意思,Kylin本来是需要预计算的,按理来说不太适合实时场景,但是他们通过微批+预计算Rollup物化视图等手段保证数据构建效率,通过Blink分钟级微批计算,Kylin分钟级增量保证实时性。居然结果还非常不错~~~
头条的巨量引擎用的是Druid,这是一个基于时序的数据库。因为广告数据全部都是日志数据,天然有序,对于Druid来说非常匹配。基本能做到来一条算一条,这效率嗷嗷的。不过Druid不支持join,对场景和设计水平有比较高的要求。
对了,另外还给你准备了DSP的业务介绍书籍和计算广告领域经典书籍,还有优酷的DSP实践,各位可以瞅瞅。后台回复“DSP”即可下载。
配合以下文章享受更佳
干货 | 字节跳动数据中台服务化分享会实录
【资料包】实时数仓架构设计与选型
干货 | CRM、DMP、CDP到底都是些啥啊?
我需要你的点赞,爱你哟
【附下载】手摸手带你搭建广告需求平台DSP相关推荐
- 微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?
在上一章,我介绍了springcloud的eureka搭建.我们做了服务注册.最后我们还介绍了一些续约,失效剔除等参数配置.已经不需要再通过手动输入ip去访问服务,而是通过中心只需要通过服务名就可以获 ...
- 带你手摸手搭建vuepress站点
vuePress是什么? VuePress 俺简单介绍下,是国内有名大神的尤雨溪发布的全新基于 vue 静态网站的生成器,内置的有 webpack组件,可以拿来写文档,主要是md格式.做出的感觉就是简 ...
- 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金
完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...
- 《手摸手带你学ClickHouse》之Oracle同步数据到Clickhouse
本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注. 文章目录 前文回顾: <手摸手带你学ClickHouse>之安装部署 <手摸手带你学Cl ...
- 手摸手带你写项目----秒杀系统(一)
博客地址: 手摸手带你写项目----秒杀系统(一) 所有文章会第一时间在博客更新! 后面的时间我会手摸手带大家一起写几个实战性的项目.主要希望能应用上之前梳理的那些知识点,同时让没有写过项目的同学对实 ...
- 《手摸手带你学ClickHouse》之安装部署
本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注. 文章目录 1.Clickhouse简介 1.1 简介 1.2 应用场景 1.3 架构 2. ClickHo ...
- 每天研究一个产品,阿德老师“手摸手”带你写产品分析报告 |
作为一个产品经理,要高频地去把玩各种最新产品,所以我们想把那些对世界充满好奇心.勇于探索新鲜事物的产品经理都聚在一起.一起深入研究国内外最新/奇产品,一起发现有趣的事情,并把研究心得都整理成文章沉淀下 ...
- vue 前端显示图片加token_手摸手,带你用vue撸后台 系列二(登录权限篇)
完整项目地址:vue-element-admin https://github.com/PanJiaChen/vue-element-admin 前言 拖更有点严重,过了半个月才写了第二篇教程.无奈自 ...
- 手摸手带你学移动端WEB开发
HTML常用标签总结 手摸手带你学CSS HTML5与CSS3知识点总结 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP ...
最新文章
- javaweb学习总结(三十八)——事务
- Codeforces Round #408 (Div. 2)
- 完整的连接器设计手册_Harwin连接器展示在深井探油应用中不受环境影响的价值...
- iOS开源项目周报0323
- 2021“MINIEYE杯”中国大学生算法设计超级联赛(4)Display Substring(后缀数组+二分)
- Net设计模式实例之组合模式(Composite Pattern)(3)
- ubuntu增加磁盘容量
- Android5.1开机LOGO与开机动画
- 数据结构(主席树,Bit):XTU 1247/COGS 2344. pair-pair
- 求定积分的不太常见的方法
- 使用docker安装mysql8及mysql5.7
- kafka按照时间查询记录
- linux报错Loading mirror speeds from cached hostfile解决方法 【yum错误记录】
- 五,JavaScript数组·上
- CELLID的定位技术
- JAVA实现CSV文件转JSON。
- 面试常见问题(嵌入式)
- mysql 查看字段详情
- word文档怎么左右一分为二_怎么把word文档分成左右两部分
- kafka消费者Rebalance机制
热门文章
- Linux内核源代码下载
- mac nexus 资源下载及安装
- Linux工作站usb口无反应,usb接口没反应怎么办 usb接口没反应解决方法
- ie上svg的兼容问题
- WAP Push SP接口协议
- 阅读报告Maneuvering periods of 2D quantum walks with the coin operator
- java实现等待程序响应_java – Ning:连接到websocket并等待响应
- 因为你是我的英雄音译_我可以成为你的英雄宝贝
- Matlab------如何控制matlab中的数据输出格式
- win10找不到gpedit.msc