每个程序化团队大概都撞见过这样一幕:广告上线,花费曲线平稳,点击率也说得过去;可三个月后拉真实转化,数字却很难看——预算大把烧在了那些注定不会转化的曝光上。人群是用平台侧的”最佳猜测”模型圈的,而那个模型恰恰不知道你对自己用户的那些了解。约翰·沃纳梅克那句”我知道广告费有一半是浪费的,只是不知道浪费在哪一半”,在程序化时代依旧成立——只不过如今我们有了工程手段,能把那”一半”找回来一部分。
RTA(Real-Time API,实时 API)就是这个手段:在不逼任何一方交出数据的前提下,让广告主用自己的第一方数据,实时影响 DSP 的每一次出价决策。 这篇文章从协议层把 RTA 讲透——它到底是什么、在竞价生命周期里站在哪一环、请求在线上长什么样、跑在怎样的工程约束之下,以及在你动手部署之前需要先备齐什么。
范围说明:RTA 是 DSP ↔ 广告主之间的私有契约,紧贴在程序化竞价链路上。链路本身的角色与协议——DSP / SSP / Ad Exchange 全景、OpenRTB 与 Header Bidding、隐私同意框架——各有专文,这里只在与 RTA 相关处引用。
TL;DR
- RTA 是一道竞价前过滤器,不属于 OpenRTB:它是 DSP ↔ 广告主之间的双边、opt-in 的私有契约,跑在 DSP 落定出价响应之前。
- 一次问答,只问一个问题:DSP 拿着一个不透明用户标识去问广告主——“这个用户、这条广告,我该不该出价?“广告主回一句”出 / 不出”,可选附带一个质量档位(tier)或出价系数(multiplier)。
- 核心价值是”去问,而不是去共享”:广告主不外泄任何 PII 或行为信号,只回流一个决策;DSP 也看不到广告主的用户画像与打分逻辑。它同时换来实时策略、数据隐私、细粒度出价控制三样人群上传给不了的东西。
- 100ms 以内,否则当没发生:广告主的 RTA 服务必须在 DSP 级 QPS 下、以确定性的、低于 100ms 的延迟作答——超时的响应直接丢弃,事先约定的兜底策略接管。
- 两个核心旋钮:缓存 TTL(不缓存 / 1h / 24h)与兜底模式(fail-open / fail-closed)。配错任何一个,要么超花(default-allow 撞上过期的”yes”缓存),要么少花(default-deny 撞上激进超时)。
- 缓存不是优化,是第一性设计:命中率从 90% 提到 99%,能把实时容量与成本砍掉一个数量级;但 TTL 越长决策越陈旧、错误出价越多——状态翻转越快的信号,TTL 必须越短。
- 把 RTA 端点当 tier-zero 服务:它的峰值 QPS ≈ DSP 对该广告主各广告的峰值竞价 QPS,认真投放轻松几十万 QPS,还叠着日内波动与事件尖峰。
- 它是隐私时代最干净的工程模式:第三方 cookie 退场、IDFA 覆盖坍塌之后,“以第一方数据为默认”的程序化栈几乎都会建在 RTA 的各种变体之上。
Table of contents
Open Table of contents
1. 问题:广告主与 DSP 之间那道数据边界
在传统程序化链路里,广告主和 DSP 分坐在一条跨不过去的边界两侧,各自握着对方拿不到的那一半信息。
- 广告主握着又深又准的第一方数据:购买历史、注册状态、流失风险分、浏览行为、生命周期价值(LTV)、欺诈信誉。这些数据本身就是营销的全部意义——它告诉你哪个用户值得追。
- DSP 握着那次曝光:这个用户此刻正躺在某个媒体的版面上,随时可以被投一条广告。但除了事先上传的那点粗粒度人群,DSP 并不拥有广告主视角下”这个人究竟是谁”的认知。
把这两侧隔开的,是三重现实:数据隐私法规(GDPR、CPRA 及各地类似制度)、商业敏感性,以及把自己的客户名单泄露给第三方的明显风险。
在 RTA 之前,弥合这道边界的标准做法是人群上传(audience upload):广告主把用户名单做哈希,经数据洁净室或直连集成发给 DSP,DSP 在上面叠加自己通用的定向模型,广告就以近似黑盒的方式跑起来。问题是——广告主没法实时干预,而 DSP 始终在对着一份过期的广告主状态快照做定向。
结果是一道典型的统计误差问题,两种错误都在悄悄流血、且都不会出现在 DSP 的标准报表里:
- 假阳性:DSP 把预算花在了广告主一眼就会拒掉的用户身上(比如已经付费的老客、明确要压制的人群)。
- 假阴性:DSP 跳过了广告主本愿意溢价去抢的用户(比如刚弃购、意图正浓的那批)。
关键直觉:人群上传的病根不在”数据不够多”,而在”数据不够新、且方向单向”——广告主只能一次性把状态推过去,之后既改不动、也拿不回控制权。RTA 要解决的正是这个时效性 + 控制权的双重缺口。
2. 破局:去问,而不是去共享
RTA 把这层关系整个反了过来。 与其试图把两份数据集合并,不如让 DSP 在竞价请求发生的那一刻,直接去问广告主:
“我有机会为你的广告,对这个用户出价——要不要出?”
广告主在毫秒级作答,依据是它自己那侧、边界之内的第一方数据,全程不向 DSP 输送任何用户信息。DSP 永远看不到广告主的画像或打分逻辑,广告主也永远看不到 DSP 底层的人群构成。回流的,只有一个决策。
这一”问答”换来了人群上传给不了的三个性质:
- 实时策略:广告主在自己这侧改定向规则即时生效,没有人群包重传,也没有 DSP 侧的传播延迟。
- 数据隐私:没有 PII 或行为信号跨越边界,回来的只是一个”出 / 不出”(外加可选的质量档位)。
- 细粒度出价控制:广告主返回的不只是布尔值,还可以是一个质量分桶或显式出价系数——从而在同一个已 opt-in 的人群内做差异化出价。
一句话:RTA 的精髓是把”共享数据”换成了”共享一个决策”。数据留在产生它的一侧,只有那侧算出来的结论跨过边界——这既是它的隐私优势,也是它整个工程约束(下面几节)的来源。
3. RTA 在竞价生命周期里的位置
RTA 不属于 OpenRTB 规范。它是一道跑在 DSP 内部、在 DSP 落定出价响应之前的竞价前过滤器。把它放进端到端的竞价时序里,位置一目了然:
RTA 是嵌在 DSP 内部的一道前置闸门:出价打分之前先问一句广告主,答”不出”就连响应都不发。它不改协议,只在竞价链路上加了一次亚毫秒级的问答。
一步步拆开:
- 曝光事件:用户打开一个 App 或网页,媒体的 SDK / 广告标签向它的 SSP 发出一个具备曝光资格的请求。
- OpenRTB 扇出:SSP 打包一个 OpenRTB 竞价请求,扇出给它对接的各个 DSP。
- RTA 前置过滤(在 DSP 内部):在出价打分之前,请求先打到 RTA 过滤层——DSP 取出用户标识(GAID、IDFA、哈希邮箱、设备指纹等),去问广告主的 RTA 端点:“这个用户、这条广告,我该不该出价?“广告主基于自己的第一方状态作答。
- 丢弃或打分:若答案是”不出”(或没及时拿到答案、且兜底解析为”不出”),DSP 直接退出——不发出价响应;若是”出”(可带档位提示),DSP 走它正常的打分与定价逻辑,必要时按档位调整出价,再向 SSP 发出价响应。
- 拍卖与渲染:SSP 跑它的拍卖,竞胜 DSP 的素材在媒体版面上渲染。
RTA 契约是双边、opt-in 的:每个想用 RTA 的广告主都要单独对接 DSP 的 RTA 平台,各有自己的 schema、延迟预算、兜底策略与缓存配置。它不是一个”全网开关”,而是一条条一对一拉起来的私有通道。
4. 解剖一个 RTA 请求
大多数生产级 RTA 实现长得都差不多——小载荷、确定性响应。具体 schema 因 DSP 而异,但关键字段是一致的。一对有代表性的请求 / 响应长这样:
// DSP → 广告主
POST /rta/v1/bid-eligibility HTTP/1.1
Content-Type: application/json
{
"request_id": "abc-7f3e9a",
"user_id": "GAID:8f4e2c1a...",
"campaign_id": "summer_promo_2026",
"ad_slot": {
"media_type": "video",
"placement": "feed",
"size": "1080x1920"
},
"context": {
"app_id": "com.example.shopping",
"geo": "SG",
"device_os": "Android"
},
"timestamp_ms": 1747400000123
}
// 广告主 → DSP
{
"request_id": "abc-7f3e9a",
"should_bid": true,
"tier": "high_value",
"bid_multiplier": 1.5,
"ttl_seconds": 3600,
"reason_code": "RECENT_CART_ABANDON"
}
值得注意的是请求里没有什么:没有用户属性、没有人群 ID、没有行为历史。DSP 只给广告主一个不透明的用户标识和一个竞价上下文,问一个问题。广告主做它需要的查询——通常是对逐用户状态的一次亚毫秒级 KV 命中——然后作答。
响应里那几个可选字段,正是 RTA 从”硬开关”升级成”软信号”的关键:
tier/bid_multiplier:把 RTA 从一道硬过滤器变成一个软打分信号(见 §5.1)。ttl_seconds:广告主建议的该决策缓存寿命,DSP 可以采纳,也可以用自己的策略覆盖(见 §6.3)。reason_code:一个不透明标签,广告主可让 DSP 原样回显,用于自己这侧的日志与调优(见 §6.5)。
关键直觉:请求方向是”DSP 问、广告主答”,但信息只单向减少不单向增加——DSP 给出的是它本就有的标识与上下文,广告主给回的是一个结论。整条链路上没有任何一比特的用户画像跨过边界,这正是 §2 那句”共享决策而非共享数据”在协议层的样子。
5. RTA 到底能做什么
5.1 智能出价:硬过滤 + 软打分
RTA 给广告主两个截然不同、却常常合用的杠杆:
- 硬过滤——
should_bid: false。DSP 在拍卖看到出价之前就退出。这同时省下广告预算和 bidder 的 CPU。 - 软打分——
should_bid: true配上一个tier或bid_multiplier。DSP 照常进拍卖,但出差异化的价:高意图用户给激进出价,基线用户给保守出价。
两种情况下的经济学论证是同一个:别再为永远不会转化的曝光花钱,把预算集中到会转化的曝光上。 bidder 这侧也一并受益——不再把竞胜浪费在注定无果的曝光上,“竞胜 → 转化”的比率全面改善。
5.2 个性化素材:广告层真正的 1:1
把 RTA 和 DPA(Dynamic Product Ads,动态商品广告)结合,就得到了商品级的个性化。DSP 同时查询广告主的商品目录和 RTA 端点,再为每个用户渲染不同的素材——由真实的行为信号驱动:近期看过的商品、被遗弃的购物车、相似品的亲和度。
商品目录 + 逐用户信号 → DSP 推荐选品 → 动态素材合成 → 端上渲染。广告主只交出”该给这个人看什么”的信号,具体画像仍留在自己边界内。
这里的转化提升可以相当可观,但工程代价不小:你现在是在和一次普通出价同样的、低于 100ms 的预算之下,做逐请求的素材合成。
6. 工程落地:把 RTA 做到生产可用
RTA 纸上看着简单,到了生产里,它变成一连串延迟预算的取舍,每一个都有可量化的收入后果。这一节的三张旋钮——延迟预算、兜底策略、缓存分级——可以先用一张图串起来:
一次竞价请求进 RTA 过滤层后的全部分支:先查缓存(~5ms),未命中才实时调用(软超时 50ms / 硬超时 100ms),超时落兜底,最后统一汇到”出还是不出”。
6.1 延迟预算
DSP 侧一份典型的 RTA 契约会把时间切成几档:
| 阶段 | 预算 | 行为 |
|---|---|---|
| 缓存命中 | ~5 ms | 返回缓存决策,整段跳过实时 RTA 调用 |
| 实时 RTA 调用(软超时) | ≤ 50 ms | 常态下广告主的 RTA 服务必须在这里作答 |
| 硬超时 | 100 ms | 再晚一律丢弃,兜底策略接管 |
如果 RTA 服务在硬超时内答不上来,响应就被丢掉——越过那条边界之后发生的一切,都不属于这次拍卖。
这把广告主的 RTA 服务直接放进了和 bidder 本身同一个延迟等级。RTA 的峰值 QPS ≈ DSP 对该广告主各广告的峰值竞价请求 QPS——对一个认真投放的广告主,轻松就是几十万 QPS,上面还叠着日内波动与事件驱动的尖峰。
一句话:从第一天起就把 RTA 端点当作 tier-zero 服务对待——它的可用性和尾延迟,直接等价于实时的花费与丢量。
6.2 兜底策略:default-allow vs default-deny
当 RTA 服务超时或报错,DSP 套用一个事先约定的兜底。业内对同样的两个选择有好几种叫法:
| 模式 | RTA 失败时的行为 | 适合谁 |
|---|---|---|
| YES 模式(default-allow / fail-open) | 把缺失的答案当作 should_bid: true | 最怕丢量的广告主 |
| NO 模式(default-deny / fail-closed) | 把缺失的答案当作 should_bid: false | 最怕白花钱的广告主 |
这个选择不是理论问题。它直接决定了你的 RTA 服务在 p99 上需要多宽容——以及你这侧 1% 的错误率,究竟是个小毛刺,还是一处大的花费泄漏。
在广告与隐私系统里,fail-closed 通常是更安全的默认:宁可少投一点,也不要在系统抖动时对本该屏蔽的人群放量。这与冷启动里”信号缺失时该保守还是激进”是同一类取舍。
6.3 缓存策略
对那些在短窗口内产生大量竞价请求的用户(重度移动 App 用户是最典型的一类),每个请求都跑一次全新的 RTA 调用,会同时浪费两侧的容量。DSP 通常支持分级缓存:
| TTL | 用例 |
|---|---|
| 不缓存(实时) | 时效敏感的决策——“这个用户刚弃购,接下来 30 分钟激进出价” |
| 1 小时 | 最常见的默认——在新鲜度和成本之间平衡 |
| 24 小时 | 稳定的人群级决策——“这个用户今天已经转化了,当天别再出价” |
广告主按广告或按信号挑 TTL,响应本身也可带一个 ttl_seconds 提示,动态驱动缓存寿命。这一分级配错,是 RTA 部署悄悄跑不出效果的最常见方式——典型表现是:给几小时前就已转化的用户,继续命中那条过期的”yes”缓存决策,一路超花。
算一笔账:缓存命中率如何决定你的容量与成本
缓存不是”锦上添花”,它直接定了 RTA 服务的容量需求和这次部署的单位经济。设某广告主峰值 200k QPS 的竞价请求打到 RTA 过滤层,每次实时 RTA 调用的全成本(计算 + 下游特征查询)约 $0.02 / 千次:
| 缓存命中率 | 实时调用 QPS | 需要扛的实时容量 | 实时调用日成本 |
|---|---|---|---|
| 0%(不缓存) | 200k | 200k | ~$345k |
| 50% | 100k | 100k | ~$173k |
| 90%(1h TTL 常见档) | 20k | 20k | ~$35k |
| 99%(24h TTL 稳定人群) | 2k | 2k | ~$3.5k |
从 90% 提到 99% 命中率,把实时容量需求砍掉 10 倍——这就是为什么”缓存分级”是 RTA 的第一性设计,而不是事后优化。
但命中率不能无脑往上推:TTL 越长,决策越陈旧、错误出价越多。把两侧成本放进同一个式子,最优 TTL 就是让”省下的调用成本”与”陈旧决策的花费泄漏”边际相等的那一点:
调用成本随 TTL 下降,陈旧泄漏随 TTL 上升;最优 TTL 就在总成本曲线的最低点——实务上不必真去解方程,但方向铁定:翻转越快的信号,TTL 越短。
其中 是”用户状态在 TTL 窗口内翻转”(如已转化、已流失)的概率,随 单调上升。实务上没人去解析地解它——但这个式子点明了那条铁律:状态变得越快的信号,TTL 必须越短。“刚弃购”这类分钟级翻转的信号就该走不缓存;“今天已转化”这类按天稳定的信号才配 24h TTL。把高翻转信号配上长 TTL,正是上一段那条”过期 yes 缓存”花费泄漏的数学根源。
6.4 多租户隔离
一套生产级 RTA 部署,很少是”每个广告主一个端点”。不同产品线、广告、业务单元通常在隔离的子账户上跑各自独立的 RTA 策略,每个都有自己的:
- 定向逻辑与逐用户状态模型;
- 缓存 TTL 策略;
- 兜底模式;
- 限流与配额预算。
DSP 侧的路由必须足够细粒度,好让一个产品团队的糟糕发布不会毒到另一个团队的流量。这通常把广告主这侧推向一个更像内部 RTA 平台而非单一服务的东西:路由层、逐租户限流、冷热策略之间的隔离,以及一个让产品团队自助配置的控制面。
6.5 可观测性与失效模式
生产里至少要盯的指标:
- RTA QPS(按子账户拆)——量级和你以为在跑的那条广告对得上吗?
- p50 / p99 / p999 延迟——这里只要冒头,你在 DSP 开始大规模超时之前只有几分钟反应时间。
- 缓存命中率——这里下跌,信号是人群流失或缓存分级配置错误。
- 兜底率——每一次兜底触发都可能是一次错误出价,稳态下应跑在 < 0.1%。
should_bid: true率(按档位拆)——突变往往是上游模型漂移或特征仓回归。- 下游转化率(按
reason_code/ 档位拆)——验证你的档位信号是否真如你所想。
几个值得在它们发生之前就知道的常见失效模式:
- 级联超时:一个慢的上游依赖(推荐器、特征仓)把 RTA p99 拖出预算。兜底率飙升,花费形态悄悄改变,直到财务对账才有人注意到。
- 模型推送后的缓存陈旧:部署了新定向模型,旧缓存决策却在 TTL 过期前一直有效。要么规划显式缓存失效,要么在切换期间激进地缩短 TTL。
- 标识覆盖缺口:不是每个竞价请求都带着你 RTA 服务期望的那个标识(旧设备上 GAID 覆盖不均,iOS IDFA 在 ATT 后覆盖坍塌;端上承载见 App 广告 SDK)。预先决定怎么处理未知用户——通常是一个确定性的、人群级的默认值。
- 子账户配置错误:一条新广告上线却指向了错的 RTA 逻辑;花费在总量上看着正常,特定人群的转化却崩了。用逐子账户的转化监控来抓。
7. 什么场景下 RTA 最发光:垂直行业用例
只要广告主握着 DSP 根本拿不到的状态,这个模式就发光:
- 游戏:停止对已装机用户出价(拉新已完成);激进定向”已注册但未付费”的用户(转化触手可及);在拉新广告里压制重度付费用户(已经是客户,别再骚扰)。
- 电商:对”加了购物车却没结账”的用户推折扣素材(意图 + 价格敏感双信号);对会员浮出 VIP 专属广告;压制刚收到”履约延迟”邮件的用户(这是个糟糕的时机去劝他再买一次)。
- 金融:向预批用户推贷款产品(合规 + 转化对齐);对已申请(或被拒)的用户压制重复广告;用品类激励去激活沉睡卡用户。
- 教育:用社会证明素材召回”试用但未报名”的用户(他们喜欢,只差临门一脚);向结课用户向上销售进阶课程(漏斗里 LTV 最高的人群)。
这些场景的共同形状是:广告主维护着一台逐用户的状态机(匿名 → 试用 → 付费 → 流失 → 召回),DSP 对它零可见,而它几乎决定了此刻”正确的营销动作”的一切。RTA 做的,就是让这台状态机在不暴露自身的前提下,实时驱动 DSP 的每一次出价。
8. 上线 RTA 前的前提清单
RTA 不是一个一拨就开的开关。动手之前,至少要备齐这几样:
- 数据底座:一个 CDP、DMP,或一个像样的 CRM,能把逐用户状态放进低于 100ms 可读的存储里。实时 KV 存储(Aerospike、Redis、ScyllaDB)是典型底层。
- 工程能力:你在造一个要在几十万 QPS 下守住尾延迟的服务,这不是单台 VM 上的业余项目。
- 运维成熟度:RTA 需要和 tier-zero 对客服务同等的事故响应、容量规划与 on-call 纪律。它宕机是在实时地花真金白银——服务降级的每一秒,兜底策略都在替你悄悄超花或跳过预算。
- 策略清晰度:RTA 是把利器。拉新 vs 留存 vs 防流失是不同的 RTA 策略;没有一个清晰的”这个 RTA 是用来干什么的”就上,通常白费功夫。
- 预算规模:RTA 的部署与持续运维要花真钱。媒体花费高时回本很快,但在小预算下不值得投。
9. 走向何处:以第一方数据为默认的程序化栈
宏观图景很清楚:第三方 cookie 正在死去,IDFA 覆盖在 ATT 后早已坍塌,隐私监管(GDPR、CPRA 及跟在后面的一波)持续收紧。那个粗粒度、靠”信任平台”的程序化定向时代,正在关上门。
接下来的,是一个以第一方数据为默认搭建起来的程序化栈——而 RTA 是我们手上最干净的工程模式:让那份数据在永不跨越边界的前提下,去影响平台侧的出价。广告主留住决策逻辑,DSP 留住曝光,用户的数据待在它该待的地方。
不是每个广告主明天就需要 RTA。但每个程序化工程师都该理解这个模式——因为接下来十年的 AdTech,会建在它的各种变体之上。
10. 常见误解 ↔ 正解
这一节专治 RTA 最容易被想歪的地方——也是面试和对接时最常翻车的点:
| 常见误解 | 正解 |
|---|---|
| RTA 是 OpenRTB 的一部分 | 不是。它是 DSP ↔ 广告主的私有契约,跑在 OpenRTB 出价响应落定之前 |
| RTA 要把用户数据发给 DSP | 恰恰相反:请求里不含 PII,广告主只回一个决策——“共享决策而非共享数据” |
| RTA 只能”出 / 不出” | 还能带 tier / bid_multiplier,从硬过滤升级成软打分、做差异化出价 |
| 只要缓存命中率越高越好 | 命中率高省成本,但 TTL 越长决策越陈旧;高翻转信号配长 TTL 会持续超花 |
| fail-open 更安全 | 广告与隐私系统里 fail-closed 通常更安全——宁可少投,别在抖动时对屏蔽人群放量 |
| RTA 服务是个后台旁路,挂了没关系 | 它是 tier-zero:峰值 QPS ≈ 竞价峰值 QPS,降级每一秒都在实时超花或丢量 |
| 上了 RTA 就能省钱 | 部署与运维要花真钱,只有在媒体花费足够大时才回本,小预算不值得 |
| 一套 RTA 端点服务所有广告 | 生产里是多租户平台:逐子账户的定向 / TTL / 兜底 / 限流都要隔离 |
11. 速查表
把全篇压成随手可查的几条:
- RTA = 竞价前过滤器:DSP ↔ 广告主私有契约,不属于 OpenRTB,跑在出价响应落定之前。
- 只问一个问题:“这个用户、这条广告,出不出价?“答案最多附带
tier/bid_multiplier。 - 请求里不含 PII:DSP 给不透明
user_id+ 上下文,广告主在自己侧查第一方状态作答。 - 延迟分三档:缓存命中 ~5ms、软超时 ≤ 50ms、硬超时 100ms;超过就丢、兜底接管。
- 两个核心旋钮:缓存 TTL(不缓存 / 1h / 24h)与兜底模式(fail-open vs fail-closed)。
- fail-open 怕白花钱、fail-closed 怕丢量:按广告主最怕什么来选,隐私系统多默认 fail-closed。
- 缓存是第一性设计:90% → 99% 命中率砍掉 10 倍容量;但状态翻转越快的信号 TTL 越短。
- 把 RTA 端点当 tier-zero:峰值 QPS ≈ DSP 对你各广告的峰值竞价 QPS。
- 盯六个指标:QPS、p50/p99/p999、缓存命中率、兜底率、
should_bid率(按档位)、下游转化率(按 reason_code)。 - 常见坑:级联超时、模型推送后缓存陈旧、标识覆盖缺口、子账户配置错误。
延伸阅读
先看同系列里和本篇相邻的几篇:
- 程序化广告生态全景:RTA 嵌入的那条 DSP / SSP / Ad Exchange 链路的全貌。
- 程序化交易模式:RTB / PMP / PD / PDB:RTA 常叠加在 RTB 公开竞价上,效果买家在这里挑性价比。
- Header Bidding:Prebid.js vs Prebid Server:定义了 RTA 必须在其中运作的 OpenRTB 延迟预算。
- IAB TCF 与 GPP:GDPR / CPRA 同意与 fail-closed 默认——RTA 兜底策略的上游约束。
- App 广告 SDK 深挖:IDFA / ATT / 标识覆盖在端上的承载,§6.5 标识缺口的底座。
- 冷启动:每一层的同一个问题:“现在就得决策”的同源处境,以及 fail-open / fail-closed 的取舍。
再是一手资料:
- IAB Tech Lab. OpenRTB 2.6 Specification:定义了 RTA 必须在其中运作的竞价协议与延迟预算。
- Aerospike. Real-Time Bidding reference architecture:RTA 这类亚毫秒级逐用户状态查询的典型底层存储。
- Apple Developer. App Tracking Transparency:IDFA 覆盖坍塌、推动第一方数据范式的源头。
附录:术语表
- RTA(Real-Time API):DSP 在竞价请求时刻向广告主发起的实时查询,问”该不该对这个用户出价”;跑在 OpenRTB 出价响应落定之前。
- OpenRTB:IAB 定义的实时竞价标准协议;RTA 紧贴其上,但不属于它。
- DSP / SSP / Ad Exchange:程序化广告生态里买方引擎 / 卖方引擎 / 撮合市场三个核心角色。
- DPA(Dynamic Product Ads,动态商品广告):按用户行为动态选品、渲染素材的广告形式,与 RTA 结合可做商品级 1:1 个性化。
- 第一方数据 / PII:广告主自有的用户数据 / 个人可识别信息;RTA 的核心价值就是用前者而不外泄后者。
- fail-open / fail-closed(default-allow / default-deny):信号缺失时的默认行为——放行 / 拒绝。
- TTL(Time To Live):缓存决策的有效寿命;状态翻转越快的信号 TTL 越短。
- GAID / IDFA:Android / iOS 广告标识符;iOS ATT 之后 IDFA 覆盖率大幅下降。
- ATT(App Tracking Transparency):Apple 的应用追踪透明度框架,要求 App 取得授权才能访问 IDFA。
- GDPR / CPRA:欧盟 / 加州的数据隐私法规,RTA 兜底策略与合规约束的上游。
- Aerospike / Redis / ScyllaDB:AdTech 常用的低延迟 KV 存储,用于逐用户状态查询。
- CDP / DMP / CRM:客户数据平台 / 数据管理平台 / 客户关系管理系统,RTA 的数据底座选项。
- p50 / p99 / p999:延迟分位数;尾延迟(p99 / p999)是 RTA 服务的生命线。
- tier-zero 服务:可用性要求最高的一类服务,宕机直接造成实时收入损失。
- bid shading / win rate:一价拍卖的压价算法 / DSP 出价竞胜的比例。