اختبار B&A للويب بشكل كامل على الجهاز

1. مقدمة

تتألف خدمات عروض الأسعار والمزادات (B&A) من 4 خدمات للشراة والبائعين لتسهيل مزاد شريحة الجمهور المحمية:

مجموعة المستخدِمين المحتملين:

  • خدمة واجهة المشتري
  • خدمة عروض الأسعار

مجموعة البائع:

  • خدمة البائع في الواجهة الأمامية
  • خدمات المزاد

يرشدك هذا الدليل التعليمي حول رموز البرامج إلى كيفية إعداد عملية الإعداد الشاملة واختبارها في بيئتك المحلية. من المتوقّع أن تستغرق الجولة الإرشادية ساعة واحدة تقريبًا، باستثناء وقت إنشاء الخدمة الأولي.

على الرغم من أنّه يمكنك العمل على رمز جهة الشراء أو رمز جهة البيع فقط، من المفيد إعداد عملية الربط التام بين الأنظمة في بيئتك المحلية لفهم طريقة عمل حِزم المستخدِم والمُورِّد معًا بشكل أفضل. من خلال إعداد كلتا الحِزم، يمكنك أن تكون أكثر ثقة لاحقًا عند الدمج مع حِزمة البائع أو المشتري الخاصة بجهة أخرى. ويساعدك اختبار الخدمات محليًا أيضًا في توفير تكلفة التطوير.

في هذا الدرس التطبيقي حول الترميز، سنستخدم تطبيق "الاختبار المحلي" من "اختبار A/B" كمرجع إرشادي.

يستضيف تطبيق الاختبار المحلي المصاحب موارد مختلفة للمشترين والبائعين المستخدَمة في مزاد 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 للقيمة/المفتاح. يجب بدء تشغيل التطبيق قبل تشغيل خدمات 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 على الجهاز نفسه، لذا سننزِّل المستودع إلى مجلدين مختلفَين.

المجموعة أ:

نزِّل مستودع 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، نفِّذ الأمر التالي لإنشاء الخدمات الأربعة كلها:

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) لجميع الخدمات الأربع. عدِّل علامة --platform لموفّر الخدمات السحابية الذي تختاره إذا لزم الأمر. للاطّلاع على مزيد من المعلومات عن علامات الإنشاء، اطّلِع على ملف build_and_test_all_docker.

قد يستغرق الإنشاء الأولي ساعتَين في حال استخدام جهاز يتضمّن 64 نواة، ويزداد وقت الإنشاء بشكل خطي حسب عدد النوى. إذا كنت تستخدم جهازًا مزوّدًا بمعالج 32 مركزًا، قد تستغرق العملية 4 ساعات. إذا كنت تستخدم جهازًا مزوّدًا بمعالج 16 مركزًا، قد يستغرق ذلك 8 ساعات.

يُرجى العِلم أنّ عمليات الإنشاء اللاحقة تستخدِم ذاكرة التخزين المؤقت، ومن المفترض أن تستغرق كل عملية إنشاء مدة تتراوح بين 5 و20 دقيقة تقريبًا.

قصة مصورة ذات صلة من xkcd:

تعرِض هذه الصورة اثنين من المبرمجين يأخذان استراحة في المكتب، ما يدفع المدير إلى مطالبتهما بالعودة إلى العمل، فيقول العاملان إنّهما يُعدّان الرمز البرمجي، ويوافق المدير على ذلك، ويرى كاتب هذه القصة المضحكة أنّ هذا هو العذر الأول والوحيد المقبول للاستراحة.

(قابلتُ راندي مونرو من xkcd أثناء كتابة هذا الدرس التطبيقي، وأخبرته أنّني أضفت هذه القصة المضحكة هنا)

3.3 تشغيل الخدمات

لأغراض الاختبار، سنشغّل 8 خدمات (4 خدمات لكل حزمة). يتم إعداد كل أمر لاستخدام الموارد التي يوفّرها تطبيق "الاختبار على الجهاز". ننصح بشدة باستخدام مدير نوافذ مثل tmux.

افتح 8 نوافذ وحدة طرفية إضافية على الأقل، ونفِّذ الأوامر التالية في كل جلسة.

يُرجى العلم أنّه يجب أن يكون خادم تطبيق "الاختبار على الجهاز فقط" قيد التشغيل في عملية منفصلة، لأنّ التطبيق سيعرض نصوص عروض الأسعار وعمليات التقييم.

3.3.1 مجموعة الطلبات "أ"

الخدمة

Command

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 مجموعة الأوامر ب

الخدمة

Command

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

جميع الخدمات

العلامات التي يجب ضبطها لأمر docker

SKIP_TLS_VERIFICATION

جميع الخدمات

عند إجراء الاختبار على جهازك المحلي، قد تحتاج إلى استخدام شهادة موقعة ذاتيًا لا تجتاز عملية التحقّق من نظير طبقة المقابس الآمنة في curl. تعمل العلامة على إيقاف عملية التحقّق من المثيلين إلى جانب التحقّق من اسم المضيف في طبقة المقابس الآمنة.

الإعداد التلقائي هو 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

عنوان مفتاح/قيمة BYOS الخاص بالمشتري

BUYER_TKV_V2_SERVER_ADDR

خدمة BFE

عنوان مفتاح/قيمة TEE الخاص بالمشتري

BIDDING_SERVER_ADDR

خدمة BFE

عنوان خدمة عروض أسعار المشتري

AUCTION_PORT

خدمات المزاد

منفذ "خدمات المزاد" الإعداد التلقائي هو 50061

AUCTION_JS_URL

خدمات المزاد

عنوان URL لمنطق التقييم

BUYER_REPORT_WIN_URL

خدمات المزاد

عنوان 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 الخاص بالبائع

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

خدمة SFE

عنوان مفتاح/قيمة 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 لإطار عمل المعالجة المحدودة

تمّت تعبئة طلب 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 في المجموعة "أ" (سينسخ نص إنشاء 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 Services.

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(). ينشئ المتصفّح هذه الحمولة، ويرسلها من العلامة إلى 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 لوحدة التحكّم في حدود الجلسة وإرسالها إلى 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 التي فتحتها باستخدام العلامات. قد يختلف العنوان الدقيق الذي تزوره إذا كنت تستخدم جهاز افتراضيًا له اسم مضيف مختلف.

لقطة شاشة لتطبيق الاختبار على الجهاز الذي تتم زيارته في متصفّح

في الصفّ العلوي من التطبيق، تحتوي لوحة "عناصر التحكّم" على الأزرار التي تتيح محاكاة إعدادات مختلفة للمزادات. تحتوي اللوحةان الأخريان على إطارات iframe من الموقعَين الإلكترونيَين للمعلِن والناشر.

عند النقر على الزرّ "تحميل علامات منصّات عرض الإعلانات" في إطار iframe لصفحة المعلِن، تتم إضافة نص برمجي من كلّ منصّة عرض إعلانات إلى الصفحة. وتُضيف هذه النصوص البرمجية المستخدم إلى مجموعات الاهتمامات. افتح "أدوات مطوّري البرامج في Chrome"، وانتقِل إلى "التطبيق / التخزين / مجموعات الاهتمامات" لفحص مجموعات الاهتمامات التي تمّ ربطها بعلامات منصّة إدارة الأداء (DSP):

لقطة شاشة لمجموعات الاهتمامات في &quot;أدوات مطوّري البرامج في Chrome&quot;

بعد ذلك، انقر على الأزرار في لوحة "عناصر التحكّم" لمحاكاة أنواع مختلفة من المزادات.

إعلان معروض في متصفّح من B&A

في حال تم إعداد "خدمات B&A" و"تطبيق الاختبار على الجهاز فقط" بشكل صحيح، يتم عرض الإعلان السابق في لوحة "إطار iframe لموقع الناشر الإلكتروني".

5.3 إعدادات مزاد تطبيق الاختبار على الجهاز

في تطبيق الاختبار المحلي المصاحب، يتم استضافة المشاركين التاليين، ويتم تمييزهم حسب رقم المنفذ (يُعدّ المنفذ المختلف مصدرًا مختلفًا):

مُشارِك

الوصف

المنفذ

المعلِن

تحميل علامات منصّة إدارة الأداء (DSP) على الصفحة

4001

الناشر

تحميل علامات SSP على الصفحة

4002

DSP-A

مشتري على الجهاز فقط

5001

DSP-B

مشتري على الجهاز فقط

5002

DSP-X

مشتري الإعلانات التجارية

5003

DSP-Y

مشتري الإعلانات التجارية

5004

SSP-TOP

البائع من المستوى الأعلى

6001

SSP-OD

البائع على الجهاز فقط

6002

SSP-BA

بائع للأجهزة الجوّالة والأجهزة اللوحية فقط

6003

SSP-MIX

البائع الذي يستخدم نموذجًا مختلطًا

6004

هناك أربعة منصّات لإدارة الأداء:

  • DSP-A وDSP-B يشاركان في المزادات على الجهاز
  • DSP-X وDSP-Y يشاركان في مزادات B&A

هناك أربعة وسطاء عرض مبيعات، وينفّذ كل بائع إعدادات مزاد مختلفة:

  • SSP-OD تُجري مزادًا على الجهاز فقط
  • SSP-BA تُجري مزادًا للإعلانات الصورية والإعلانات المتجاوبة فقط
  • SSP-MIX يُجري مزادًا بالوضع المختلط
  • SSP-TOP يدير مزادًا يضمّ بائعين متعدّدين
    • SSP-OD/BA/MIX مشاركة بائعي المكوّنات في مزاد "SSP-TOP" المتعدد البائعين

للاطّلاع على البنية الكاملة، اطّلِع على مخطّط التصميم.

5.4 إعداد عروض الأسعار وخدمات المزاد

في هذا الدليل التعليمي حول رموز البرامج، نُجري مجموعتَين من اختبارات A/B جنبًا إلى جنب.

تأهّب

الخدمة

مُشارِك

عنوان شبكة 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

  • في المجموعة "أ"، يستخدم 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- الخاتمة

نأمل أن تكون قد تعرّفت الآن على كيفية تشغيل حِزمة "خدمات البنية الأساسية والتطبيقات" محليًا على جهازك، وفهمت بشكل أفضل كيفية تواصل الخدمات مع بعضها.

6.1. الدعم الفني

6.2 مزيد من المعلومات