تست B&A برای وب سرتاسر به صورت محلی

۱. مقدمه

خدمات مناقصه و حراج (B&A) شامل ۴ سرویس برای خریداران و فروشندگان است تا حراج مخاطبان محافظت‌شده را تسهیل کند:

مجموعه خریداران:

  • خدمات پشتیبانی خریدار
  • خدمات مناقصه

پشته فروشنده:

  • خدمات پشتیبانی فروشنده
  • خدمات حراج

این آزمایشگاه کد، شما را در راه‌اندازی و آزمایش کامل تنظیمات در محیط محلی‌تان راهنمایی می‌کند. انتظار می‌رود این آموزش، بدون احتساب زمان ساخت اولیه سرویس، تقریباً ۱ ساعت طول بکشد.

حتی اگر فقط روی کد سمت خرید یا کد سمت فروش کار کنید، مفید است که جریان سرتاسری را در محیط محلی خود راه‌اندازی کنید تا بهتر بفهمید که چگونه مجموعه‌های خریدار و فروشنده با یکدیگر کار می‌کنند. با راه‌اندازی هر دو مجموعه، می‌توانید بعداً وقتی با مجموعه خریدار یا فروشنده مربوطه طرف دیگر ادغام می‌شوید، اطمینان بیشتری داشته باشید. آزمایش سرویس‌ها به صورت محلی همچنین در هزینه‌های توسعه شما صرفه‌جویی می‌کند.

در این آزمایشگاه کد، از اپلیکیشن تست محلی B&A به عنوان راهنمای گام به گام استفاده خواهیم کرد.

برنامه تست محلی همراه، منابع مختلف خریدار و فروشنده مورد استفاده در حراج B&A را میزبانی می‌کند. این برنامه همچنین یک رابط کاربری در http://localhost:3000 ارائه می‌دهد که در آن می‌توانید پیکربندی‌های مختلف حراج را شبیه‌سازی کنید.

۲. تنظیمات محیطی

۲.۱ آماده‌سازی یک دستگاه لینوکس

از یک دستگاه لینوکس محلی استفاده کنید، یا یک ماشین مجازی لینوکس از ارائه دهنده ابری مورد نظر خود تهیه کنید. برای بهبود زمان ساخت، حداقل ۱۶ هسته به عنوان حداقل توصیه می‌شود و ۳۲ هسته یا بیشتر ترجیح داده می‌شود.

توجه داشته باشید که ما یک صفحه HTML را از http://localhost:3000 این دستگاه بارگذاری خواهیم کرد. اگر ماشین مجازی رابط کاربری گرافیکی (GUI) ارائه نمی‌دهد، مطمئن شوید که پورت 3000 برای دستگاه محلی شما قابل دسترسی است تا بتوانید به آن متصل شوید.

۲.۲ نصب داکر

ما از داکر برای اجرای سرویس‌ها و برنامه تست محلی استفاده می‌کنیم.

ما از اسکریپت راحتی برای نصب داکر در یک محیط آزمایشی استفاده خواهیم کرد.

# 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-less، گروه Docker به کاربر دسترسی سطح ریشه می‌دهد. برای کسب اطلاعات بیشتر، راهنمای sudo-less Docker را مطالعه کنید.

۲.۳ برنامه تست محلی همراه را اجرا کنید

برنامه همراه، منابعی مانند اسکریپت‌های پیشنهاد قیمت یا امتیازدهی آزمایشی و نقاط پایانی K/V BYOS آزمایشی را ارائه می‌دهد. این برنامه باید قبل از اجرای سرویس‌های B&A اجرا شود تا منابع بتوانند در سرویس‌ها بارگذاری شوند.

مخزن Local Testing App را باز کنید:

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

از ریشه مخزن، اسکریپت راه‌اندازی را اجرا کنید:

./setup

اسکریپت راه‌اندازی، شبکه ba-dev Docker را ایجاد می‌کند، گواهینامه‌های SSL تولید می‌کند و تصویر برنامه آزمایشی را می‌سازد.

پس از موفقیت‌آمیز بودن ساخت، اسکریپت شروع را اجرا کنید:

./start

۳. ساخت و اجرای 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
`

۳.۲ ساخت سرویس‌ها

از پوشه ریشه هر پوشه 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 ( gcp ) از هر 4 سرویس ایجاد می‌کند. در صورت نیاز، پرچم --platform را به ارائه‌دهنده ابری مورد نظر خود به‌روزرسانی کنید. برای کسب اطلاعات بیشتر در مورد پرچم‌های ساخت، فایل build_and_test_all_docker را بررسی کنید.

اگر از یک دستگاه ۶۴ هسته‌ای استفاده می‌کنید، ساخت اولیه ممکن است ۲ ساعت طول بکشد و زمان ساخت به صورت خطی با تعداد هسته‌ها تغییر می‌کند. اگر از یک دستگاه ۳۲ هسته‌ای استفاده می‌کنید، ممکن است ۴ ساعت طول بکشد. اگر از یک دستگاه ۱۶ هسته‌ای استفاده می‌کنید، ممکن است ۸ ساعت طول بکشد.

توجه داشته باشید که ساخت‌های بعدی از حافظه پنهان استفاده می‌کنند و هر ساخت باید حدود ۵ تا ۲۰ دقیقه طول بکشد.

کمیک مرتبط xkcd :

دو برنامه‌نویس در دفتر کارشان تنبلی می‌کنند. مدیری به آنها می‌گوید که به سر کار برگردند، کارگران می‌گویند که کد در حال کامپایل شدن است و مدیر با این موضوع مشکلی ندارد. نویسنده این کمیک این را بهانه اصلی برای تنبلی می‌داند. دو برنامه‌نویس در حین اجرای یک پروژه، از انجام وظایفشان شانه خالی می‌کنند.

( من هنگام نوشتن این codelab با رندال مونرو از xkcd آشنا شدم و به او گفتم که این کمیک را اینجا اضافه کرده‌ام .)

۳.۳ اجرای سرویس‌ها

برای آزمایش، ما ۸ سرویس (۴ سرویس در هر پشته) را اجرا خواهیم کرد. هر دستور طوری تنظیم شده است که از منابع ارائه شده توسط برنامه تست محلی (Local Testing App) استفاده کند. اکیداً توصیه می‌شود از یک مدیر پنجره مانند tmux استفاده کنید.

حداقل ۸ پنجره ترمینال دیگر باز کنید و دستورات زیر را در هر جلسه اجرا کنید.

توجه داشته باشید که سرور برنامه تست محلی باید از قبل در یک فرآیند جداگانه در حال اجرا باشد، زیرا اسکریپت‌های پیشنهاد قیمت و امتیازدهی توسط برنامه ارائه می‌شوند.

۳.۳.۱ دستورات تنظیم 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

سرویس BFE DSP-X

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

۳.۳.۲ تنظیم دستورات B

خدمات

فرمان

سرویس مناقصه DSP-Y

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

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

SKIP_TLS_VERIFICATION=true \

./tools/debug/start_bidding

سرویس BFE DSP-Y

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

۳.۳.۲ متغیرهای محیطی برای اسکریپت‌های شروع محلی

متغیرهای محیطی زیر می‌توانند برای کنترل رفتار راه‌اندازی استفاده شوند.

متغیر Env

در دسترس بودن

توضیحات

DOCKER_RUN_ARGS_STRING

همه خدمات

پرچم‌هایی که باید برای دستور docker تنظیم شوند

SKIP_TLS_VERIFICATION

همه خدمات

وقتی روی دستگاه محلی خود آزمایش می‌کنید، ممکن است نیاز به استفاده از یک گواهی خودامضا داشته باشید که بررسی تأیید همتای SSL در curl را با شکست مواجه می‌کند. این پرچم، تأیید همتا را به همراه بررسی نام میزبان SSL غیرفعال می‌کند.

پیش‌فرض روی false است.

PS_VERBOSITY

همه خدمات

سطح گزارش‌های سرویس. سطح بالاتر، گزارش‌های بیشتری را ارائه می‌دهد. ۰ کمترین و ۱۰ بیشترین است. مقدار پیش‌فرض 10 است.

BIDDING_PORT

خدمات مناقصه

پورت سرویس مناقصه. مقدار پیش‌فرض 50057 است.

BIDDING_JS_URL

خدمات مناقصه

آدرس اینترنتی منطق پیشنهاد قیمت

EGRESS_SCHEMA_URL

خدمات مناقصه

خروجی داده‌ها برای آموزش مدل

INFERENCE_ARGS

خدمات مناقصه

استدلال‌هایی برای استنتاج مبتنی بر پیشنهاد قیمت

BFE_PORT

خدمات BFE

پورت سرویس BFE. مقدار پیش‌فرض 50051 است.

BUYER_KV_SERVER_ADDR

خدمات BFE

آدرس BYOS K/V خریدار

BUYER_TKV_V2_SERVER_ADDR

خدمات BFE

آدرس TEE K/V خریدار

BIDDING_SERVER_ADDR

خدمات BFE

آدرس خدمات مناقصه خریدار

AUCTION_PORT

خدمات حراج

پورت سرویس حراج. پیش‌فرض 50061

AUCTION_JS_URL

خدمات حراج

آدرس اینترنتی منطق امتیازدهی

BUYER_REPORT_WIN_URL

خدمات حراج

آدرس اینترنتی گزارش برد خریدار

BUYER_REPORT_WIN_SCRIPT

خدمات حراج

اسکریپت گزارش برد خریدار

BUYER_PAS_REPORT_WIN_SCRIPT

خدمات حراج

اسکریپت گزارش برد خریدار برای PAS

SFE_PORT

خدمات SFE

پورت سرویس SFE. مقدار پیش‌فرض 50053 است.

AUCTION_SERVER_ADDR

خدمات SFE

آدرس خدمات حراج فروشنده

KEY_VALUE_SIGNALS_ADDR

خدمات SFE

آدرس BYOS K/V فروشنده

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

خدمات SFE

آدرس TEE K/V فروشنده

SELLER_ORIGIN_DOMAIN

خدمات SFE

اصالت فروشنده

BUYER_SERVER_ADDRS_JSON

خدمات SFE

آدرس‌های BFE خریدار

۴. تست با Secure Invoke از خط فرمان

۴.۱ آزمایش SFE

همچنین می‌توانید از ابزار Secure Invoke که در بسته B&A Services موجود است، برای فراخوانی مستقیم سرویس‌ها از خط فرمان استفاده کنید.

۴.۱.۲ بار داده 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 از ایمیج داکر کپی می‌کند).

۴.۱.۲ فراخوانی SFE با فراخوانی امن

دستور زیر را از پوشه ریشه مخزن سرویس‌های 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]}}}

۴.۲ آزمایش BFE

۴.۲.۱ درخواست BFE GetBids

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

فایل را با نام bfe-test.json در پوشه‌ی ریشه‌ی مخزن سرویس‌های B&A ذخیره کنید.

۴.۲.۲ فراخوانی BFE با فراخوانی امن

دستور زیر را از پوشه ریشه مخزن سرویس‌های 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":{}}

۴.۳ بررسی لاگ‌های SFE

به ترمینال مراجعه کنید و لاگ‌های SFE را بررسی کنید. در ادامه به بررسی برخی از لاگ‌های قابل توجه در خروجی خواهیم پرداخت.

۴.۳.۱ بار داده رمزگذاری شده درخواست SelectAd

در این خروجی لاگ SFE، ما payload رمزگذاری‌شده‌ی فراخوانی 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...

۴.۳.۲ بار داده رمزگشایی شده

در این خروجی، ما فایل رمزگشایی‌شده‌ی فراخوانی 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: "[]" } }}

۴.۳.۳ درخواست 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

۴.۳.۴ پاسخ 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 {
}

۴.۳.۵ درخواست 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"

۴.۳.۶ پاسخ 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
}

۴.۳.۷ پاسخ 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"

۵. تست با برنامه تست محلی از طریق مرورگر

۵.۱ کروم را باز کنید

مقاله 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 میزبانی کرده‌ایم، بارگذاری کند.

مهم: قبل از باز کردن آن از خط فرمان با پرچم‌های B&A، مطمئن شوید که از تمام نمونه‌های Chrome به طور کامل خارج شده‌اید. برای خروج از تمام فرآیندهای Chrome، دستور ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9 از خط فرمان اجرا کنید.

۵.۲ از رابط کاربری برنامه آزمایشی محلی دیدن کنید

رابط کاربری برنامه را می‌توانید در آدرس http://localhost:3000 در مرورگر کرومی که با پرچم‌ها باز کرده‌اید، پیدا کنید. اگر از ماشین مجازی با نام میزبان متفاوت استفاده می‌کنید، آدرس دقیقی که بازدید می‌کنید ممکن است متفاوت باشد.

تصویری از برنامه آزمایشی محلی که در مرورگر مشاهده می‌شود تصویری از برنامه آزمایشی محلی که در مرورگر مشاهده می‌شود

در ردیف بالای برنامه، پنل «کنترل‌ها» شامل دکمه‌هایی برای شبیه‌سازی پیکربندی‌های مختلف حراج است. دو پنل دیگر شامل آی‌فریم‌هایی از سایت‌های تبلیغ‌کننده و ناشر هستند.

تصویری از گروه‌های ذینفع در Chrome DevTools. تصویری از گروه‌های ذینفع در Chrome DevTools.

سپس، روی دکمه‌های پنل «کنترل‌ها» کلیک کنید تا انواع مختلف حراج را شبیه‌سازی کنید.

تبلیغی که در مرورگر B&A نمایش داده شده است.

اگر سرویس‌های B&A و برنامه تست محلی به درستی تنظیم شده باشند، تبلیغ قبلی در پنل «iframe سایت ناشر» نمایش داده می‌شود.

۵.۳ پیکربندی حراج برنامه آزمایشی محلی

در برنامه تست محلی همراه، شرکت‌کنندگان زیر میزبانی می‌شوند که بر اساس شماره پورت (پورت متفاوت، کراس-اوریجین در نظر گرفته می‌شود) از هم متمایز می‌شوند:

شرکت‌کننده

توضیحات

بندر

تبلیغ کننده

تگ‌های 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 شرکت می‌کنند.

برای معماری کامل، نمودار طراحی را بررسی کنید.

۵.۴ پیکربندی خدمات مناقصه و مزایده

در این آزمایشگاه کد، ما دو مجموعه از B&A را در کنار یکدیگر اجرا می‌کنیم.

تنظیم

خدمات

شرکت‌کننده

آدرس شبکه ba-dev

مجموعه الف

خدمات مناقصه

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

  • در مجموعه A، خدمات خریدار توسط DSP-X و خدمات فروشنده توسط SSP-BA استفاده می‌شود.
  • در مجموعه B، خدمات خریدار توسط DSP-Y و خدمات فروشنده توسط SSP-MIX استفاده می‌شوند.

برای ارتباط بین Local Testing App و B&A Services، از یک شبکه Docker bridge استفاده می‌شود. شبکه ba-dev bridge توسط اسکریپت راه‌اندازی Local Testing App ایجاد می‌شود. به سرویس‌های 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 استفاده می‌شود.

۶. جمع‌بندی

تا اینجا، امیدواریم که با اجرای پشته سرویس‌های B&A به صورت محلی روی دستگاه خود آشنا شده باشید و درک بهتری از نحوه ارتباط سرویس‌ها با یکدیگر به دست آورده باشید.

۶.۱ پشتیبانی فنی

۶.۲ اطلاعات بیشتر