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

1. מבוא

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

הטכנולוגיות שבהן הקונים משתמשים:

  • שירות קצה לקונים
  • Bidding Service

Seller stack:

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

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

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

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

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

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

‫2.1 הכנת מחשב Linux

משתמשים במכונת Linux מקומית או מקצים מכונת Linux וירטואלית של ספק שירותי הענן שבחרתם. כדי לשפר את זמן הבנייה, מומלץ להשתמש ב-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 מעניקה למשתמש הרשאות ברמת הבסיס. למידע נוסף, אפשר לקרוא את המדריך בנושא Docker ללא sudo.

‫2.3 מפעילים את אפליקציית הבדיקה המקומית הנלווית

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

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

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

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

./setup

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

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

./start

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

‫3.1 מורידים את התפריט הנפתח B&A Services (שירותי 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 (gcp) של כל 4 השירותים. אם צריך, מעדכנים את הדגל --platform לספק שירותי הענן הרצוי. מידע נוסף על דגלי ה-build זמין בקובץ build_and_test_all_docker.

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

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

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

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

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

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

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 Service

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 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-Y BFE Service

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 Service

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

כתובת TEE K/V של הקונה

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

כתובת שירות המכרז של המוכר

KEY_VALUE_SIGNALS_ADDR

שירות SFE

כתובת ה-K/V של המוכר ב-BYOS

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

שירות SFE

כתובת TEE K/V של המוכר

SELLER_ORIGIN_DOMAIN

שירות SFE

מקור המוצר

BUYER_SERVER_ADDRS_JSON

שירות SFE

כתובות BFE של הקונה

4. בדיקה באמצעות Secure Invoke משורת הפקודה

‫4.1 בדיקת SFE

אפשר גם להשתמש בכלי Secure Invoke שכלול בחבילת B&A Services כדי לקרוא לשירותים ישירות משורת הפקודה.

‫4.1.2 SFE SelectAd payload

בקשת ה-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]"
          }
        ]
      }
    }
  }
}

שומרים את הקובץ בשם sfe-test.json בתיקיית הבסיס של מאגר Set A's B&A Services(סקריפט ה-build של B&A יעתיק את הקבצים בתיקיית הבסיס של המאגר לתיקייה /src/workspace של תמונת ה-Docker).

‫4.1.2 התקשרות אל SFE באמצעות Secure Invoke

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

אחרי שהמערכת מקבלת את הצעות המחיר, מודול 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 תגובה מ-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

התגובה של 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

כדאי לקרוא את המאמר בנושא הפעלת Chrome משורת הפקודה ב-Chromium, ולהפעיל אותו עם התכונות הניסיוניות הבאות:

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

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

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

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

בשורה העליונה של האפליקציה, בחלונית Controls (אמצעי בקרה) יש לחצנים לסימולציה של תצורות שונות של מכרזים. שתי החלוניות האחרות מכילות מסגרות iframe מאתרי המפרסם והמוציא לאור.

צילום מסך של קבוצות של נושאים בכלי הפיתוח ל-Chrome. צילום מסך של קבוצות של נושאים בכלי הפיתוח ל-Chrome.

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

מודעה שמוצגת בדפדפן של חברת B&A.

אם שירותי B&A ואפליקציית הבדיקה המקומית מוגדרים בצורה נכונה, המודעה הקודמת תוצג בחלונית Publisher site iframe (מודעת 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-A ו-DSP-B משתתפים במכרזים במכשיר
  • DSP-X ו-DSP-Y משתתפים במכרזי B&A

יש ארבע פלטפורמות SSP, ולכל מוכר יש הגדרת מכרז שונה:

  • SSP-OD מפעילה מכרז שמתבצע רק במכשיר
  • SSP-BA מפעיל מכירה פומבית של מודעות בית בלבד
  • מערכת SSP-MIX מפעילה מכרז במצב משולב
  • SSP-TOP מפעיל מכרז עם כמה אתרי מכירה
    • SSP-OD/BA/MIX משתתפים כמוכרי רכיבים במכרז מרובה אתרי מכירה של SSP-TOP

תרשים העיצוב

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

ב-Codelab הזה, אנחנו מריצים שני סטים של B&A זה לצד זה.

הגדרה

שירות

משתתף

כתובת רשת אחת (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

  • בסט A, שירותי הקונה נמצאים בשימוש של DSP-X ושירותי המוכר נמצאים בשימוש של SSP-BA
  • בסט B, שירותי הקונה נמצאים בשימוש של DSP-Y ושירותי המוכר נמצאים בשימוש של SSP-MIX

כדי לתקשר בין האפליקציה לבדיקה מקומית לבין שירותי B&A, נעשה שימוש ברשת גשר של Docker. רשת הגישור ba-dev נוצרת על ידי סקריפט ההגדרה של Local Testing App. לשירותי 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 Services באופן מקומי במחשב שלכם, ושיש לכם הבנה טובה יותר של האופן שבו השירותים מתקשרים זה עם זה.

6.1. תמיכה טכנית

‫6.2 מידע נוסף