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 أثناء كتابة هذا الدرس التطبيقي، وأخبرته أنّني أضفتُ هذه الصورة الهزلية هنا)
3.3 تشغيل الخدمات
بالنسبة إلى الاختبار، سنشغّل 8 خدمات (4 خدمات لكل حزمة). تم إعداد كل أمر لاستخدام الموارد التي يوفّرها تطبيق "الاختبار المحلي". ننصحك بشدة باستخدام أداة لإدارة النوافذ، مثل tmux.
افتح 8 نوافذ إضافية على الأقل في الوحدة الطرفية، ونفِّذ الأوامر التالية في كل جلسة.
يُرجى العِلم أنّه يجب أن يكون خادم تطبيق "الاختبار المحلي" قيد التشغيل في عملية منفصلة، لأنّ التطبيق سيقدّم نصوص عروض الأسعار والنتائج.
3.3.1 أوامر المجموعة A
الخدمة | Command |
|
|
|
|
|
|
|
|
3.3.2 أوامر المجموعة B
الخدمة | Command |
|
|
|
|
|
|
|
|
3.3.2 متغيرات البيئة لبرامج بدء التشغيل المحلية
يمكن استخدام متغيرات البيئة التالية للتحكّم في سلوك بدء التشغيل.
متغير البيئة | مدى التوفّر | الوصف |
| جميع الخدمات | العلامات التي يجب ضبطها لأمر Docker |
| جميع الخدمات | عند إجراء الاختبار على جهازك المحلي، قد تحتاج إلى استخدام شهادة موقعة ذاتيًا لا تجتاز عملية التحقّق من صحة شهادة طبقة المقابس الآمنة التي يجريها القيمة التلقائية هي |
| جميع الخدمات | مستوى سجلّات الخدمة يوفّر المستوى الأعلى المزيد من السجلات. 0 هي أدنى قيمة و10 هي أعلى قيمة. القيمة التلقائية هي |
| خدمة عروض الأسعار | منفذ خدمة عروض الأسعار القيمة التلقائية هي |
| خدمة عروض الأسعار | عنوان URL لمنطق عروض الأسعار |
| خدمة عروض الأسعار | نقل البيانات لتدريب النماذج |
| خدمة عروض الأسعار | |
| BFE Service | منفذ خدمة BFE القيمة التلقائية هي |
| BFE Service | عنوان BYOS K/V الخاص بالمشتري |
| BFE Service | عنوان K/V الخاص ببيئة التنفيذ الموثوقة (TEE) للمشتري |
| BFE Service | عنوان خدمة تقديم العطاءات الخاص بالمشتري |
| خدمات المزاد | منفذ خدمة المزاد القيمة التلقائية هي |
| خدمات المزاد | عنوان URL لمنطق التسجيل |
| خدمات المزاد | عنوان URL لإعداد تقارير عن عروض الفائزين |
| خدمات المزاد | نص برمجي لإعداد تقارير عن فوز المشتري |
| خدمات المزاد | برنامج إعداد تقارير الفوز بالمزاد للمشترين في "مساحة العرض الآلي" |
| SFE Service | منفذ خدمة SFE القيمة التلقائية هي |
| SFE Service | العنوان الجغرافي لخدمة مزاد البائع |
| SFE Service | عنوان K/V الخاص بالبائع في BYOS |
| SFE Service | عنوان TEE K/V الخاص بالبائع |
| SFE Service | بلد البائع |
| 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 من المواقع الإلكترونية للمعلِن والناشر.
لقطة شاشة لمجموعات الاهتمامات في "أدوات مطوّري البرامج في Chrome"
بعد ذلك، انقر على الأزرار في لوحة "عناصر التحكّم" لمحاكاة أنواع مختلفة من المزادات.

إذا تم إعداد "خدمات B&A" و"تطبيق الاختبار المحلي" بشكلٍ صحيح، سيتم عرض الإعلان السابق في لوحة "إطار iframe الخاص بالموقع الإلكتروني للناشر".
5.3 إعدادات المزاد في تطبيق "الاختبار المحلي"
في تطبيق الاختبار المحلي المصاحب، تتم استضافة المشاركين التاليين، ويتم التمييز بينهم من خلال رقم المنفذ (يُعدّ المنفذ المختلف مصدرًا متعددًا):
مُشارِك | الوصف | المنفذ |
المعلِن | تحميل علامات منصة عرض الطلب على الصفحة |
|
الناشر | تحميل علامات منصة العرض من جهة المورّد (SSP) على الصفحة |
|
| المشتري على الجهاز فقط |
|
| المشتري على الجهاز فقط |
|
| B&A buyer |
|
| B&A buyer |
|
| بائع من المستوى الأعلى |
|
| البائع الذي يستخدم الجهاز فقط |
|
| بائع يقدّم خدمات التقييم والاستشارات فقط |
|
| البائع الذي يستخدم نموذجًا مختلطًا |
|
هناك أربع منصات 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 إعدادات خدمات عروض الأسعار والمزادات
في هذا الدرس العملي، سننفّذ مجموعتَين من عمليات المقارنة جنبًا إلى جنب.
ضبط | الخدمة | مُشارِك | عنوان شبكة |
المجموعة (أ) | خدمة عروض الأسعار |
|
|
BFE Service |
|
| |
خدمات المزاد |
|
| |
SFE Service |
|
| |
المجموعة B | خدمة عروض الأسعار |
|
|
BFE Service |
|
| |
خدمات المزاد |
|
| |
SFE Service |
|
| |
التطبيق | تطبيق الاختبار المحلي | الكل |
|
- في المجموعة 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. الدعم الفني
- إذا كان لديك سؤال حول إعداد تطبيق Local Testing App، يمكنك فتح مشكلة في مستودع LTA.
- إذا كان لديك سؤال حول "خدمات عروض الأسعار والمزادات"، يمكنك فتح مشكلة في مستودع "خدمات عروض الأسعار والمزادات".