了解出价和竞价服务的竞价架构
概览
出价和竞价 (B&A) 服务为广告买方和卖方提供了一组在可信执行环境 (TEE) 中运行的服务,以促成 Protected Audience (PA) 竞价。本页面介绍了 B&A 可在 PA 竞价中使用的各种竞价配置。
定义
| 术语 | 说明 |
|---|---|
| Protected Audience 竞价 | 涉及跨网站数据的广告竞价 |
| 内容相关竞价 | 不涉及跨网站数据的广告竞价。此竞价遵循现有的实时出价 (RTB) 竞价流程。 |
| 统一竞价请求 | 由卖家的 JavaScript 代码从浏览器发送的请求,其中包含 Protected Audience 竞价和内容相关广告竞价的载荷。 |
| 卖方广告服务 (SAS) | 负责处理来自浏览器的统一竞价请求的服务。这可能是卖方现有的 RTB 广告服务器。SAS 负责编排内容相关竞价和 Protected Audience 竞价。 |
| 买方广告服务 | 负责提交内容相关竞价出价的服务。这可能是买方现有的 ORTB 广告服务器。 |
面向买家和卖家的服务
B&A 服务包含面向买家和卖家的四项服务:
- 对于买方,可以使用出价服务和买方前端 (BFE) 服务。
- 对于卖家,可以使用竞价服务和卖家前端 (SFE) 服务。
| 参加者 | 服务 | 说明 |
|---|---|---|
| 采购员 | 买方前端 (BFE) 服务 | 该服务处理来自卖方 SFE 的 GetBids 请求。它负责解密载荷、提取 K/V 信号,并调用 Bidding Service 的 GenerateBids。 |
| 出价服务 | 该服务处理来自 BFE 的 GenerateBids 请求。它负责运行买方的出价逻辑并生成出价。 |
|
| 卖家 | 卖家前端 (SFE) 服务 | 该服务处理来自卖方广告服务的 SelectAd 请求。它负责解密载荷、调用 BFE 的 GetBids 操作、提取 K/V 信号、调用 Auction Service 的 ScoreAd 操作,然后将加密的 B&A 竞价结果返回给 SAS。
如果服务是由服务器编排的多卖方竞价中顶级卖方堆栈的一部分,则该服务还会处理来自 SAS 的 |
| 竞价服务 | 该服务处理来自 SFE 的 ScoreAd 请求。它负责运行卖方的评分逻辑,并提供出价的理想度得分。 |
面向 Web 的 PA B&A 竞价的架构
下图描述了使用 B&A 服务的 Protected Audience 基本竞价流程,其中包含一个卖家和一个买家。粗红色框表示在 TEE 中运行的服务:
- 发布商网页上的 SSP JavaScript 代码通过调用
navigator.getInterestGroupAdAuctionData()生成加密的 B&A 广告竞价数据。- 此加密载荷包含买方数据,只能在 TEE 中的 SFE 内解密。
- SSP JavaScript 代码会向卖方广告服务发送统一竞价请求。
- 统一竞价请求同时包含纯文本 ORTB 内容相关竞价载荷和加密的 B&A 竞价载荷。
- 卖方广告服务是您现有的广告服务器,不在 TEE 中运行。
- 卖方广告服务会调用 DSP 的 RTB 服务,以请求内容相关竞价和要传递到后续 PA 竞价中的任何买方信号。
- 在此步骤中,买方可以表明其参与 PA 竞价的意向。
- 在上下文竞价完成后,SAS 会向 SFE 服务发送
SelectAd请求。- 将情境竞价胜出出价和买方信号添加到
SelectAd请求载荷中。
- 将情境竞价胜出出价和买方信号添加到
- SSP 的 SFE 服务使用
GetBids请求调用 DSP 的 BFE 服务。 - DSP 的 BFE 使用
GenerateBids请求调用出价服务。 - SFE 收到出价后,会向竞价服务发出
ScoreAd调用。- 系统会将具有最高期望值得分的出价返回给 SAS,然后将其转发给网页上的 JavaScript 代码。
- 通过将加密的 B&A 竞价结果传递到
navigator.runAdAuction()调用中,在浏览器中完成竞价。
竞价配置
您可以按以下方式配置使用 B&A 服务的 Protected Audience 竞价:
- 面向 B&A 买家的单卖家竞价
- 混合模式竞价,包含设备端买方和 B&A 买方
- 可由设备或服务器编排的多卖方竞价
参与者
为了描述每种竞价配置,本指南中使用了以下参与者:
| 参加者 | 说明 |
|---|---|
DSP-A |
设备端买家 |
DSP-B |
设备端买家 |
DSP-X |
B&A 买家 |
DSP-Y |
B&A 买家 |
SSP-TOP |
顶级卖家 |
SSP-OD |
仅限设备上的卖家 |
SSP-BA |
仅使用 B&A 的卖家 |
SSP-MIX |
混合模式卖家 |
有 4 个 DSP:
DSP-A和DSP-B仅参与设备端竞价DSP-X和DSP-Y同时参与设备端竞价和 B&A 竞价
有 4 个 SSP,每个卖方都运行不同的竞价配置:
SSP-OD仅运行设备端竞价SSP-BA仅运行 B&A 竞价SSP-MIX运行混合模式竞价SSP-TOP运行多卖家竞价:SSP-OD/BA/MIX作为SSP-TOP的多卖家竞价的组件卖家参与竞价
单卖家 B&A 竞价
在单卖家设置中,一个卖家会举办竞价,多个买家参与竞价。如果卖家进行的是 B&A 竞价,买方必须运行 B&A 服务的买方堆栈,才能向竞价提交出价。买方和卖方无需使用同一云服务提供商。
在上述设置中,SSP-BA 运行 B&A 竞价,DSP-X 和 DSP-Y 使用 B&A 服务的买方堆栈参与竞价。卖方的广告服务先针对 DSP-X 和 DSP-Y 运行内容相关竞价,然后通过向卖方的 SFE 服务发送 SelectAd 请求来运行 Protected Audience 竞价。情境竞价胜出的出价和每个买方的信号会传递到 SelectAd 调用中。然后,SFE 服务会向 DSP-X 和 DSP-Y 的 BFE 发送 GetBids 请求,这些 BFE 将调用其出价服务来生成出价。
加密的 B&A 竞价结果会返回给客户端,并传递到 runAdAuction() 调用中。单卖方竞价配置如下所示:
await navigator.runAdAuction({
seller: 'https://ssp-ba.example',
requestId: 'g8312cb2-da2d-4e9b-80e6-e13dec2a581c',
serverResponse: Uint8Array(560) [193, 120, 4, …] // Encrypted B&A auction result
})
requestId 值来自客户端上的 getInterestGroupAdAuctionData() 调用,而 serverResponse 数据来自服务器端 B&A 竞价。
混合模式竞价
在混合模式配置中,买方可以通过设备端或 B&A 参与卖方的竞价。蓝箭头表示设备端竞价路径,红箭头表示 B&A 竞价路径:
在此设置中,DSP-A 和 DSP-B 是在设备上提交出价的买方,而 DSP-X 和 DSP-Y 是使用 B&A 提交出价的买方。设备端买方在浏览器中参与设备端 PA 竞价,而 B&A 买方参与单卖方竞价部分中所述的 B&A 竞价设置。
系统会先针对所有买方执行情境竞价,以收集情境竞价的胜出出价和买方信号。然后,B&A 竞价会运行,并且内容相关竞价中的买方信号会传递到发送给 SFE 的 SelectAd 请求中。从 SFE 返回的加密 B&A 竞价结果会转发到浏览器。在 B&A 竞价结束后,其结果会馈送到设备端竞价中,供设备端买方参与。
混合模式的单卖方竞价配置(针对竞价的设备端部分)类似于以下内容:
await navigator.runAdAuction({
seller: 'https://ssp-mix.example',
decisionLogicURL: 'https://ssp-ba.example/score-ad.js',
componentAuctions: [
// B&A auction
{
seller: 'https://ssp-mix.example',
requestId: 'f5135cb2-da2d-4e9b-80e6-e13dec2a581c',
serverResponse: Uint8Array(560) [133, 20, 14, …]
},
// On-device auction
{
seller: 'https://ssp-mix.example',
interestGroupBuyers: ['https://dsp-a.example', 'https://dsp-b.example'],
decisionLogicURL: 'https://ssp-mix.example/on-device-score-ad.js',
}
]
})
并行处理设备端竞价和 B&A 竞价
如果不进行并行化,竞价会按顺序执行,即先运行内容相关竞价,然后运行 B&A 竞价,最后运行设备端竞价。实现并行化后,系统会再次先运行内容相关广告竞价,但其结果和信号会流式传输回客户端,以便在 B&A 竞价结束之前并行启动设备端竞价。
客户端中的 JavaScript 代码将统一竞价请求发送到 SAS,然后 SAS 启动情境竞价和 PA B&A 竞价。当 SAS 从买方的 RTB 服务器收到响应时,买方针对设备端竞价的信号可以流式传输回浏览器,同时,一旦收到所有出价,上下文竞价胜出者也会流式传输回浏览器。系统会使用流式买方信号在设备上生成出价,并在对出价进行评分时将情境竞价胜出者用作最低出价。
在 SAS 中,卖家会生成一个 UUID nonce,在将情境竞价数据流式传输到浏览器时,该 nonce 会设置在 Ad-Auction-Result-Nonce 响应标头中。在针对 B&A 竞价向 SFE 发出的 SelectAd 调用中使用了相同的 nonce,并且该 nonce 包含在 SFE 返回的 SelectAd 响应中。在客户端竞价阶段,浏览器会验证 Ad-Auction-Result-Nonce 响应标头中的随机数是否与加密的竞价结果载荷中的随机数一致。
如需详细了解混合模式并行化,请参阅说明。
多卖家竞价
您可以通过以下两种方式运行包含 B&A 的 PA 多卖方竞价:
- 由设备编排的竞价,其中对每个组件卖家的广告服务的调用源自浏览器
- 由服务器编排的竞价,其中对每个组件卖方的广告服务的调用都源自顶级卖方的广告服务
由设备编排的多卖家竞价
在由设备编排的多卖家竞价中,每个组成部分卖家都可以自由选择竞价配置。设备端销售人员、B&A 销售人员和混合模式销售人员都可以参与顶级竞价。
在此图中,SSP-TOP 运行由服务器编排的多卖家竞价,SSP-BA-X 和 SSP-BA-Y 参与其中。
浏览器会向顶级卖方的广告服务发送一个包含所有参与者的情境竞价和 PA 竞价载荷的统一竞价请求。然后,SAS 会使用载荷向 SFE 发出 GetComponentAuctionCiphertexts 调用。SFE 将解密载荷,按每个组件卖方分离载荷,并将重新加密的载荷返回给顶级卖方的 SAS。
GetComponentAuctionCiphertexts 请求和响应的 proto 定义如下:
// Request sent from the top-level seller's ad service to SFE
message GetComponentAuctionCiphertextsRequest {
bytes protected_auction_ciphertext = 1; // Generated in the browser
repeated string component_sellers = 2; // The list of all component sellers
}
// Response returned from SFE to the top-level seller's ad service
message GetComponentAuctionCiphertextsResponse {
// A map of component sellers and their re-encrypted payloads
map<string, bytes> seller_component_ciphertexts = 1;
}
对于每个组件卖方的载荷,顶级卖方的 SAS 会调用组件卖方的 SAS,并且每个组件 SAS 都会执行其组件 B&A 竞价。然后,组件竞价的结果会返回给顶级卖方的 SFE,并且组件竞价的出价会由顶级卖方的竞价服务进行评分。系统会将具有最高期望得分的出价返回给 SFE,并将该加密的载荷发送给 SAS,以便返回给客户端。在浏览器中,顶级卖方通过调用 navigator.runAdAuction() 并提供加密的服务器竞价结果载荷来完成竞价。
后续步骤
阅读本指南后,您可以执行以下后续步骤:
了解详情
- 如需深入了解 Protected Audience 的 B&A 功能,请参阅 GitHub 上的以下说明:
- 按照端到端本地测试 Codelab 的说明,通过 B&A 实验 Protected Audience。
- 如需了解卖家集成,请参阅以卖家的身份与 B&A 集成。
有疑问?
- 如需咨询有关出价和竞价服务的问题,请在 B&A 服务代码库中提交问题。