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 |
| جميع الخدمات | عند إجراء الاختبار على جهازك المحلي، قد تحتاج إلى استخدام شهادة موقعة ذاتيًا لا تجتاز عملية التحقّق من صحة شهادة SSL التي يجريها القيمة التلقائية هي |
| جميع الخدمات | مستوى سجلّات الخدمة يوفّر المستوى الأعلى المزيد من السجلات. 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 إعدادات المزاد في تطبيق "الاختبار المحلي"
في تطبيق الاختبار المحلي المصاحب، تتم استضافة المشاركين التاليين، ويتم التمييز بينهم من خلال رقم المنفذ (يُعدّ المنفذ المختلف مصدرًا متعددًا):
مُشارِك | الوصف | المنفذ |
المعلِن | تحميل علامات منصة عرض الطلب (DSP) على الصفحة |
|
الناشر | تحميل علامات SSP على الصفحة |
|
| المشتري على الجهاز |
|
| المشتري على الجهاز |
|
| B&A buyer |
|
| B&A buyer |
|
| بائع من المستوى الأعلى |
|
| البائع الذي يستخدم الجهاز فقط |
|
| بائع يقدّم خدمات التقييم والاستشارات فقط |
|
| البائع الذي يستخدم نموذجًا مختلطًا |
|
هناك أربع منصات طلب:
- تشارك
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.
- إذا كان لديك سؤال حول "خدمات عروض الأسعار والمزادات"، يمكنك فتح مشكلة في مستودع "خدمات عروض الأسعار والمزادات".