1. Введение
Услуги по торгам и аукционам (B&A) включают в себя 4 услуги для покупателей и продавцов, облегчающие проведение аукциона с защищенной аудиторией :
Стек покупателя:
- Обслуживание клиентов на стороне покупателя
- Служба торгов
Стек продавца:
- Обслуживание клиентов продавца
- Аукционный сервис
В этой лабораторной работе вы настроите и протестируете всю систему в вашей локальной среде. Ожидается, что весь процесс займёт около 1 часа, не считая времени на первоначальную сборку сервиса.
Даже если вы работаете только над кодом покупателя или продавца, полезно настроить сквозной процесс в вашей локальной среде, чтобы лучше понять, как взаимодействуют стеки покупателя и продавца. Настроив оба стека, вы будете более уверенно работать в дальнейшем при интеграции с соответствующим стеком покупателя или продавца другой стороны. Локальное тестирование сервисов также экономит затраты на разработку.
В этой лабораторной работе мы будем использовать приложение B&A Local Testing в качестве пошагового руководства.
Сопутствующее приложение для локального тестирования содержит различные ресурсы для покупателей и продавцов, используемые на аукционах B&A. Приложение также предоставляет пользовательский интерфейс по адресу http://localhost:3000 , где можно моделировать различные конфигурации аукциона.
2. Настройка среды
2.1 Подготовка машины Linux
Используйте локальную машину Linux или создайте виртуальную машину Linux у выбранного вами облачного провайдера. Для ускорения сборки рекомендуется использовать не менее 16 ядер, а предпочтительно 32 и более.
Обратите внимание, что мы будем загружать HTML-страницу с http://localhost:3000 этой машины. Если виртуальная машина не предоставляет графический интерфейс, убедитесь, что порт 3000 доступен для вашей локальной машины, чтобы вы могли к ней подключиться.
2.2 Установка Докера
Мы используем 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 предоставляет пользователю права root. Подробнее см. в руководстве по Docker без sudo.
2.3 Запустите сопутствующее приложение для локального тестирования
Сопутствующее приложение предоставляет такие ресурсы, как скрипты для имитации торгов или подсчёта очков, а также конечные точки K/V BYOS. Приложение следует запустить до запуска сервисов B&A, чтобы ресурсы можно было загрузить в сервисы.
Загрузите репозиторий Local Testing App :
git clone https://github.com/privacysandbox/bidding-auction-local-testing-app.git
Из корня репозитория запустите скрипт установки :
./setup
Скрипт настройки создаст сеть Docker ba-dev , сгенерирует SSL-сертификаты и построит образ тестового приложения.
После успешной сборки запустите стартовый скрипт :
./start
3. Создайте и управляйте B&A локально
3.1. Свернуть B&A Services
Мы запустим два набора служб 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 выполните следующую команду для сборки всех 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 .
Первоначальная сборка может занять 2 часа на 64-ядерном компьютере, и время сборки линейно зависит от количества ядер. На 32-ядерном компьютере сборка может занять 4 часа. На 16-ядерном компьютере сборка может занять 8 часов.
Обратите внимание, что последующие сборки используют кэш, и каждая сборка должна занимать около 5–20 минут.
Два программиста бездельничают во время сборки.
( Я встретил Рэндалла Манро из xkcd во время написания этой лабораторной работы и сказал ему, что добавил этот комикс сюда )
3.3 Запуск служб
Для тестирования мы запустим 8 служб (по 4 службы в стеке). Каждая команда настроена на использование ресурсов, предоставляемых приложением Local Testing. Настоятельно рекомендуется использовать оконный менеджер, например, tmux .
Откройте не менее 8 дополнительных окон терминала и выполните следующие команды в каждом сеансе.
Обратите внимание, что сервер приложения локального тестирования должен быть запущен в отдельном процессе, поскольку скрипты ставок и подсчета очков будут обслуживаться приложением.
3.3.1 Команды набора А
Услуга | Команда |
Служба торгов | |
| |
Аукционный сервис | |
Служба | |
3.3.2 Набор команд B
Услуга | Команда |
Служба торгов | |
| |
Аукционный сервис | |
Служба | |
3.3.2 Переменные среды для локальных стартовых скриптов
Для управления поведением при запуске можно использовать следующие переменные среды.
Env var | Доступность | Описание |
| Все услуги | Флаги для установки команды docker |
| Все услуги | При тестировании на локальном компьютере может потребоваться использовать самоподписанный сертификат, который не проходит проверку SSL-сервера По умолчанию — |
| Все услуги | Уровень журналов обслуживания. Более высокий уровень обеспечивает больше журналов. 0 — самый низкий, 10 — самый высокий. По умолчанию |
| Служба торгов | Порт сервиса торгов. По умолчанию — |
| Служба торгов | URL логики торгов |
| Служба торгов | Выход данных для обучения модели |
| Служба торгов | Аргументы в пользу заключения торгов |
| BFE-сервис | Порт службы BFE. По умолчанию — |
| BFE-сервис | Адрес BYOS K/V покупателя |
| BFE-сервис | Адрес покупателя TEE K/V |
| BFE-сервис | Адрес службы торгов покупателя |
| Аукционный сервис | Порт службы аукционов. По умолчанию — |
| Аукционный сервис | URL логики подсчета очков |
| Аукционный сервис | URL-адрес отчета о выигрыше покупателя |
| Аукционный сервис | Скрипт отчета о победе покупателя |
| Аукционный сервис | Скрипт отчета о выигрыше покупателя для PAS |
| Служба SFE | Порт службы SFE. По умолчанию — |
| Служба SFE | Адрес аукционной службы продавца |
| Служба SFE | Адрес продавца BYOS K/V |
| Служба SFE | Адрес продавца TEE K/V |
| Служба SFE | Происхождение продавца |
| Служба SFE | Адреса BFE покупателя |
4. Тестирование с помощью Secure Invoke из командной строки
4.1 SFE-тестирование
Вы также можете использовать инструмент Secure Invoke , входящий в пакет B&A Services, для вызова служб непосредственно из командной строки.
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 в корневой папке репозитория B&A Services набора A (скрипт сборки B&A скопирует файлы из корневой папки репозитория в папку /src/workspace образа Docker).
4.1.2 Вызов SFE с помощью безопасного вызова
Выполните следующую команду из корневой папки репозитория 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 Запрос 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 с помощью безопасного вызова
Выполните следующую команду из корневой папки репозитория 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 от 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"
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-окна с сайтов рекламодателя и издателя.
Скриншот групп по интересам в Chrome DevTools.
Затем нажмите кнопки на панели «Элементы управления», чтобы имитировать различные типы аукционов.

Если службы B&A и приложение Local Testing настроены правильно, предыдущее объявление отображается на панели «iframe сайта издателя».
5.3 Конфигурация аукциона локального тестового приложения
В сопутствующем локальном тестовом приложении размещены следующие участники, различающиеся по номеру порта (другой порт считается кросс-источником):
Участник | Описание | Порт |
Рекламодатель | Загружает теги DSP на страницу | |
Издатель | Загружает теги SSP на страницу | |
| Покупатель на устройстве | |
| Покупатель на устройстве | |
| Покупатель B&A | |
| Покупатель B&A | |
| Продавец высшего уровня | |
| Продавец, работающий только на устройстве | |
| Продавец, работающий только с B&A | |
| Продавец смешанного типа | |
Существует четыре 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
-
Полную архитектуру смотрите на схеме проекта .
5.4 Конфигурация служб торгов и аукционов
В этой лабораторной работе мы параллельно запускаем два набора B&A.
Набор | Услуга | Участник | сетевой адрес |
Набор А | Служба торгов | | |
BFE-сервис | | | |
Аукционный сервис | | | |
Служба SFE | | | |
Набор Б | Служба торгов | | |
BFE-сервис | | | |
Аукционный сервис | | | |
Служба SFE | | | |
Приложение | Приложение для локального тестирования | Все | |
- В наборе A услуги покупателя используются
DSP-X, а услуги продавца —SSP-BA - В наборе B услуги покупателя используются
DSP-Y, а услуги продавца —SSP-MIX
Для взаимодействия между приложением Local Testing и сервисами B&A используется сеть Docker Bridge . Сеть ba-dev Bridge создаётся скриптом настройки приложения Local Testing. Сервисам 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 .
6. Подведение итогов
Надеемся, что к настоящему моменту вы уже ознакомились с запуском стека служб B&A локально на своем компьютере и стали лучше понимать, как службы взаимодействуют друг с другом.
6.1 Техническая поддержка
- Если у вас возник вопрос по настройке приложения локального тестирования, создайте запрос в репозитории LTA .
- Если у вас есть вопрос по услугам торгов и аукционов, откройте вопрос в репозитории услуг B&A .
6.2 Узнать больше
- Узнайте больше об архитектуре B&A для веб-сайтов
- Узнайте больше об интеграции продавца с B&A для веб-сайтов