Tester les questions/réponses pour le Web de bout en bout en local

1. Introduction

Les services d'enchères et de mise aux enchères se composent de quatre services permettant aux acheteurs et aux vendeurs de faciliter une enchère Protected Audience :

Pile de l'acheteur :

  • Service frontend pour les acheteurs
  • Service d'enchères

Pile du vendeur :

  • Service d'interface utilisateur pour les vendeurs
  • Service d'enchères

Cet atelier de programmation vous explique comment configurer et tester la configuration de bout en bout dans votre environnement local. Le tutoriel devrait prendre environ une heure, sans compter le temps de création du service initial.

Même si vous ne travaillez que sur le code côté achat ou côté vente, il est utile de configurer le flux de bout en bout dans votre environnement local pour mieux comprendre comment les piles d'acheteur et de vendeur fonctionnent ensemble. En configurant les deux piles, vous pourrez être plus confiant lorsque vous vous intégrerez à la pile d'acheteur ou de vendeur respective d'une autre partie. Tester les services localement permet également de réduire vos coûts de développement.

Dans cet atelier de programmation, nous utiliserons l'application de test local B&A comme guide.

L'application de test local associée héberge diverses ressources pour les acheteurs et les vendeurs utilisées dans une enchère B&A. L'application fournit également une interface utilisateur à l'adresse http://localhost:3000, qui vous permet de simuler différentes configurations d'enchères.

2. Configuration de l'environnement

2.1 Préparer une machine Linux

Utilisez une machine Linux locale ou provisionnez une VM Linux du fournisseur cloud de votre choix. Pour améliorer le temps de compilation, nous vous recommandons d'utiliser au moins 16 cœurs (32 cœurs ou plus étant l'idéal).

Notez que nous allons charger une page HTML à partir de http://localhost:3000 de cette machine. Si la VM ne fournit pas d'interface utilisateur graphique, assurez-vous que le port 3000 est accessible à votre machine locale pour que vous puissiez vous y connecter.

2.2 Installer Docker

Nous utilisons Docker pour exécuter les services et l'application de test locale.

Nous allons utiliser le script pratique pour installer Docker dans un environnement de test.

# 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

Avertissement : Avec la configuration sans sudo, le groupe Docker accorde des droits de niveau racine à l'utilisateur. Pour en savoir plus, consultez le guide Docker sans sudo.

2.3 Démarrer l'application de test local associée

L'application associée fournit des ressources telles que des scripts de simulation d'enchères ou de scoring, ainsi que des points de terminaison BYOS K/V fictifs. L'application doit être démarrée avant l'exécution des services B&A afin que les ressources puissent être chargées dans les services.

Extrayez le dépôt de l'application de test local :

git clone https://github.com/privacysandbox/bidding-auction-local-testing-app.git

À partir de la racine du dépôt, exécutez le script de configuration :

./setup

Le script d'installation crée le réseau Docker ba-dev, génère des certificats SSL et crée l'image de l'application de test.

Une fois la compilation réussie, exécutez le script de démarrage :

./start

3. Compiler et exécuter B&A en local

3.1 Menu déroulant "Enchères et mise aux enchères"

Nous allons exécuter deux ensembles de services B&A sur la même machine. Nous allons donc extraire le dépôt dans deux dossiers différents.

Ensemble A :

Extrayez le dépôt B&A :

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

Ensemble B

Extrayez le dépôt B&A :

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

3.2 Compiler les services

Depuis le dossier racine de chaque dossier B&A, exécutez la commande suivante pour créer les quatre services :

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

Cette commande créera une instance local de la version de développement (non_prod) pour Google Cloud (gcp) des quatre services. Si nécessaire, définissez le flag --platform sur le fournisseur de services cloud de votre choix. Pour en savoir plus sur les indicateurs de compilation, consultez le fichier build_and_test_all_docker.

La compilation initiale peut prendre deux heures si vous utilisez une machine à 64 cœurs. La durée de compilation augmente de manière linéaire en fonction du nombre de cœurs. Si vous utilisez une machine à 32 cœurs, cela peut prendre quatre heures. Si vous utilisez une machine à 16 cœurs, cela peut prendre 8 heures.

Notez que les compilations suivantes utilisent le cache et que chacune d'elles devrait prendre entre 5 et 20 minutes.

Bande dessinée xkcd pertinente :

Deux programmeurs se détendent au bureau. Un responsable leur dit de se remettre au travail, mais les employés répondent que le code est en cours de compilation, ce qui convient au responsable. L'auteur de cette bande dessinée considère qu'il s'agit de la première excuse légitime pour se relâcher. Deux programmeurs se détendent pendant qu'une compilation est en cours d'exécution.

(J'ai rencontré Randall Munroe de xkcd en écrivant cet atelier de programmation et je lui ai dit que j'avais ajouté cette bande dessinée ici.)

3.3 Exécuter les services

Pour nos tests, nous allons exécuter huit services (quatre par pile). Chaque commande est configurée pour utiliser les ressources fournies par l'application Local Testing. Il est vivement recommandé d'utiliser un gestionnaire de fenêtres tel que tmux.

Ouvrez au moins huit fenêtres de terminal supplémentaires et exécutez les commandes suivantes dans chaque session.

Notez que le serveur de l'application de test en local doit déjà être en cours d'exécution dans un processus distinct, car les scripts d'enchères et de scoring seront fournis par l'application.

3.3.1 Commandes de l'ensemble A

Service

Commande

DSP-X Service d'enchères

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

Service DSP-X

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 Service d'enchères

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

Service SSP-BA

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 Ensemble de commandes B

Service

Commande

DSP-Y Service d'enchères

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

Service DSP-Y

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 Service d'enchères

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

Service SSP-BA

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 Variables d'environnement pour les scripts de démarrage locaux

Les variables d'environnement suivantes peuvent être utilisées pour contrôler le comportement au démarrage.

Variable d'environnement

Disponibilité

Description

DOCKER_RUN_ARGS_STRING

Tous les services

Indicateurs à définir pour la commande Docker

SKIP_TLS_VERIFICATION

Tous les services

Lorsque vous effectuez des tests sur votre machine locale, vous devrez peut-être utiliser un certificat autosigné qui échoue au contrôle de validation SSL du pair curl. Cette option désactive la validation du pair ainsi que la vérification du nom d'hôte SSL.

La valeur par défaut est false.

PS_VERBOSITY

Tous les services

Niveau des journaux de service. Un niveau plus élevé fournit plus de journaux. 0 est la valeur la plus basse et 10, la valeur la plus élevée. La valeur par défaut est 10.

BIDDING_PORT

Service d'enchères

Port du service d'enchères. La valeur par défaut est 50057.

BIDDING_JS_URL

Service d'enchères

URL de la logique d'enchères

EGRESS_SCHEMA_URL

Service d'enchères

Sortie des données pour l'entraînement du modèle

INFERENCE_ARGS

Service d'enchères

Arguments pour l'inférence d'enchères

BFE_PORT

Service BFE

Port du service BFE. La valeur par défaut est 50051.

BUYER_KV_SERVER_ADDR

Service BFE

Adresse BYOS K/V de l'acheteur

BUYER_TKV_V2_SERVER_ADDR

Service BFE

Adresse TEE K/V de l'acheteur

BIDDING_SERVER_ADDR

Service BFE

Adresse du service d'enchères de l'acheteur

AUCTION_PORT

Service d'enchères

Port du service d'enchères. La valeur par défaut est 50061.

AUCTION_JS_URL

Service d'enchères

URL de la logique d'évaluation

BUYER_REPORT_WIN_URL

Service d'enchères

URL de rapport sur les victoires de l'acheteur

BUYER_REPORT_WIN_SCRIPT

Service d'enchères

Script de rapport sur les victoires de l'acheteur

BUYER_PAS_REPORT_WIN_SCRIPT

Service d'enchères

Script de reporting des victoires de l'acheteur pour PAS

SFE_PORT

Service SFE

Port du service SFE. La valeur par défaut est 50053.

AUCTION_SERVER_ADDR

Service SFE

Adresse du service d'enchères du vendeur

KEY_VALUE_SIGNALS_ADDR

Service SFE

Adresse K/V BYOS du vendeur

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

Service SFE

Adresse TEE K/V du vendeur

SELLER_ORIGIN_DOMAIN

Service SFE

Origine du vendeur

BUYER_SERVER_ADDRS_JSON

Service SFE

Adresses BFE de l'acheteur

4. Tester avec Secure Invoke à partir de la ligne de commande

4.1 Tests SFE

Vous pouvez également utiliser l'outil Secure Invoke inclus dans le package B&A Services pour appeler les services directement depuis la ligne de commande.

4.1.2 Charge utile SFE SelectAd

La requête JSON suivante a été remplie avec la configuration des enchères B&A à vendeur unique de 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]"
          }
        ]
      }
    }
  }
}

Enregistrez le fichier sous le nom sfe-test.json dans le dossier racine du dépôt des services B&A de l'ensemble A(le script de compilation B&A copie les fichiers du dossier racine du dépôt dans le dossier /src/workspace de l'image Docker).

4.1.2 Appeler SFE avec Secure Invoke

Exécutez la commande suivante à partir du dossier racine du dépôt 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

Si les piles B&A sont correctement configurées, vous recevrez la réponse de réussite suivante :

{"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 Tests BFE

4.2.1 Demande 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"
}

Enregistrez le fichier sous le nom bfe-test.json dans le dossier racine du dépôt B&A Services.

4.2.2 Appeler le BFE avec Secure Invoke

Exécutez la commande suivante à partir du dossier racine du dépôt 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

Si les piles B&A sont correctement configurées, BFE renvoie la réponse suivante :

{"bids":[{"bid":6,"render":"https://localhost:5003/ad.html","interestGroupName":"dsp-x-demo"}],"updateInterestGroupList":{}}

4.3 Vérifier les journaux SFE

Accédez au terminal et vérifiez les journaux SFE. Nous allons passer en revue certains des journaux notables dans la sortie.

4.3.1 Charge utile chiffrée de la requête SelectAd

Dans ce résultat de journal SFE, nous trouvons la charge utile chiffrée de l'appel navigator.getInterestGroupAdAuctionData(). Cette charge utile est générée par le navigateur, envoyée de la balise à SAS, puis transférée par 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 Charge utile déchiffrée

Dans ce résultat, nous trouvons la charge utile déchiffrée de l'appel 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 Demande GetBids à BFE

La demande GetBids est envoyée de 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 Réponse GetBids de BFE

La BFE répond avec l'enchère :

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 demande au service d'enchères

Une fois les enchères reçues, l'appel ScoreAds est effectué par SFE au service d'enchères pour chaque enchère :

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 Réponse ScoreAds du service d'enchères

Le service d'enchères du vendeur répond avec le score de désirabilité :

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 Réponse SelectAd de la SFE

La réponse SelectAd du SFE est chiffrée et envoyée à 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. Tester avec l'application de test local depuis le navigateur

5.1 Ouvrir Chrome

Lisez l'article Chromium sur le démarrage de Chrome à partir de la ligne de commande, puis démarrez-le avec les indicateurs suivants :

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

L'indicateur est défini pour charger la clé du coordinateur fictif que nous avons hébergée sur https://storage.googleapis.com/ba-test-buyer/coordinator-test-key.json.

Important : Assurez-vous d'avoir complètement fermé toutes les instances de Chrome avant de l'ouvrir à partir de la ligne de commande avec les indicateurs B&A. Pour quitter tous les processus Chrome, essayez d'exécuter ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9 à partir de la ligne de commande.

5.2 Accéder à l'UI de l'application de test local

L'UI de l'application est disponible à l'adresse http://localhost:3000 dans l'instance du navigateur Chrome que vous avez ouverte avec les indicateurs. L'adresse exacte que vous consultez peut être différente si vous utilisez une VM avec un nom d'hôte différent.

Capture d&#39;écran de l&#39;application de test local consultée dans un navigateur Capture d'écran de l'application de test local consultée dans un navigateur

Dans la première rangée de l'application, le panneau "Controls" (Commandes) contient les boutons permettant de simuler différentes configurations d'enchères. Les deux autres panneaux contiennent des iFrames provenant des sites de l'annonceur et de l'éditeur.

Capture d&#39;écran des groupes d&#39;intérêt dans les outils pour les développeurs Chrome. Capture d'écran des groupes d'intérêt dans les outils pour les développeurs Chrome.

Cliquez ensuite sur les boutons du panneau "Commandes" pour simuler différents types d'enchères.

Annonce affichée dans un navigateur à partir des enchères et mises aux enchères.

Si les services B&A et l'application de test local sont correctement configurés, l'annonce précédente s'affiche dans le panneau "Iframe du site de l'éditeur".

5.3 Configuration des enchères de l'application de test local

Dans l'application de test local associée, les participants suivants sont hébergés, différenciés par le numéro de port (un port différent est considéré comme une origine croisée) :

Participant

Description

Port

Annonceur

Charge les balises DSP sur la page

4001

Éditeur

Charge les tags SSP sur la page

4002

DSP-A

Acheteur sur l'appareil

5001

DSP-B

Acheteur sur l'appareil

5002

DSP-X

Acheteur B&A

5003

DSP-Y

Acheteur B&A

5004

SSP-TOP

Vendeur de premier niveau

6001

SSP-OD

Vendeur sur l'appareil uniquement

6002

SSP-BA

Vendeur B&A uniquement

6003

SSP-MIX

Vendeur multimodal

6004

Voici les quatre DSP :

  • DSP-A et DSP-B participent aux enchères sur l'appareil
  • DSP-X et DSP-Y participent aux enchères sur les marques et les produits.

Il existe quatre SSP, et chaque vendeur exécute une configuration d'enchères différente :

  • SSP-OD exécute une enchère uniquement sur l'appareil
  • SSP-BA organise une enchère axée uniquement sur les achats et les enchères
  • SSP-MIX organise une vente aux enchères en mode mixte.
  • SSP-TOP exécute une enchère multivendeur.
    • SSP-OD/BA/MIX participer en tant que vendeurs de composants à l'enchère multivendeur de SSP-TOP

Pour obtenir l'architecture complète, consultez le schéma de conception.

5.4 Configuration des services d'enchères et de mise aux enchères

Dans cet atelier de programmation, nous exécutons deux ensembles de tests A/B côte à côte.

Défini

Service

Participant

Adresse réseau ba-dev

Ensemble A

Service d'enchères

DSP-X

192.168.84.101:50057

Service BFE

DSP-X

192.168.84.102:50051

Service d'enchères

SSP-BA

192.168.84.103:50061

Service SFE

SSP-BA

192.168.84.104:50053

Ensemble B

Service d'enchères

DSP-Y

192.168.84.201:50057

Service BFE

DSP-Y

192.168.84.202:50051

Service d'enchères

SSP-MIX

192.168.84.203:50061

Service SFE

SSP-MIX

192.168.84.204:50053

Application

Application de test local

Tous

https://192.168.84.100:PORT

  • Dans l'ensemble A, les services d'acheteur sont utilisés par DSP-X et les services de vendeur sont utilisés par SSP-BA.
  • Dans l'ensemble B, les services d'acheteur sont utilisés par DSP-Y et les services de vendeur sont utilisés par SSP-MIX.

Un réseau pont Docker est utilisé pour la communication entre l'application Local Testing et les services B&A. Le réseau de pont ba-dev est créé par le script de configuration de l'application Local Testing. Les services B&A se voient attribuer une adresse IP dans le sous-réseau 192.168.84.0.

Par exemple, lorsque vous appelez le SFE de l'ensemble A depuis l'application, l'adresse réseau 192.168.84.104:50053 est utilisée. Lorsque vous chargez le script d'enchères fictives de DSP-X dans BFE, https://192.168.84.100:5003/generate-bid.js est utilisé.

6. Conclusion

Nous espérons que vous vous êtes familiarisé avec l'exécution de la pile de services B&A en local sur votre machine et que vous avez mieux compris comment les services communiquent entre eux.

6.1. Assistance technique

6.2 En savoir plus