广告报表和出价方日志对不上,原因不外乎两种:事件在送往报表的路上丢了,或者两边按不同的规则计数。按竞价 ID 做一次核对计数,就能分辨是哪一种。答案决定了是修补管道、迁到托管服务,还是重建管道。
当广告报表始终对不上出价方日志时,同一个差距背后可能是两个问题。要么是展示和点击的记录(也就是事件)在送往报表的路上丢了,这往往发生在流量高峰;要么是两边各按自己的规则计数。按竞价 ID(广告交易平台给每场竞价分配的编号)做一次核对计数,就能把两者分开。在聘用任何人之前先做这件事,因为单靠一条新管道,只能解决第一个问题。
简短的答案:按竞价 ID,把你的出价方赢下的竞价与报表中的展示逐一匹配,并逐小时比较数量。一天之后再统计一次。如果仍然对不上的胜出占比在最忙的几个小时里升高,就是管道在丢事件,这需要工程上的修复。如果事件都在,只是落到了别的小时、出现了两次或者被过滤掉,那就是两边的计数方式不同。这时的解决办法,是为两边定一套统一的书面计数规则。
你的出价方日志记录了出价方参与的每一场竞价、给出的每一次出价和赢下的每一场竞价。你的报表则基于稍后才到达的事件生成,比如来自浏览器和应用的展示与点击。两者之间的差距有两种可能的原因,也可能两者兼有:
无论哪种情况,这个差距都要花钱。如果你按自己的报表给广告主开票,丢掉的展示会让你少收钱,重复计算的展示会让你多收钱,而每个广告交易平台通常都按它自己的计数向你收费。依据这些事件进行学习的出价方,也会根据错误的数字来定出价。
把两边的事件逐条匹配。在 IAB Tech Lab 的实时竞价协议 OpenRTB 中,每场竞价都有一个由广告交易平台分配的竞价请求 ID,请求中的每个展示也有自己的 ID。你的出价方可以要求广告交易平台把这些 ID 写进你胜出时它发出的通知,以及广告本身。这样,每个展示事件就带着与你的出价方日志相同的 ID。
这两个 ID 单独拿出来都不够。按照 OpenRTB 2.6,每个广告交易平台自行设定请求 ID,所以没有什么能阻止两个广告交易平台用上同一个 ID。展示 ID 只在它所在的请求内唯一,而且通常从 1 开始。所以要把三个值合在一起匹配:广告交易平台、请求 ID 和展示 ID。
然后做核对计数:
如果你的事件不带竞价 ID,第一步修复就是把它们加上,因为没有竞价 ID,核对计数只能比较总数。上面链接的那篇关于广告测量的技术文章,深入讲了时间戳和迟到事件。
以一条基于 Kafka 和 ClickHouse 搭建的管道为例。采集器从浏览器或应用接收每一个事件,把它写入消息队列 Kafka。加载器从 Kafka 读取事件,分批写入 ClickHouse,也就是支撑你报表的分析数据库。在高峰时,每个环节都可能丢失事件:
找一个出过问题的日子,请你的工程师拿出其中最忙那一小时的这些记录:
最后这项记录最能说明问题。如果在高峰时某个环节的计数下降,而它的上一个环节保持不变,事件就是在这两个环节之间丢的。
修补现有管道:
迁到托管服务,比如用 Amazon MSK 托管 Kafka、用 ClickHouse Cloud 托管 ClickHouse,由服务商来运行服务器:
重建管道:
做这类工作的公司有两种,本文不给其中任何一种排名。广告技术工程公司构建出价方、广告交易平台和广告服务器,所以它们知道竞价 ID 从哪里来,但要问清它们是否运行过与你的数据量相当的事件管道。数据工程公司为许多行业构建事件管道,但不一定做过广告技术。要问它们是否接触过 OpenRTB,是否和广告交易平台核对过计数。
向你名单上的每一家公司提出同样的五个问题。
你们怎样去重?要听对方是否提到:每个事件在创建时、在任何重试之前就获得一个 ID,这个 ID 由竞价 ID 和事件类型组成。管道要去重两次:一次在存储事件时,另一次在报表读取时。第二次很重要,因为 ClickHouse 在后台去重,时间点你无法预先安排。它的文档说,这种做法“不保证没有重复数据”。
你们怎样处理迟到的事件?要听对方是否为每种事件类型设定了一段数字仍可变动的期限,以及一个之后数字就不再改动的时点。在那之后才到的事件,仍应计入并标记为迟到,而不是被丢弃。
你们怎样把自己的数字与我们的出价方日志和合作方的报表核对?要看对方有没有每天按竞价 ID 做的核对计数,以及对每一处差异的书面原因。还要约定差距达到多大时,由专人向广告交易平台提出问题。
你们要怎样在超过我们峰值的负载下测试它?请对方以高于你最忙那一小时的速率,回放录下的一个繁忙日子。回放过程中,让他们关掉一台采集器和一台数据库服务器。结束之后,每一个事件要么已经存储,要么被计入丢弃数。
代码将归谁所有?归你的公司,要以书面形式确认,而且代码从第一天起就放在你的代码仓库里。对方保留的任何东西都应逐项列名,并附带一份许可,让你在工作结束后仍可以使用和修改它。
在 AdTech 领域,amBrain 从事 DSP 开发、实时竞价平台和广告交易平台工程方面的工作,其中包括 amBrain 为一家客户开发的需求方平台 RTBBidder。
amBrain 诊断交易和广告技术领域的慢系统:对运行中的平台做端到端测量,报告会指明时间耗在了哪里。
amBrain 自 2019 年起开发软件。它有三种合作方式:整体交付、专属团队,或工程师嵌入你的团队。客户拥有产品与代码的全部所有权,amBrain 的可复用组件除外。
本文不是案例研究。它不描述任何客户的事件管道,提到 RTBBidder 也只是说明它是 amBrain 开发的一个 DSP。Kafka 和 ClickHouse 在这里只是作为示例技术栈,并不是对 amBrain 项目或其所用工具的描述。本文不给出价格或时间表。
如果你的报表和出价方日志对不上,先做核对计数。然后带着结果和同样的五个问题,去找你名单上的每一家公司,包括 amBrain。
带上您当前的架构和让您担心的故障场景,我们用半小时一起梳理。