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

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 ดูข้อมูลเพิ่มเติม