这是彭文华的第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相关推荐

  1. 微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?

    在上一章,我介绍了springcloud的eureka搭建.我们做了服务注册.最后我们还介绍了一些续约,失效剔除等参数配置.已经不需要再通过手动输入ip去访问服务,而是通过中心只需要通过服务名就可以获 ...

  2. 带你手摸手搭建vuepress站点

    vuePress是什么? VuePress 俺简单介绍下,是国内有名大神的尤雨溪发布的全新基于 vue 静态网站的生成器,内置的有 webpack组件,可以拿来写文档,主要是md格式.做出的感觉就是简 ...

  3. 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金

    完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...

  4. 《手摸手带你学ClickHouse》之Oracle同步数据到Clickhouse

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注. 文章目录 前文回顾: <手摸手带你学ClickHouse>之安装部署 <手摸手带你学Cl ...

  5. 手摸手带你写项目----秒杀系统(一)

    博客地址: 手摸手带你写项目----秒杀系统(一) 所有文章会第一时间在博客更新! 后面的时间我会手摸手带大家一起写几个实战性的项目.主要希望能应用上之前梳理的那些知识点,同时让没有写过项目的同学对实 ...

  6. 《手摸手带你学ClickHouse》之安装部署

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 chaodev 即可关注. 文章目录 1.Clickhouse简介 1.1 简介 1.2 应用场景 1.3 架构 2. ClickHo ...

  7. 每天研究一个产品,阿德老师“手摸手”带你写产品分析报告 |

    作为一个产品经理,要高频地去把玩各种最新产品,所以我们想把那些对世界充满好奇心.勇于探索新鲜事物的产品经理都聚在一起.一起深入研究国内外最新/奇产品,一起发现有趣的事情,并把研究心得都整理成文章沉淀下 ...

  8. vue 前端显示图片加token_手摸手,带你用vue撸后台 系列二(登录权限篇)

    完整项目地址:vue-element-admin https://github.com/PanJiaChen/vue-element-admin 前言 拖更有点严重,过了半个月才写了第二篇教程.无奈自 ...

  9. 手摸手带你学移动端WEB开发

    HTML常用标签总结 手摸手带你学CSS HTML5与CSS3知识点总结 好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP ...

最新文章

  1. javaweb学习总结(三十八)——事务
  2. Codeforces Round #408 (Div. 2)
  3. 完整的连接器设计手册_Harwin连接器展示在深井探油应用中不受环境影响的价值...
  4. iOS开源项目周报0323
  5. 2021“MINIEYE杯”中国大学生算法设计超级联赛(4)Display Substring(后缀数组+二分)
  6. Net设计模式实例之组合模式(Composite Pattern)(3)
  7. ubuntu增加磁盘容量
  8. Android5.1开机LOGO与开机动画
  9. 数据结构(主席树,Bit):XTU 1247/COGS 2344. pair-pair
  10. 求定积分的不太常见的方法
  11. 使用docker安装mysql8及mysql5.7
  12. kafka按照时间查询记录
  13. linux报错Loading mirror speeds from cached hostfile解决方法 【yum错误记录】
  14. 五,JavaScript数组·上
  15. CELLID的定位技术
  16. JAVA实现CSV文件转JSON。
  17. 面试常见问题(嵌入式)
  18. mysql 查看字段详情
  19. word文档怎么左右一分为二_怎么把word文档分成左右两部分
  20. kafka消费者Rebalance机制

热门文章

  1. Linux内核源代码下载
  2. mac nexus 资源下载及安装
  3. Linux工作站usb口无反应,usb接口没反应怎么办 usb接口没反应解决方法
  4. ie上svg的兼容问题
  5. WAP Push SP接口协议
  6. 阅读报告Maneuvering periods of 2D quantum walks with the coin operator
  7. java实现等待程序响应_java – Ning:连接到websocket并等待响应
  8. 因为你是我的英雄音译_我可以成为你的英雄宝贝
  9. Matlab------如何控制matlab中的数据输出格式
  10. win10找不到gpedit.msc