在本機測試網頁端對端的 B&A

1. 簡介

出價和競價服務 (B&A) 包含 4 項服務,可協助買方和賣方進行 Protected Audience 競價:

買方技術堆疊:

  • 買家前端服務
  • 出價服務

賣方堆疊:

  • 賣家前端服務
  • 競價服務

本程式碼研究室將引導您在本機環境中設定及測試端對端設定。不含初始服務建構時間,逐步解說預計約需 1 小時。

即使您只處理買方或賣方程式碼,在本地環境中設定端對端流程,有助於瞭解買方和賣方堆疊如何相互運作。設定這兩個堆疊後,日後與其他方的買方或賣方堆疊整合時,您會更有信心。在本機測試服務也能節省開發成本。

在本程式碼研究室中,我們將使用 B&A Local Testing App 做為逐步導覽的輔助工具。

這款隨附的本機測試應用程式會代管 B&A 競價中使用的各種買家和賣家資源。應用程式也會在 http://localhost:3000 提供 UI,方便您模擬各種競價設定。

2. 環境設定

2.1 準備 Linux 電腦

使用本機 Linux 機器,或佈建所選雲端服務供應商的 Linux VM。為縮短建構時間,建議至少使用 16 個核心,最好是 32 個以上。

請注意,我們會從這部機器的 http://localhost:3000 載入 HTML 網頁。如果 VM 未提供 GUI,請確認本機可存取通訊埠 3000,以便連線至該通訊埠。

2.2 安裝 Docker

我們使用 Docker 執行服務和本機測試應用程式。

我們會使用便利指令碼在測試環境中安裝 Docker。

# Install Docker
> curl -fsSL https://get.docker.com -o get-docker.sh
> sudo sh get-docker.sh

# Set up sudo-less Docker
> sudo groupadd docker
> sudo usermod -aG docker $USER
> newgrp docker

# Test
> docker run hello-world

警告:如果設定時不使用 sudo,Docker 群組會授予使用者根層級的權限。詳情請參閱免用 sudo 的 Docker 指南。

2.3 啟動隨附的本機測試應用程式

隨附應用程式提供模擬出價或評分指令碼,以及模擬 K/V BYOS 端點等資源。請先啟動應用程式,再執行 B&A 服務,這樣資源才能載入服務。

拉下 Local Testing App 存放區

git clone https://github.com/privacysandbox/bidding-auction-local-testing-app.git

從存放區的根目錄執行設定指令碼

./setup

設定指令碼會建立 ba-dev Docker 網路、產生 SSL 憑證,並建構測試應用程式映像檔。

建構成功後,請執行啟動指令碼

./start

3. 在本機建構及執行 B&A

3.1 下拉 B&A 服務

我們會在同一部機器上執行兩組 B&A 服務,因此會將存放區拉到兩個不同的資料夾。

設定 A:

下拉 B&A 存放區:

git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-a

設定 B

下拉 B&A 存放區:

git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-b
`

3.2 建構服務

在每個 B&A 資料夾的根資料夾中,執行下列指令來建構所有 4 項服務:

production/packaging/build_and_test_all_in_docker \
  --service-path bidding_service \
  --service-path auction_service \
  --service-path buyer_frontend_service \
  --service-path seller_frontend_service \
  --platform gcp \
  --instance local \
  --no-precommit \
  --no-tests \
  --build-flavor non_prod \
  --gcp-skip-image-upload

這個指令會為所有 4 項服務,建構 Google Cloud (gcp) 的開發版本 (non_prod) local 例項。如有需要,請將 --platform 標記更新為所選雲端服務供應商。如要進一步瞭解建構標記,請參閱 build_and_test_all_docker 檔案

如果使用 64 核心的機器,初始建構作業可能需要 2 小時,建構時間會依核心數量線性調整。如果使用 32 核心的電腦,可能需要 4 小時。如果使用 16 核心的電腦,可能需要 8 小時。

請注意,後續建構作業會使用快取,每次建構作業應會耗時約 5 到 20 分鐘。

相關 xkcd 漫畫

兩名程式設計師在辦公室偷懶。經理要求他們回去工作,但員工表示程式碼正在編譯,經理也同意。這部漫畫的作者認為,這是正當的偷懶藉口。 兩位程式設計師在建構執行期間偷懶。

(撰寫本程式碼研究室時,我遇到了 xkcd 的 Randall Munroe,並告訴他我在這裡新增了這則漫畫)

3.3 執行服務

在測試中,我們會執行 8 項服務 (每個堆疊 4 項服務)。每個指令都設定為使用 Local Testing App 提供的資源。強烈建議使用視窗管理工具,例如 tmux

開啟至少 8 個額外的終端機視窗,並在每個工作階段中執行下列指令。

請注意,競價和評分指令碼會由應用程式提供,因此本機測試應用程式伺服器必須已在個別程序中執行。

3.3.1 設定 A 指令

服務

指令

DSP-X出價服務

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.101 --network=ba-dev" \

BIDDING_JS_URL=https://192.168.84.100:5003/generate-bid.js \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bidding

DSP-X BFE 服務

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.102 --network=ba-dev" \

BUYER_KV_SERVER_ADDR=https://192.168.84.100:5003/kv \

BIDDING_SERVER_ADDR=192.168.84.101:50057 \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bfe

SSP-BA 競價服務

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.103 --network=ba-dev" \

AUCTION_JS_URL="https://192.168.84.100:6002/score-ad.js" \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_auction

SSP-BA SFE 服務

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.104 --network=ba-dev" \

SELLER_ORIGIN_DOMAIN="https://localhost:6002" \

AUCTION_SERVER_ADDR="192.168.84.103:50061" \

KEY_VALUE_SIGNALS_ADDR="https://192.168.84.100:6002/kv" \

BUYER_SERVER_ADDRS_JSON='{"https://localhost:5003":{"url":"192.168.84.102:50051","cloudPlatform":"LOCAL"},"https://localhost:5004":{"url":"192.168.84.202:50051","cloudPlatform":"LOCAL"}}' \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_sfe

3.3.2 設定 B 指令

服務

指令

DSP-Y出價服務

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.201 --network=ba-dev" \

BIDDING_JS_URL=https://192.168.84.100:5004/generate-bid.js \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bidding

DSP-Y BFE 服務

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.202 --network=ba-dev" \

BUYER_KV_SERVER_ADDR=https://192.168.84.100:5004/kv \

BIDDING_SERVER_ADDR=192.168.84.201:50057 \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bfe

SSP-BA 競價服務

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.203 --network=ba-dev" \

AUCTION_JS_URL="https://192.168.84.100:6003/score-ad.js" \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_auction

SSP-BA SFE 服務

DOCKER_RUN_ARGS_STRING="--ip=192.168.84.204 --network=ba-dev" \

SELLER_ORIGIN_DOMAIN="https://localhost:6003" \

AUCTION_SERVER_ADDR="192.168.84.203:50061" \

KEY_VALUE_SIGNALS_ADDR="https://192.168.84.100:6003/kv" \

BUYER_SERVER_ADDRS_JSON='{"https://localhost:5003":{"url":"192.168.84.102:50051","cloudPlatform":"LOCAL"},"https://localhost:5004":{"url":"192.168.84.202:50051","cloudPlatform":"LOCAL"}}' \

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_sfe

3.3.2 本機啟動指令碼的環境變數

您可以使用下列環境變數控管啟動行為。

環境變數

可用性

說明

DOCKER_RUN_ARGS_STRING

所有服務

docker 指令設定的標記

SKIP_TLS_VERIFICATION

所有服務

在本機測試時,您可能需要使用自行簽署的憑證,但這類憑證無法通過 curl 的 SSL 對等互連驗證檢查。這個標記會停用對等互連驗證和 SSL 主機名稱檢查。

預設值為 false

PS_VERBOSITY

所有服務

服務記錄的層級。等級越高,提供的記錄就越多。0 是最低值,10 是最高值。預設值為 10

BIDDING_PORT

出價服務

出價服務的通訊埠。預設值為 50057

BIDDING_JS_URL

出價服務

出價邏輯網址

EGRESS_SCHEMA_URL

出價服務

模型訓練的資料輸出

INFERENCE_ARGS

出價服務

出價推論的引數

BFE_PORT

BFE 服務

BFE 服務的通訊埠。預設值為 50051

BUYER_KV_SERVER_ADDR

BFE 服務

買家的 BYOS K/V 地址

BUYER_TKV_V2_SERVER_ADDR

BFE 服務

買方的 TEE K/V 位址

BIDDING_SERVER_ADDR

BFE 服務

買家的競價服務地址

AUCTION_PORT

競價服務

競價服務的通訊埠。預設值為 50061

AUCTION_JS_URL

競價服務

評分邏輯網址

BUYER_REPORT_WIN_URL

競價服務

買方勝出報表網址

BUYER_REPORT_WIN_SCRIPT

競價服務

買家的勝出報表指令碼

BUYER_PAS_REPORT_WIN_SCRIPT

競價服務

買方 PAS 勝出報表指令碼

SFE_PORT

SFE 服務

SFE 服務的通訊埠。預設值為 50053

AUCTION_SERVER_ADDR

SFE 服務

賣家的拍賣服務地址

KEY_VALUE_SIGNALS_ADDR

SFE 服務

賣家的 BYOS K/V 地址

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

SFE 服務

賣家的 TEE K/V 位址

SELLER_ORIGIN_DOMAIN

SFE 服務

賣家來源

BUYER_SERVER_ADDRS_JSON

SFE 服務

買家的 BFE 地址

4. 透過指令列使用安全叫用功能進行測試

4.1 SFE 測試

您也可以使用 B&A 服務套件隨附的「安全叫用」工具,直接從指令列呼叫服務。

4.1.2 SFE SelectAd 酬載

下列 JSON 要求已填入 SSP-BA 的單一賣家 B&A 競價設定:

{
  "auction_config": {
    "seller": "https://localhost:6002",
    "auction_signals": "{\"testKey\":\"someValue\"}",
    "seller_signals": "{\"testKey\":\"someValue\"}",
    "buyer_list": [
      "https://localhost:5003",
      "https://localhost:5004"
    ],
    "per_buyer_config": {
      "https://localhost:5003": { "buyer_signals": "{\"testKey\":\"someValue\"}" },
      "https://localhost:5004": { "buyer_signals": "{\"testKey\":\"someValue\"}" }
    }
  },
  "raw_protected_audience_input": {
    "publisher_name": "http://localhost:4001",
    "generation_id": "1210718540",
    "enable_debug_reporting": true,
    "raw_buyer_input": {
      "https://localhost:5003": {
        "interest_groups": [
          {
            "name": "dsp-x-demo",
            "ad_render_ids": ["1234"],
            "bidding_signals_keys": ["demo-key"],
            "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
            "user_bidding_signals": "[1, 2, 3]"
          }
        ]
      },
      "https://localhost:5004": {
        "interest_groups": [
          {
            "name": "dsp-x-demo",
            "ad_render_ids": ["1234"],
            "bidding_signals_keys": ["demo-key"],
            "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
            "user_bidding_signals": "[1, 2, 3]"
          }
        ]
      }
    }
  }
}

將檔案儲存為 Set A 的 B&A 服務存放區根資料夾中的 sfe-test.json(B&A 建構指令碼會將存放區根資料夾中的檔案複製到 Docker 映像檔的 /src/workspace 資料夾中)。

4.1.2 使用 Secure Invoke 呼叫 SFE

從 B&A Services 存放區的根資料夾執行下列指令:

DOCKER_NETWORK=ba-dev ./builders/tools/bazel-debian run //tools/secure_invoke:invoke \
  -- \
  -target_service=sfe \
  -input_file=/src/workspace/sfe-test.json \
  -host_addr=192.168.84.104:50053 \
  -client_ip=192.168.84.100 \
  -insecure=true

如果 B&A 堆疊設定正確,您會收到下列成功回應:

{"adRenderUrl":"https://localhost:5004/ad.html","interestGroupName":"dsp-x-demo","interestGroupOwner":"https://localhost:5004","score":39,"bid":39,"biddingGroups":{"https://localhost:5003":{"index":[0]},"https://localhost:5004":{"index":[0]}}}

4.2 BFE 測試

4.2.1 BFE GetBids 要求

{
  "buyer_input": {
    "interest_groups": {
      "name": "dsp-x-demo",
      "ad_render_ids": ["1234"],
      "bidding_signals_keys": ["demo-key"],
      "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" }
    }
  },
  "auction_signals": "{\"testKey\":\"someValue\"}",
  "buyer_signals": "{\"testKey\":\"someValue\"}",
  "seller": "https://localhost:6002",
  "publisher_name": "http://localhost:4001",
  "enable_debug_reporting": true,
  "client_type": "CLIENT_TYPE_BROWSER"
}

將檔案儲存為 B&A 服務存放區根資料夾中的 bfe-test.json

4.2.2 使用安全叫用呼叫 BFE

從 B&A Services 存放區的根資料夾執行下列指令:

DOCKER_NETWORK=ba-dev ./builders/tools/bazel-debian run //tools/secure_invoke:invoke \
  -- \
  -target_service=bfe \
  -input_file="/src/workspace/bfe-test.json" \
  -host_addr="192.168.84.102:50051" \
  -client_ip=192.168.84.100 \
  -insecure=true

如果 B&A 堆疊設定正確,BFE 會傳回下列回應:

{"bids":[{"bid":6,"render":"https://localhost:5003/ad.html","interestGroupName":"dsp-x-demo"}],"updateInterestGroupList":{}}

4.3 檢查 SFE 記錄

前往終端機並檢查 SFE 記錄。我們會逐步說明輸出內容中一些值得注意的記錄。

4.3.1 SelectAd 要求加密酬載

在這個 SFE 記錄輸出中,我們找到 navigator.getInterestGroupAdAuctionData() 呼叫的加密酬載。這個酬載是由瀏覽器產生,並從代碼傳送至 SAS,然後 SAS 會將其轉送至 SFE:

I1210 21:20:47.266673      37 select_ad_reactor.cc:228] Protected auction ciphertext: AEAAIAABAAKg3OQSSLEBMR1MmJiwfOT8uef41iE+DQIvKUowsQvVcGbWZ+r17ff2r/iTbEnwqLPtpAxSTy77mi+cVV5cKjkKb4piaZnKiCDIMCyEvrQUD4+BG+HgrbUFhqiWPmQhNThvInMaHuYrXG7xushbRtvSPsVzEl6iBZcLZzD7W3CHMFK7bnJ+ufu52W6B7/8dOQ1gZW6SpwXMGNcrurTGoucbwbZRIPqCcbZk76J1gB69wrDYRo1wQ6jmBleLM36nulxbEj/sHhpQIgr895aKqEGQ3Fy+/HHPTO+zHphcX44YeF6mZ/I+WxZTDxCi1x27nI4yvzC8vI4a/giJN5XUlJZGb/fMrj3/Qly+gwJ8lbxdX+4GWTooDoS4MTtiBpJqh9wkIQ5XwfO54p8Kv6j/tk+51hOfVkOdtGwX0LvVrWT9PiJOJHa23nZ1fLg/22mTe05xdbR3WVeA+xiO9YwF4ozyCYDRUkDyWB/3k9RuaaT9H5S1szVpuOuD2nYSRpT9svmpfG4kipiS6BTPZPX2whDlukpuuoFgdiDtH6cFShNhZ5C47R0ayAvaZ1QSpOZMWfA6pdl4nhvNLpOKesKY/KFDEBzpUXRDsQWsfvmdqFl1mCeX9rOrEc9rodYVLXXhM8GPycehHmvqkccTBW6kipOQlmnSdIYaFmtWSFpUrzxajGkct3mZdTjVjOf...

4.3.2 已解密的酬載

在這個輸出內容中,我們找到 navigator.getInterestGroupAdAuctionData() 呼叫的已解密酬載:

I1210 21:20:47.267590      37 select_ad_reactor.cc:347]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Decoded BuyerInput:
https://localhost:5003 : {interest_groups { name: "dsp-x-demo" bidding_signals_keys: "demo-key" browser_signals { join_count: 1 recency: 7 prev_wins: "[]" } }}

4.3.3 GetBids 要求 BFE

GetBids 要求會從 SFE 傳送至 BFE:

I1210 21:20:47.267710      37 select_ad_reactor.cc:751]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Getting bid from a BFE
I1210 21:20:47.267729      37 buyer_frontend_async_client.cc:52] Raw request:
buyer_input {
  interest_groups {
    name: "dsp-x-demo"
    bidding_signals_keys: "demo-key"
    browser_signals {
      join_count: 1
      recency: 7
      prev_wins: "[]"
    }
  }
}
auction_signals: "{\"testKey\":\"someValue\"}"
buyer_signals: "{\"testKey\": \"someValue\"}"
seller: "https://localhost:6002"
publisher_name: "localhost"
enable_debug_reporting: true
log_context {
  generation_id: "c2824bfc-d515-4a1a-9de9-7660ad963252"
}
client_type: CLIENT_TYPE_BROWSER

4.3.4 BFE 的 GetBids 回應

BFE 會傳回出價:

I1210 21:20:47.282549      41 select_ad_reactor.cc:856]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Received response from a BFE ...
I1210 21:20:47.282552      41 select_ad_reactor.cc:859]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252)
GetBidsResponse:
bids {
  bid: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
}
update_interest_group_list {
}

4.3.5 ScoreAds 競價服務要求

收到出價後,SFE 會針對每項出價呼叫競價服務:ScoreAds

I1210 21:20:47.287898      18 select_ad_reactor.cc:1280]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) ScoreAdsRawRequest:
ad_bids {
  bid: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
  interest_group_owner: "https://localhost:5003"
  join_count: 1
  k_anon_status: true
}
seller_signals: "{\"testKey\":\"someValue\"}"
auction_signals: "{\"testKey\":\"someValue\"}"
scoring_signals: "{\"renderUrls\":{\"https://localhost:5003/ad.html\":[1,2,3],\"https://localhost:5004/ad.html\":[1,2,3]}}"
publisher_hostname: "localhost"
enable_debug_reporting: true
log_context {
  generation_id: "c2824bfc-d515-4a1a-9de9-7660ad963252"
}
per_buyer_signals {
  key: "https://localhost:5003"
  value: "{\"testKey\": \"someValue\"}"
}
per_buyer_signals {
  key: "https://localhost:5004"
  value: "{\"testKey\": \"someValue\"}"
}
seller: "https://localhost:6002"

4.3.6 競價服務的回應 ScoreAds

賣家的競價服務會傳回合適度分數:

I1210 21:20:47.298029      33 default_async_grpc_client.h:134] Decrypting the response ...
I1210 21:20:47.298100      33 default_async_grpc_client.h:152] Decryption/decoding of response succeeded: ad_score {
  desirability: 9
  render: "https://localhost:5003/ad.html"
  interest_group_name: "dsp-x-demo"
  buyer_bid: 9
  interest_group_owner: "https://localhost:5003"
  win_reporting_urls {
    top_level_seller_reporting_urls {
    }
  }
  ad_type: AD_TYPE_PROTECTED_AUDIENCE_AD
}

4.3.7 SelectAd SFE 回覆

SFE 的 SelectAd 回應會經過加密並傳送至 SAS:

I1210 21:20:47.298428      33 select_ad_reactor.cc:1413]  (generationId: c2824bfc-d515-4a1a-9de9-7660ad963252) Encrypted SelectAdResponse:
auction_result_ciphertext: "\023\233\252\321\000\331M\327\216\201S\332kl?\322\255\247\312\375h\007W\367\016\366FR\364\275\377\326\027h\204\203\265\t\271-\333\266\tH\342\033F\001k\211C\026V\013\271\255(\236\273\353\260\275\007\346\027\340?\005|\235S\244\265\2563U\246\322\177%\200/\3175\034 \020\024\362\345\3263\356F.s\261\005\231\262Z\000\330x\0230\335>\"\217\254\010\254\330>\206\007\274\235\037`\370W\032\207\356\367\206\026\341.i\"$\370\367\2554i\247\354\304e\306\2466S\337\321w\327+!\316\035:\002\231\246\362\366qm\211\000\013\343\345\224{\365py\361\374\316\202\217-\244\302\331\216D\025W#.\304nH\235\315\311<#\342\344\324\257\354\2441\251\312\320\226\342\021\377>3`\347/\350\254h\306\273\023\365\340@\321\2412\254\323\213\0137,\013n\220|\211\323/\030)\314\263\223\355>\254\312aa`!\375\335\023Z\234p\206\037\001\355\261{$\025+\341\275\327Ny\342\342\264=\376\2138\224\026\2058\251\020\202\245*46\023\307)K\342\364k<\2104r\247\034\216}\034\001\374\215\363\210\026\275\371S>\031;f.b\260\363\257.\255\023I\341A\237*_T\355\262\005\344L\336D%\327\267@\302$\300\340\203c\350|\337>C\275c\260\202o\315xp\260\257\241\305U\nK\033\274L6\025\350\373a:\253\212&>p\210\215\017&^\327\005_\037\020\212\362\351\341\231@g\372\0037\275b:)\207\303d\243?\261O\266\343\214\200\004\247\372\022S\326\200\037\330\252r\257+e\273[\231\202\3625{\330\213\240\370\245\\\214\350/\313\ty/\004\313\0304k\223\354\374\305\233\264\224K\344\241\251\322?\323q6\314D\027\200\203\035]\023O\306\230?\203\237:\254\305\265\332\330\2641l\322\020\022\330O-\242\207>Q\364_{F\235\353tk\207\035\205\005\221\373\207\0143\035\014\322\240H\220\347%\262f\347\017\352\273\265\231\014\204\r\312\254z\000\340&\354\222\323\245\356\217(i\246"

5. 透過瀏覽器的本機測試應用程式進行測試

5.1 開啟 Chrome

請參閱 Chromium 文章,瞭解如何從命令列啟動 Chrome,並使用下列旗標啟動 Chrome:

google-chrome --enable-privacy-sandbox-ads-apis --disable-features=EnforcePrivacySandboxAttestations,FledgeEnforceKAnonymity --enable-features=FledgeBiddingAndAuctionServerAPI,FledgeBiddingAndAuctionServer:FledgeBiddingAndAuctionKeyURL/https%3A%2F%2Fstorage.googleapis.com%2Fba-test-buyer%2Fcoordinator-test-key.json

這個旗標會載入我們在 https://storage.googleapis.com/ba-test-buyer/coordinator-test-key.json 託管的模擬協調器金鑰。

重要事項:請務必完全退出所有 Chrome 例項,再從指令列開啟 Chrome,並使用 B&A 旗標。如要結束所有 Chrome 程序,請嘗試從指令列執行 ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9

5.2 前往本機測試應用程式 UI

在您使用旗標開啟的 Chrome 瀏覽器執行個體中,應用程式 UI 位於 http://localhost:3000。如果您使用的 VM 主機名稱不同,實際造訪的地址可能會有所不同。

在瀏覽器中瀏覽本機測試應用程式的螢幕截圖 瀏覽器中顯示本機測試應用程式的螢幕截圖

在應用程式的頂端列中,「Controls」面板包含模擬不同競價設定的按鈕。另外兩個面板則包含廣告主和發布商網站的 iframe。

Chrome 開發人員工具中的興趣群組螢幕截圖。 Chrome 開發人員工具中的興趣群組螢幕截圖。

接著,按一下「控制項」面板中的按鈕,模擬各種競價類型。

在瀏覽器中顯示出價和競價廣告。

如果 B&A 服務和本機測試應用程式設定正確,系統會在「發布商網站 iframe」面板中算繪上述廣告。

5.3 測試應用程式競價設定

在隨附的本機測試應用程式中,系統會根據通訊埠號碼代管下列參與者 (不同通訊埠視為跨來源):

學員

說明

通訊埠

廣告主

在網頁上載入 DSP 代碼

4001

發布商

在網頁上載入 SSP 代碼

4002

DSP-A

裝置端買家

5001

DSP-B

裝置端買家

5002

DSP-X

B&A 買家

5003

DSP-Y

B&A 買家

5004

SSP-TOP

頂級賣家

6001

SSP-OD

僅限裝置的賣家

6002

SSP-BA

僅提供 B&A 的賣家

6003

SSP-MIX

混合模式賣家

6004

共有四個 DSP:

  • DSP-ADSP-B 參與裝置端競價
  • DSP-XDSP-Y 參與 B&A 競價

有四個 SSP,每個賣方都執行不同的競價設定:

  • SSP-OD只在裝置端執行競價
  • SSP-BA 僅執行 B&A 競價
  • SSP-MIX 執行混合模式競價
  • SSP-TOP 執行多賣家競價
    • SSP-OD/BA/MIXSSP-TOP多重賣方競價的元件賣家身分參與

如要查看完整架構,請參閱設計圖

5.4 設定出價和競價服務

在本程式碼研究室中,我們會並行執行兩組 B&A。

設定

服務

學員

ba-dev 網路位址

設定 A

出價服務

DSP-X

192.168.84.101:50057

BFE 服務

DSP-X

192.168.84.102:50051

競價服務

SSP-BA

192.168.84.103:50061

SFE 服務

SSP-BA

192.168.84.104:50053

設定 B

出價服務

DSP-Y

192.168.84.201:50057

BFE 服務

DSP-Y

192.168.84.202:50051

競價服務

SSP-MIX

192.168.84.203:50061

SFE 服務

SSP-MIX

192.168.84.204:50053

應用程式

本機測試應用程式

全部

https://192.168.84.100:PORT

  • 在集合 A 中,買方服務由 DSP-X 使用,賣方服務由 SSP-BA 使用
  • 在 B 組中,買方服務由 DSP-Y 使用,賣方服務則由 SSP-MIX 使用

本機測試應用程式與 B&A 服務之間的通訊會使用 Docker 橋接器網路ba-dev 橋接器網路是由 Local Testing App 的設定指令碼建立。B&A 服務會在 192.168.84.0 的子網路中獲派 IP 位址。

舉例來說,當您從應用程式呼叫 Set A 的 SFE 時,系統會使用 192.168.84.104:50053 的網路位址。從 DSP-X 將模擬出價指令碼載入 BFE 時,會使用 https://192.168.84.100:5003/generate-bid.js

6. 總結

我們希望您現在已熟悉在本機上執行 B&A 服務堆疊,並更瞭解服務之間的通訊方式。

6.1. 技術支援

6.2 瞭解詳情