ทดสอบแบบถามและตอบสําหรับเว็บจากต้นทางถึงปลายทางในเครื่อง

ทดสอบ A/B สำหรับเว็บจากต้นทางถึงปลายทางในเครื่อง

เกี่ยวกับ Codelab นี้

subjectอัปเดตล่าสุดเมื่อ ธ.ค. 13, 2024
account_circleเขียนโดย Kevin Lee

1 บทนำ

บริการเสนอราคาและประมูล (B&A) ประกอบด้วยบริการ 4 รายการสำหรับผู้ซื้อและผู้ขายเพื่ออำนวยความสะดวกในการประมูล Protected Audience ดังนี้

สแต็กผู้ซื้อ

  • บริการส่วนหน้าสำหรับผู้ซื้อ
  • บริการเสนอราคา

กองของผู้ขาย

  • บริการส่วนหน้าสำหรับผู้ขาย
  • บริการประมูล

โค้ดแล็บนี้จะแนะนำการตั้งค่าและการทดสอบการตั้งค่าจากต้นทางถึงปลายทางในสภาพแวดล้อมภายใน คาดว่าการแนะนำจะใช้เวลาประมาณ 1 ชั่วโมง ไม่รวมเวลาในการสร้างบริการครั้งแรก

แม้ว่าคุณจะทํางานกับโค้ดฝั่งผู้ซื้อหรือฝั่งผู้ขายเท่านั้น แต่การตั้งค่าขั้นตอนตั้งแต่ต้นจนจบในสภาพแวดล้อมในเครื่องก็มีประโยชน์เพื่อให้เข้าใจวิธีการทำงานของสแต็กผู้ซื้อและผู้ขายได้ดียิ่งขึ้น การตั้งค่าทั้ง 2 สแต็กจะช่วยให้คุณมั่นใจมากขึ้นในภายหลังเมื่อผสานรวมกับสแต็กผู้ซื้อหรือผู้ขายที่เกี่ยวข้องของบุคคลอื่น การทดสอบบริการในเครื่องยังช่วยประหยัดค่าใช้จ่ายในการพัฒนาด้วย

ใน Codelab นี้ เราจะใช้แอปทดสอบในพื้นที่ของ B&A เป็นตัวช่วยแนะนำ

แอปทดสอบในพื้นที่ที่ใช้ร่วมกันจะโฮสต์ทรัพยากรผู้ซื้อและผู้ขายต่างๆ ที่ใช้ในการประมูล B&A นอกจากนี้ แอปยังมี UI ที่ http://localhost:3000 ซึ่งคุณสามารถจําลองการกําหนดค่าการประมูลต่างๆ ได้

2 การตั้งค่าสภาพแวดล้อม

2.1 เตรียมเครื่อง Linux

ใช้เครื่อง Linux บนเครื่อง หรือจัดสรร VM ที่ใช้ Linux ของผู้ให้บริการระบบคลาวด์ที่คุณต้องการ หากต้องการปรับปรุงเวลาสร้าง เราขอแนะนำให้ใช้ CPU ที่มีอย่างน้อย 16 คอร์ และควรใช้ CPU ที่มี 32 คอร์ขึ้นไป

โปรดทราบว่าเราจะโหลดหน้า HTML จาก http://localhost:3000 ของเครื่องนี้ หาก 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 จะมอบสิทธิ์ระดับรูทให้แก่ผู้ใช้ อ่านคู่มือ Docker ที่ไม่ต้องใช้ sudo เพื่อดูข้อมูลเพิ่มเติม

2.3 เริ่มแอปการทดสอบในพื้นที่ที่ใช้ร่วมกัน

แอปที่ใช้ร่วมกันมีทรัพยากรต่างๆ เช่น สคริปต์การเสนอราคา/การให้คะแนนจำลอง และปลายทาง K/V BYOS จำลอง คุณควรเริ่มแอปก่อนเรียกใช้บริการ B&A เพื่อให้ระบบโหลดทรัพยากรลงในบริการได้

เลื่อนที่เก็บแอปทดสอบในเครื่องลง

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 2 ชุดในเครื่องเดียวกัน ดังนั้นเราจะดึงข้อมูลรีโพซิทอรี่ลงในโฟลเดอร์ 2 โฟลเดอร์ที่แตกต่างกัน

ชุด ก.

ดึงที่เก็บ B&A ลง

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

ชุด ข

ดึงที่เก็บ 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

คำสั่งข้างต้นจะสร้างอินสแตนซ์ local ของบิลด์สำหรับการพัฒนา (non_prod) สำหรับ Google Cloud Platform (gcp) ของบริการทั้ง 4 รายการ อัปเดต Flag --platform ไปยังผู้ให้บริการระบบคลาวด์ที่คุณต้องการ หากจำเป็น ดูข้อมูลเพิ่มเติมเกี่ยวกับ Flag การสร้างได้ในไฟล์ build_and_test_all_docker

การสร้างครั้งแรกอาจใช้เวลา 2 ชั่วโมงหากใช้เครื่อง 64 คอร์ และเวลาสร้างจะเพิ่มขึ้นตามจำนวนคอร์ หากใช้เครื่อง 32 คอร์ อาจใช้เวลา 4 ชั่วโมง หากใช้เครื่อง 16 คอร์ อาจใช้เวลา 8 ชั่วโมง

โปรดทราบว่าบิลด์ต่อๆ ไปจะใช้แคช และแต่ละบิลด์ควรใช้เวลาประมาณ 5-20 นาที

การ์ตูน xkcd ที่เกี่ยวข้อง

แสดงภาพโปรแกรมเมอร์ 2 คนแอบเล่นซนที่ออฟฟิศ ซึ่งทำให้ผู้จัดการบอกให้กลับไปทำงาน แต่พนักงานบอกว่ากําลังคอมไพล์โค้ดอยู่ ผู้จัดการจึงโอเค และนักเขียนการ์ตูนคนนี้ถือว่านี่เป็นข้อแก้ตัวที่ถูกต้องที่สุดสำหรับการแอบเล่นซน

(ฉันได้พบกับ Randall Munroe จาก xkcd ขณะเขียน Codelab นี้ และบอกเขาว่าฉันได้เพิ่มการ์ตูนนี้ไว้ที่นี่)

3.3 เรียกใช้บริการ

ในการทดสอบ เราจะเรียกใช้บริการ 8 รายการ (4 รายการต่อสแต็ก) แต่ละคําสั่งได้รับการตั้งค่าให้ใช้ทรัพยากรที่แอปทดสอบในเครื่องมีให้ เราขอแนะนําอย่างยิ่งให้ใช้เครื่องมือจัดการหน้าต่าง เช่น 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-X บริการเสนอราคา

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-X บริการ 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

บริการทั้งหมด

การตั้งค่า Flag สำหรับคำสั่ง docker

SKIP_TLS_VERIFICATION

บริการทั้งหมด

เมื่อทดสอบในเครื่องของคุณ คุณอาจต้องใช้ใบรับรองที่ลงนามด้วยตนเองซึ่งไม่ผ่านการตรวจสอบการยืนยันคู่สนทนา SSL ของ curl Flag จะปิดใช้การยืนยันคู่สนทนาพร้อมกับการตรวจสอบชื่อโฮสต์ SSL

ค่าเริ่มต้นคือ false

PS_VERBOSITY

บริการทั้งหมด

ระดับบันทึกของบริการ ระดับที่สูงขึ้นจะให้บันทึกมากขึ้น โดย 0 คือต่ำสุดและ 10 คือสูงสุด ค่าเริ่มต้นคือ 10

BIDDING_PORT

บริการเสนอราคา

พอร์ตของบริการเสนอราคา ค่าเริ่มต้นคือ 50057

BIDDING_JS_URL

บริการเสนอราคา

URL ของตรรกะการเสนอราคา

EGRESS_SCHEMA_URL

บริการเสนอราคา

การส่งออกข้อมูลสําหรับการฝึกโมเดล

INFERENCE_ARGS

บริการเสนอราคา

อาร์กิวเมนต์สําหรับการอนุมานการเสนอราคา

BFE_PORT

บริการ BFE

พอร์ตของบริการ BFE ค่าเริ่มต้นคือ 50051

BUYER_KV_SERVER_ADDR

บริการ BFE

ที่อยู่ K/V ของ BYOS ของผู้ซื้อ

BUYER_TKV_V2_SERVER_ADDR

บริการ BFE

ที่อยู่ K/V ของ TEE ของผู้ซื้อ

BIDDING_SERVER_ADDR

บริการ BFE

ที่อยู่บริการเสนอราคาของผู้ซื้อ

AUCTION_PORT

บริการประมูล

พอร์ตของบริการประมูล ค่าเริ่มต้นคือ 50061

AUCTION_JS_URL

บริการประมูล

URL ของตรรกะการให้คะแนน

BUYER_REPORT_WIN_URL

บริการประมูล

URL การรายงานการชนะของผู้ซื้อ

BUYER_REPORT_WIN_SCRIPT

บริการประมูล

สคริปต์การรายงาน Conversion ที่ซื้อของผู้ซื้อ

BUYER_PAS_REPORT_WIN_SCRIPT

บริการประมูล

สคริปต์การรายงานการชนะของผู้ซื้อสําหรับ PAS

SFE_PORT

บริการ SFE

พอร์ตของบริการ SFE ค่าเริ่มต้นคือ 50053

AUCTION_SERVER_ADDR

บริการ SFE

ที่อยู่บริการประมูลของผู้ขาย

KEY_VALUE_SIGNALS_ADDR

บริการ SFE

ที่อยู่ K/V ของ BYOS ของผู้ขาย

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

บริการ SFE

ที่อยู่ K/V ของ TEE ของผู้ขาย

SELLER_ORIGIN_DOMAIN

บริการ SFE

ต้นทางของผู้ขาย

BUYER_SERVER_ADDRS_JSON

บริการ SFE

ที่อยู่ BFE ของผู้ซื้อ

4 ทดสอบด้วย Secure Invoke จากบรรทัดคำสั่ง

4.1 การทดสอบ SFE

นอกจากนี้ คุณยังใช้เครื่องมือ Secure Invoke ที่รวมอยู่ในแพ็กเกจบริการ B&A เพื่อเรียกใช้บริการจากบรรทัดคำสั่งโดยตรงได้ด้วย

4.1.2 เพย์โหลด SFE SelectAd

คําขอ JSON ต่อไปนี้สร้างขึ้นด้วยการตั้งค่าการประมูล B&A ของผู้ขายรายเดียวของ SSP-BA

{
  "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]"
          }
        ]
      }
    }
  }
}

บันทึกไฟล์เป็น sfe-test.json ในโฟลเดอร์รูทของที่เก็บข้อมูลบริการ B&A ของชุด A(สคริปต์บิลด์ B&A จะคัดลอกไฟล์ในโฟลเดอร์รูทของที่เก็บข้อมูลไปยังโฟลเดอร์ /src/workspace ของอิมเมจ Docker)

4.1.2 โทรหา SFE ด้วย Secure Invoke

เรียกใช้คำสั่งต่อไปนี้จากโฟลเดอร์รูทของที่เก็บข้อมูลบริการ B&A

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 คำขอ GetBids ของ BFE

{
  "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"
}

บันทึกไฟล์เป็น bfe-test.json ในโฟลเดอร์รูทของที่เก็บข้อมูลบริการ B&A

4.2.2 โทรหา BFE ด้วย Secure Invoke

เรียกใช้คำสั่งต่อไปนี้จากโฟลเดอร์รูทของที่เก็บข้อมูลบริการ B&A

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 การตอบกลับ GetBids จาก BFE

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

คำตอบ SelectAd ของ SFE ได้รับการเข้ารหัสและส่งไปยัง 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 ด้วย Flag ต่อไปนี้

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 

การตั้งค่า Flag เพื่อโหลดคีย์ผู้ประสานงานจำลองที่เราโฮสต์ไว้ที่ https://storage.googleapis.com/ba-test-buyer/coordinator-test-key.json

สำคัญ: ตรวจสอบว่าคุณออกจากอินสแตนซ์ Chrome ทั้งหมดแล้วก่อนที่จะเปิดจากบรรทัดคำสั่งด้วย Flag B&A หากต้องการออกจากกระบวนการทั้งหมดของ Chrome ให้ลองเรียกใช้ ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9 จากบรรทัดคำสั่ง

5.2 ไปที่ UI ของแอปทดสอบในเครื่อง

UI ของแอปจะอยู่ http://localhost:3000 ในอินสแตนซ์เบราว์เซอร์ Chrome ที่คุณเปิดด้วย Flag ที่อยู่ที่คุณเข้าชมอาจแตกต่างออกไปหากคุณใช้ VM ที่มีชื่อโฮสต์อื่น

ภาพหน้าจอของแอปทดสอบในเครื่องที่กําลังเข้าชมในเบราว์เซอร์

ในแถวบนสุดของแอป แผง "การควบคุม" จะมีปุ่มจำลองการกําหนดค่าการประมูลแบบต่างๆ แผงอีก 2 แผงมี iframe จากเว็บไซต์ของผู้ลงโฆษณาและผู้เผยแพร่โฆษณา

เมื่อคลิกปุ่ม "โหลดแท็ก DSP" ใน iframe ของหน้าผู้ลงโฆษณา ระบบจะเพิ่มสคริปต์จาก DSP แต่ละรายการลงในหน้า สคริปต์ดังกล่าวจะเพิ่มผู้ใช้ลงในกลุ่มความสนใจ เปิดเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome แล้วไปที่ "แอปพลิเคชัน / พื้นที่เก็บข้อมูล / กลุ่มความสนใจ" เพื่อตรวจสอบกลุ่มความสนใจที่แท็ก DSP เข้าร่วม

ภาพหน้าจอของกลุ่มความสนใจในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

จากนั้นคลิกปุ่มในแผง "การควบคุม" เพื่อจําลองการประมูลประเภทต่างๆ

โฆษณาที่แสดงผลในเบราว์เซอร์จาก B&A

หากตั้งค่าบริการ 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

ผู้ขายเฉพาะสินค้าแบรนด์และสินค้าแอตทริบิวต์เท่านั้น

6003

SSP-MIX

ผู้ขายแบบผสม

6004

DSP มีด้วยกัน 4 ประเภท ดังนี้

  • DSP-A และ DSP-B เข้าร่วมการประมูลในอุปกรณ์
  • DSP-X และ DSP-Y เข้าร่วมการประมูล B&A

มี SSP 4 ราย และผู้ขายแต่ละรายใช้การกำหนดค่าการประมูลที่แตกต่างกัน ดังนี้

  • SSP-OD ทำการประมูลในอุปกรณ์เท่านั้น
  • SSP-BA ทำการประมูลแบบ B&A เท่านั้น
  • SSP-MIX ทำการประมูลแบบผสม
  • SSP-TOP ทำการประมูลกับผู้ขายหลายราย
    • SSP-OD/BA/MIX เข้าร่วมในฐานะผู้ขายชิ้นส่วนในการประมูลแบบผู้ขายหลายรายของ SSP-TOP

ดูสถาปัตยกรรมทั้งหมดได้ในแผนภาพการออกแบบ

5.4 การกําหนดค่าการเสนอราคาและบริการประมูล

ในโค้ดแล็บนี้ เราจะเรียกใช้ B&A 2 ชุดควบคู่กัน

ตั้งค่า

บริการ

ผู้เข้าร่วม

ที่อยู่เครือข่าย 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

ชุด ข

บริการเสนอราคา

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

  • ในชุด ก DSP-X ใช้บริการสำหรับผู้ซื้อและ SSP-BA ใช้บริการสำหรับผู้ขาย
  • ในชุด ข. DSP-Y ใช้บริการสำหรับผู้ซื้อและ SSP-MIX ใช้บริการสำหรับผู้ขาย

ระบบจะใช้เครือข่ายบริดจ์ Docker เพื่อสื่อสารระหว่างแอปการทดสอบในเครื่องกับบริการ B&A เครือข่ายบริดจ์ ba-dev สร้างขึ้นโดยสคริปต์การตั้งค่าของแอปการทดสอบในเครื่อง บริการ B&A จะได้รับที่อยู่ IP ในซับเน็ตของ 192.168.84.0

ตัวอย่างเช่น เมื่อคุณเรียก SFE ของชุด A จากแอปพลิเคชัน ระบบจะใช้ที่อยู่เครือข่ายของ 192.168.84.104:50053 เมื่อคุณโหลดสคริปต์การเสนอราคาจำลองจาก DSP-X ไปยัง BFE ระบบจะใช้ https://192.168.84.100:5003/generate-bid.js

6 สรุป

ตอนนี้เราหวังว่าคุณจะคุ้นเคยกับการใช้งานสแต็กบริการ B&A ในเครื่องของคุณแล้ว และเข้าใจมากขึ้นว่าบริการต่างๆ สื่อสารกันอย่างไร

6.1 ฝ่ายสนับสนุนด้านเทคนิค

6.2 ดูข้อมูลเพิ่มเติม