בדיקת B&A לאינטרנט מקצה לקצה באופן מקומי

1. מבוא

שירותי בידינג ומכרזים (B&A) כוללים 4 שירותים לקונים ולמוכרים שמאפשרים להם לקיים מכרז של קהל מוגן:

סטאק הקונה:

  • שירות לקונה בחזית האתר
  • Bidding Service

סטאק של המוכר:

  • שירות ממשק קצה של מוכרים
  • Auction Service

ב-codelab הזה תלמדו איך להגדיר ולבדוק את ההגדרה מקצה לקצה בסביבה המקומית. ההדרכה צפויה להימשך כשעה, לא כולל זמן ה-build הראשוני של השירות.

גם אם אתם עובדים רק על הקוד של הצד הקונה או על הקוד של הצד המוכר, כדאי להגדיר את התהליך מקצה לקצה בסביבה המקומית כדי להבין טוב יותר איך סטאקים של הקונה והמוכר פועלים זה עם זה. הגדרת שני הסטאקים תאפשר לכם להשתלב בבטחה רבה יותר עם הסטאק של הצד השני, של הקונה או של המוכר. בדיקת השירותים באופן מקומי חוסכת גם בעלויות הפיתוח.

בקודלאב הזה נשתמש באפליקציית הבדיקה המקומית של B&A כמדריך.

אפליקציית הבדיקה המקומית המשולבת מארחת משאבים שונים לקונים ולמוכרים שמשמשים במכרז B&A. האפליקציה כוללת גם ממשק משתמש בכתובת http://localhost:3000, שבו אפשר לדמות הגדרות שונות של מכרזים.

2. הגדרת הסביבה

2.1 הכנת מחשב Linux

משתמשים במכונה מקומית של Linux, או מקצים מכונה וירטואלית של Linux אצל ספק הענן שבחרתם. כדי לשפר את זמן ה-build, מומלץ להשתמש במחשב עם לפחות 16 ליבות, עדיף עם 32 ליבות או יותר.

שימו לב שאנחנו נטען דף HTML מ-http://localhost:3000 של המכונה הזו. אם המכונה הווירטואלית לא מספקת ממשק משתמש גרפי, צריך לוודא שאפשר לגשת ליציאה 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 מעניקה למשתמש הרשאות ברמת root. למידע נוסף, אפשר לקרוא את המדריך ל-Docker ללא sudo.

2.3 הפעלת אפליקציית Local Testing App

באפליקציה הנלווית יש משאבים כמו סקריפטים לדוגמה לבידינג או למתן ניקוד, ונקודות קצה לדוגמה של BYOS של מפתח/ערך (K/V). צריך להפעיל את האפליקציה לפני שמפעילים את שירותי B&A כדי שאפשר יהיה לטעון את המשאבים לשירותים.

שולפים את מאגר האפליקציות לבדיקות מקומיות:

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

מריצים את סקריפט ההגדרה מהרמה הבסיסית (root) של המאגר:

./setup

סקריפט ההגדרה ייצור את רשת Docker‏ ba-dev, ייצור אישורי SSL ויפתח את קובץ האימג' של אפליקציית הבדיקה.

אחרי שה-build מסתיים בהצלחה, מריצים את סקריפט ההתחלה:

./start

3. פיתוח גרסת build והרצה של בדיקות B&A באופן מקומי

3.1 משיכה למטה של שירותי B&A

אנחנו מריצים שתי קבוצות של שירותי B&A באותה מכונה, ולכן נוריד את המאגר לשתי תיקיות שונות.

קבוצה א':

שולפים את המאגר של 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 עם build הפיתוח (non_prod) של Google Cloud Platform (gcp) לכל 4 השירותים. אם צריך, מעדכנים את הדגל --platform לספק הענן שבחרתם. מידע נוסף על דגלים ל-build זמין בקובץ build_and_test_all_docker.

ה-build הראשוני עשוי להימשך שעתיים אם משתמשים במכונה עם 64 ליבות, וזמן ה-build משתנה באופן לינארי בהתאם למספר הליבות. אם אתם משתמשים במכונה עם 32 ליבות, התהליך עשוי להימשך 4 שעות. אם אתם משתמשים במכונה עם 16 ליבות, התהליך עשוי להימשך 8 שעות.

הערה: גרסאות build הבאות ישתמשו במטמון, וכל גרסה build אמורה להימשך כ-5 עד 20 דקות.

רצועת קומיקס רלוונטית של xkcd:

תמונה של שני מתכנתים שמנמנמים במשרד, והמנהל אומר להם לחזור לעבודה. הם אומרים שהקוד נמצא בתהליך הידור, והמנהל מסכים עם זה. לדעת המחבר של הקומיקס, זוהי התירוץ המוצדק מספר אחת לכך

(פגשתי את Randall Munroe מ-xkcd בזמן שכתבתי את הקודלאב הזה, ואמרתי לו שהוספתי את הקומיקס הזה)

3.3 הפעלת השירותים

במסגרת הבדיקה, נפעיל 8 שירותים (4 שירותים לכל סטאק). כל פקודה מוגדרת לשימוש במשאבים שסופקו על ידי אפליקציית הבדיקה המקומית. מומלץ מאוד להשתמש במנהל חלונות כמו tmux.

פותחים לפחות 8 חלונות טרמינל נוספים ומריצים את הפקודות הבאות בכל סשן.

חשוב לזכור ששרת אפליקציית הבדיקה המקומית צריך לפעול כבר בתהליך נפרד, כי הסקריפטים של הבידינג והניקוד יוצגו על ידי האפליקציה.

3.3.1 הגדרת פקודות מסוג A

שירות

פקודה

DSP-X Bidding Service

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 Auction Service

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 Bidding Service

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 Auction Service

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

כל השירותים

כשבודקים במחשב המקומי, יכול להיות שתצטרכו להשתמש באישור בחתימה עצמית שלא עובר את בדיקת אימות ה-SSL של curl. הדגל משבית את אימות השותף יחד עם בדיקת שם המארח של ה-SSL.

ברירת המחדל היא false.

PS_VERBOSITY

כל השירותים

רמת יומני השירות. ברמה גבוהה יותר מוצגים יותר יומנים. 0 הוא הדירוג הנמוך ביותר ו-10 הוא הדירוג הגבוה ביותר. ברירת המחדל היא 10.

BIDDING_PORT

Bidding Service

היציאה של Bidding Service. ברירת המחדל היא 50057

BIDDING_JS_URL

Bidding Service

כתובת ה-URL של לוגיק הבידינג

EGRESS_SCHEMA_URL

Bidding Service

תעבורת נתונים יוצאת (egress) לאימון מודל

INFERENCE_ARGS

Bidding Service

ארגומנטים להסקת מסקנות לגבי בידינג

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

Auction Service

היציאה של Auction Service. ברירת המחדל היא 50061

AUCTION_JS_URL

Auction Service

כתובת ה-URL של לוגיקת הניקוד

BUYER_REPORT_WIN_URL

Auction Service

כתובת ה-URL לדיווח על זכייה של קונה

BUYER_REPORT_WIN_SCRIPT

Auction Service

סקריפט לדיווח על זכייה של קונה

BUYER_PAS_REPORT_WIN_SCRIPT

Auction Service

סקריפט לדיווח על הצעות הזוכה של הקונה ב-PAS

SFE_PORT

שירות SFE

היציאה של השירות SFE. ברירת המחדל היא 50053

AUCTION_SERVER_ADDR

שירות SFE

הכתובת של המוכרים ב-Auction Service

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 Services כדי לקרוא לשירותים ישירות משורת הפקודה.

4.1.2 עומס נתונים של SelectAd ב-SFE

בקשת ה-JSON הבאה אוכלסה בהגדרות של המכרז של 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 בקבוצה א' (סקריפט ה-build של B&A יקפיא את הקבצים בתיקיית השורש של המאגר לתיקייה /src/workspace של קובץ האימג' ב-Docker).

4.1.2 קריאה ל-SFE באמצעות Secure Invoke

מריצים את הפקודה הבאה מהתיקייה הבסיסית (root) של מאגר השירותים של 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

מריצים את הפקודה הבאה מהתיקייה הבסיסית (root) של מאגר השירותים של 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 מטען נתונים מפוענח

בפלט הזה מופיע עומס העבודה (payload) מפוענח של הקריאה 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 ל-Auction Service

אחרי שההצעות מתקבלות, הקריאה ScoreAds מתבצעת על ידי SFE לשירות המכרזים לכל הצעה:

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 מ-Auction Service

שירות המכרזים של המוכר משיב עם דירוג הרצון:

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 משורת הפקודה ומפעילים אותו עם הדגלים הבאים:

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 לפני שפותחים אותו משורת הפקודה עם הדגלים B ו-A. כדי לצאת מכל התהליכים של Chrome, אפשר לנסות להריץ את הפקודה ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9 משורת הפקודה.

5.2 כניסה לממשק המשתמש של אפליקציית הבדיקה המקומית

ממשק המשתמש של האפליקציה נמצא בכתובת http://localhost:3000 במכונה של דפדפן Chrome שפתחתם באמצעות הדגלים. הכתובת המדויקת שאליה תיכנסו עשויה להיות שונה אם אתם משתמשים במכונה וירטואלית עם שם מארח שונה.

צילום מסך של אפליקציית הבדיקה המקומית שנכנסים אליה בדפדפן

בשורה העליונה של האפליקציה, בחלונית 'אמצעי בקרה' יש לחצנים לסימולציה של הגדרות מכרז שונות. שני הלוחות האחרים מכילים iframes מהאתרים של המפרסם ובעל התוכן הדיגיטלי.

כשלוחצים על הלחצן 'טעינה של תגי 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:

  • 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 עם כמה מוכרים

הארכיטקטורה המלאה מפורטת בתרשים העיצוב.

5.4 הגדרת בידינג ושירותי מכרזים

ב-codelab הזה, מריצים במקביל שתי קבוצות של בדיקות ביקורת וניתוח (A&B).

אפשר להתחיל?

שירות

משתתף

כתובת רשת ba-dev

קבוצה א'

Bidding Service

DSP-X

192.168.84.101:50057

שירות BFE

DSP-X

192.168.84.102:50051

Auction Service

SSP-BA

192.168.84.103:50061

שירות SFE

SSP-BA

192.168.84.104:50053

קבוצה ב'

Bidding Service

DSP-Y

192.168.84.201:50057

שירות BFE

DSP-Y

192.168.84.202:50051

Auction Service

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 משתמש בשירותים של המוכר

כדי לתקשר בין אפליקציית הבדיקה המקומית לבין שירותי B&A, נעשה שימוש ברשת גשר של Docker. רשת הגשר ba-dev נוצרת על ידי סקריפט ההגדרה של אפליקציית הבדיקה המקומית. לשירותי B&A מוקצית כתובת IP ברשת המשנה של 192.168.84.0.

לדוגמה, כשאתם קוראים ל-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 מידע נוסף