了解出价和竞价服务的竞价架构
概览
出价和竞价 (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 请求。它负责运行卖方的评分逻辑,并提供出价的吸引力得分。 |
适用于网站的 PA B&A 竞价架构
下图描述了包含单个卖方和单个买方的 B&A 服务的基本 Protected Audience 竞价。红色粗轮廓框代表在 TEE 中运行的服务:
(全尺寸图表)
- 发布商页面上的 SSP JavaScript 代码会通过调用
navigator.getInterestGroupAdAuctionData()
生成加密的 B&A 广告竞价数据。- 此加密载荷包含买方的数据,只能在 TEE 中的 SFE 内解密。
- SSP JavaScript 代码向卖方广告服务发送统一竞价请求。
- 统一竞价请求同时包含明文 ORTB 内容相关广告竞价载荷和加密的 B&A 竞价载荷。
- 卖方广告服务是您现有的广告服务器,不会在 TEE 中运行。
- 卖方广告服务会调用 DSP 的实时出价服务,以请求将内容相关竞价出价和任何买方信号传递到后续的 PA 竞价。
- 买方可以在此步骤中表明其有意参与 PA 竞价。
- 内容相关竞价完成后,SAS 会将
SelectAd
请求发送到 SFE 服务。- 情境竞价胜出出价和买方信号会添加到
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 |
仅面向企业和组织的卖家 |
SSP-MIX |
混合模式卖家 |
有四个 DSP:
DSP-A
和DSP-B
仅参与设备端竞价DSP-X
和DSP-Y
同时参与设备端竞价和 B&A 竞价
有四个 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
请求,后者会调用其出价服务来生成出价。
系统会将经过加密的 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,并将其设置在 Ad-Auction-Result-Nonce
响应标头中。在对 SFE 进行 B&A 竞价的 SelectAd
调用中,使用了相同的 Nonce,并且该 Nonce 会包含在 SFE 返回的 SelectAd
响应中。在客户端竞价阶段,浏览器会验证 Ad-Auction-Result-Nonce
响应标头中的 Nonce 是否与加密竞价结果载荷中的 Nonce 匹配。
如需详细了解混合模式并行处理,请参阅说明文档。
多卖家竞价
您可以通过以下两种方式使用 B&A 运行 PA 多卖方竞价:
- 设备协调的竞价,其中对每个组件卖方的广告服务的调用都来自浏览器
- 服务器协调的竞价,其中对每个组件卖方的广告服务的调用都来自顶级卖方的广告服务
设备协调的多卖家竞价
在设备协调的多卖方竞价中,每个组件卖方都可以自由地按照自己选择的配置运行竞价。设备端卖方、B&A 卖方和混合模式卖方都可以参与顶级竞价。
(全尺寸图表)
在此设置中,SSP-TOP
(顶级卖家)会运行一个多卖家竞价,SSP-OD
、SSP-BA
和 SSP-MIX
会参与该竞价:
SSP-OD
运行仅限设备端的 PA 竞价,并将其设备端组件竞价配置提交给顶级卖方。SSP-BA
负责运行 B&A 竞价,会向其卖方广告服务发送统一竞价请求,并运行自己的内容相关广告和 B&A 竞价。结果会提交给顶级卖方。SSP-MIX
负责运行混合模式竞价,会先在服务器上执行 B&A 竞价,然后提交 B&A 竞价结果和设备端竞价配置。
顶级卖方会从每个卖方收集组件竞价配置,并构建一个类似于以下内容的竞价配置:
await navigator.runAdAuction({
seller: 'https://ssp-top.example',
decisionLogicURL: 'https://ssp-top.example/score-ad.js',
componentAuctions: [
// SSP-BA's B&A-only auction
{
seller: 'https://ssp-ba.example',
requestId: 'g8312cb2-da2d-4e9b-80e6-e13dec2a581c',
serverResponse: Uint8Array(560) [193, 120, 4, …] // Encrypted B&A auction result
},
// SSP-MIX's B&A auction of mixed-mode
{
seller: 'https://ssp-mix.example',
requestId: 'f5135cb2-da2d-4e9b-80e6-e13dec2a581c',
serverResponse: Uint8Array(560) [133, 20, 4, …] // Encrypted B&A auction result
}.
// SSP-MIX's on-device auction of mixed-mode
{
seller: 'https://ssp-mix.example',
interestGroupBuyers: ['https://dsp-a.example', 'https://dsp-b.example'],
decisionLogicURL: 'https://ssp-mix.example/score-ad.js',
}
// SSP-OD's on-device auction
{
seller: 'https://ssp-od.example',
interestGroupBuyers: ['https://dsp-a.example', 'https://dsp-b.example'],
decisionLogicURL: 'https://ssp-od.example/score-ad.js',
}
]
})
服务器协调的多卖家竞价
在服务器协调的多卖方竞价中,对组件卖方的广告服务的调用是从顶级卖方的广告服务进行的。在这种设置下,组件卖方无法运行设备端竞价或混合模式竞价;所有卖方都必须使用 B&A,所有买方都必须使用 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 服务代码库中打开一个问题。
- 如需询问有关 Privacy Sandbox 的一般性问题,请在 privacy-sandbox-dev-support 代码库中打开问题 。