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

1. مقدمة

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

حزمة المشترين:

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

حزمة أدوات البائع:

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

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

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

في هذا الدرس التطبيقي حول الترميز، سنستخدم تطبيق B&A Local Testing App كجولة تفصيلية.

يستضيف تطبيق الاختبار المحلي المرافق العديد من الموارد الخاصة بالمشترين والبائعين والمستخدَمة في مزاد 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 بدء تشغيل تطبيق "الاختبار المحلي" المصاحب

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

اسحب لأسفل مستودع تطبيق الاختبار المحلي:

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 إلى الأسفل:

git clone https://github.com/privacysandbox/bidding-auction-servers.git bidding-auction-servers-set-a

المجموعة B

اسحب مستودع 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 (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 أوامر المجموعة A

الخدمة

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

الخدمة

Command

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

DSP-Y خدمة 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 Service

منفذ خدمة BFE القيمة التلقائية هي 50051

BUYER_KV_SERVER_ADDR

BFE Service

عنوان BYOS K/V الخاص بالمشتري

BUYER_TKV_V2_SERVER_ADDR

BFE Service

عنوان K/V الخاص ببيئة التنفيذ الموثوقة (TEE) للمشتري

BIDDING_SERVER_ADDR

BFE Service

عنوان خدمة تقديم العطاءات الخاص بالمشتري

AUCTION_PORT

خدمات المزاد

منفذ خدمة المزاد القيمة التلقائية هي 50061

AUCTION_JS_URL

خدمات المزاد

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

BUYER_REPORT_WIN_URL

خدمات المزاد

عنوان URL لإعداد تقارير عن عروض الفائزين

BUYER_REPORT_WIN_SCRIPT

خدمات المزاد

نص برمجي لإعداد تقارير عن فوز المشتري

BUYER_PAS_REPORT_WIN_SCRIPT

خدمات المزاد

برنامج إعداد تقارير الفوز بالمزاد للمشترين في "مساحة العرض الآلي"

SFE_PORT

SFE Service

منفذ خدمة SFE القيمة التلقائية هي 50053

AUCTION_SERVER_ADDR

SFE Service

العنوان الجغرافي لخدمة مزاد البائع

KEY_VALUE_SIGNALS_ADDR

SFE Service

عنوان K/V الخاص بالبائع في BYOS

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

SFE Service

عنوان TEE K/V الخاص بالبائع

SELLER_ORIGIN_DOMAIN

SFE Service

بلد البائع

BUYER_SERVER_ADDRS_JSON

SFE Service

عناوين BFE الخاصة بالمشتري

4. الاختبار باستخدام Secure Invoke من سطر الأوامر

‫4.1 اختبار SFE

يمكنك أيضًا استخدام أداة Secure Invoke المضمّنة في حزمة "خدمات B&A" لاستدعاء الخدمات مباشرةً من سطر الأوامر.

‫4.1.2 حمولة SFE SelectAd

تمّت تعبئة طلب JSON التالي بإعدادات مزاد B&A الخاص بالناشر SSP-BA:

{
  "auction_config": {
    "seller": "https://localhost:6002",
    "auction_signals": "{\"testKey\":\"someValue\"}",
    "seller_signals": "{\"testKey\":\"someValue\"}",
    "buyer_list": [
      "https://localhost:5003",
      "https://localhost:5004"
    ],
    "per_buyer_config": {
      "https://localhost:5003": { "buyer_signals": "{\"testKey\":\"someValue\"}" },
      "https://localhost:5004": { "buyer_signals": "{\"testKey\":\"someValue\"}" }
    }
  },
  "raw_protected_audience_input": {
    "publisher_name": "http://localhost:4001",
    "generation_id": "1210718540",
    "enable_debug_reporting": true,
    "raw_buyer_input": {
      "https://localhost:5003": {
        "interest_groups": [
          {
            "name": "dsp-x-demo",
            "ad_render_ids": ["1234"],
            "bidding_signals_keys": ["demo-key"],
            "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
            "user_bidding_signals": "[1, 2, 3]"
          }
        ]
      },
      "https://localhost:5004": {
        "interest_groups": [
          {
            "name": "dsp-x-demo",
            "ad_render_ids": ["1234"],
            "bidding_signals_keys": ["demo-key"],
            "browser_signals": { "bid_count": "1", "join_count": "1", "prev_wins": "[]" },
            "user_bidding_signals": "[1, 2, 3]"
          }
        ]
      }
    }
  }
}

احفظ الملف باسم sfe-test.json في المجلد الجذر لمستودع Set A's B&A Services(سينسخ برنامج إنشاء 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

في حال تم إعداد حزمتَي "قبل" و"بعد" بشكلٍ سليم، ستتلقّى الردّ التالي الذي يشير إلى إتمام الإجراء بنجاح:

{"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 طلب 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 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 إلى خدمة المزاد

بعد تلقّي عروض الأسعار، يتم إجراء مكالمة 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 من "خدمة المزاد"

تردّ خدمة مزاد البائع بنتيجة الاستحسان:

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- الاختبار باستخدام تطبيق Local Test App من المتصفّح

‫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 من المواقع الإلكترونية للمعلِن والناشر.

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

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

إعلان معروض في متصفّح من &quot;الإعلانات والتسويق&quot;

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

‫5.3 إعدادات المزاد في تطبيق "الاختبار المحلي"

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

مُشارِك

الوصف

المنفذ

المعلِن

تحميل علامات منصة عرض الطلب على الصفحة

4001

الناشر

تحميل علامات منصة العرض من جهة المورّد (SSP) على الصفحة

4002

DSP-A

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

5001

DSP-B

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

5002

DSP-X

B&A buyer

5003

DSP-Y

B&A buyer

5004

SSP-TOP

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

6001

SSP-OD

البائع الذي يستخدم الجهاز فقط

6002

SSP-BA

بائع يقدّم خدمات التقييم والاستشارات فقط

6003

SSP-MIX

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

6004

هناك أربع منصات DSP:

  • تشارك DSP-A وDSP-B في المزادات على الجهاز فقط
  • تشارك DSP-X وDSP-Y في مزادات "عروض الأسعار والمزايدة"

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

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

للاطّلاع على البنية الكاملة، يُرجى الرجوع إلى مخطّط التصميم.

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

في هذا الدرس العملي، سننفّذ مجموعتَين من عمليات المقارنة جنبًا إلى جنب.

ضبط

الخدمة

مُشارِك

عنوان شبكة ba-dev

المجموعة (أ)

خدمة عروض الأسعار

DSP-X

192.168.84.101:50057

BFE Service

DSP-X

192.168.84.102:50051

خدمات المزاد

SSP-BA

192.168.84.103:50061

SFE Service

SSP-BA

192.168.84.104:50053

المجموعة B

خدمة عروض الأسعار

DSP-Y

192.168.84.201:50057

BFE Service

DSP-Y

192.168.84.202:50051

خدمات المزاد

SSP-MIX

192.168.84.203:50061

SFE Service

SSP-MIX

192.168.84.204:50053

التطبيق

تطبيق الاختبار المحلي

الكل

https://192.168.84.100:PORT

  • في المجموعة A، يتم استخدام خدمات المشتري من قِبل DSP-X، ويتم استخدام خدمات البائع من قِبل SSP-BA
  • في المجموعة B، تستخدم DSP-Y خدمات المشتري، بينما تستخدم SSP-MIX خدمات البائع.

للتواصل بين تطبيق "الاختبار المحلي" و"خدمات الفوترة وإدارة الحسابات"، يتم استخدام شبكة جسر Docker. يتم إنشاء شبكة ba-dev للجسر من خلال نص الإعداد البرمجي الخاص بتطبيق "الاختبار المحلي". ويتم تخصيص عنوان IP لخدمات B&A في الشبكة الفرعية 192.168.84.0.

على سبيل المثال، عند الاتصال بـ SFE الخاص بالمجموعة A من التطبيق، يتم استخدام عنوان الشبكة 192.168.84.104:50053. عند تحميل نص عرض الأسعار الوهمي من DSP-X إلى BFE، يتم استخدام https://192.168.84.100:5003/generate-bid.js.

6. الخاتمة

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

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

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