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 lancer des enchères Protected Audience:

Pile de l'acheteur:

  • Service frontend de l'acheteur
  • Service d'enchères

Pile du vendeur:

  • Service Front-End du vendeur
  • Service d'enchères

Cet atelier de programmation vous explique comment configurer et tester la configuration de bout en bout dans votre environnement local. La procédure de dépannage devrait prendre environ une heure, sans compter le temps de compilation du service initial.

Même si vous ne travaillez que sur le code côté acheteur ou côté vendeur, il est utile de configurer le flux de bout en bout dans votre environnement local pour mieux comprendre comment les piles acheteur et vendeur interagissent. En configurant les deux piles, vous pourrez être plus confiant lorsque vous intégrerez la pile acheteur ou vendeur d'une autre partie. Tester les services en local vous 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 locale associée héberge diverses ressources d'acheteurs et de vendeurs utilisées dans une mise aux enchères d'enchères et de mises aux enchères. L'application fournit également une UI sur http://localhost:3000, où vous pouvez simuler différentes configurations d'enchères.

2. Cofiguration 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, et de préférence 32 cœurs ou plus.

Notez que nous allons charger une page HTML à partir de http://localhost:3000 de cette machine. Si la VM ne fournit pas d'IUG, assurez-vous que le port 3000 est accessible à votre ordinateur local afin de pouvoir 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 à l'utilisateur des privilèges de niveau racine. 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 d'enchères/d'évaluation fictifs et des points de terminaison BYOS K/V fictifs. L'application doit être démarrée avant l'exécution des services d'enchères et de mise aux enchères afin que les ressources puissent être chargées dans les services.

Téléchargez 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 de configuration crée le réseau Docker ba-dev, génère des certificats SSL et compile l'image de l'application de test.

Une fois la compilation terminée, exécutez le script de démarrage:

./start

3. Créer et exécuter des tests A/B en local

3.1 Télécharger les services d'enchères et de mise aux enchères

Nous allons exécuter deux ensembles de services d'enchères et de mise aux enchères sur la même machine. Nous allons donc extraire le dépôt dans deux dossiers différents.

Ensemble A:

Téléchargez le dépôt de mise aux enchères et d'enchères:

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

Ensemble B

Téléchargez le dépôt de mise aux enchères et d'enchères:

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

3.2 Créer les services

Depuis le dossier racine de chaque dossier d'enchères et de mise aux enchères, exécutez la commande suivante pour compiler 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

La commande ci-dessus crée une instance local du build de développement (non_prod) pour Google Cloud Platform (gcp) de l'ensemble des quatre services. Si nécessaire, mettez à jour l'indicateur --platform avec le fournisseur de services cloud de votre choix. Pour en savoir plus sur les options 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. Le temps de compilation augmente de manière linéaire en fonction du nombre de cœurs. Sur une machine à 32 cœurs, cela peut prendre quatre heures. Si vous utilisez une machine à 16 cœurs, cela peut prendre huit heures.

Notez que les compilations suivantes utilisent le cache, et que chacune d'elles prend environ cinq à 20 minutes.

Bande dessinée xkcd pertinente:

Deux programmeurs ne travaillent pas au bureau, ce qui pousse leur responsable à leur demander de se remettre au travail. Les employés répondent que le code est en cours de compilation, et le responsable est d'accord. L'auteur de cette bande dessinée considère que c'est la première excuse légitime pour ne pas travailler.

(J'ai rencontré Randall Munroe de xkcd pendant la rédaction de 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 services par pile). Chaque commande est configurée pour utiliser les ressources fournies par l'application de test local. Il est vivement recommandé d'utiliser un gestionnaire de fenêtres tel que tmux.

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

Notez que le serveur de l'application de test local doit déjà s'exécuter dans un processus distinct, car les scripts d'enchères et d'évaluation seront diffusés par l'application.

3.3.1 Commandes de l'ensemble A

Service

Commande

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

Service BFE 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

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

Service 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 Commandes de l'ensemble B

Service

Commande

Service d'enchères DSP-X

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 BFE DSP-X

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

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

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

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

Var. env.

Disponibilité

Description

DOCKER_RUN_ARGS_STRING

Tous les services

Options à 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 à la vérification de la validation des pairs SSL de curl. L'indicateur désactive la validation de l'émetteur 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 correspond à 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 de données pour l'entraînement du modèle

INFERENCE_ARGS

Service d'enchères

Arguments pour l'inférence des enchères

BFE_PORT

Service BFE

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

BUYER_KV_SERVER_ADDR

Service BFE

Adresse K/V BYOS de l'acheteur

BUYER_TKV_V2_SERVER_ADDR

Service BFE

Adresse K/V du TEE 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 du rapport sur les victoires de l'acheteur

BUYER_REPORT_WIN_SCRIPT

Service d'enchères

Script de création de rapports sur les victoires de l'acheteur

BUYER_PAS_REPORT_WIN_SCRIPT

Service d'enchères

Script de création de rapports sur les 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 du 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 Services de mise aux enchères et de mise aux enchères pour appeler les services directement à partir de la ligne de commande.

4.1.2 Charge utile SelectAd SFE

La requête JSON suivante a été renseignée avec la configuration des enchères d'achats et de ventes d'un seul vendeur 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 en tant que sfe-test.json dans le dossier racine du dépôt des services B&A du jeu A(le script de compilation B&A copiera les fichiers du dossier racine du dépôt dans le dossier /src/workspace de l'image Docker).

4.1.2 Appeler le service de premier plan sécurisé avec Invoke sécurisé

Exécutez la commande suivante à partir du dossier racine du dépôt des services d'enchères et de mise aux enchères:

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 d'enchères et de mise aux enchères sont correctement configurées, vous recevrez la réponse de confirmation 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 GetBids BFE

{
  "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 des services d'enchères et de mise aux enchères.

4.2.2 Appeler le BFE avec l'appel sécurisé

Exécutez la commande suivante à partir du dossier racine du dépôt des services d'enchères et de mise aux enchères:

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 d'enchères et de mise aux enchères sont configurées correctement, 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 de la sortie.

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

Dans cette sortie 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 transmise 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 cette sortie, 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 à la BFE

La requête GetBids est envoyée de la SFE à la 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 du BFE

Le 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 Requête ScoreAds au service d'enchères

Une fois les enchères reçues, SFE appelle le service d'enchères ScoreAds 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 de la 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 locale à partir du 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é de 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'interface utilisateur de l'application de test local

L'interface utilisateur 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 locale consultée dans un navigateur

Dans la ligne supérieure de l'application, le panneau "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.

Lorsque vous cliquez sur le bouton "Charger les tags DSP" dans l'iFrame de la page de l'annonceur, un script de chaque DSP est ajouté à la page. Ces scripts ajoutent l'utilisateur à des groupes de centres d'intérêt. Ouvrez les outils pour les développeurs Chrome, puis accédez à "Application / Stockage / Groupes de centres d'intérêt" pour examiner les groupes de centres d'intérêt associés par les tags DSP:

Capture d&#39;écran des groupes de centres d&#39;intérêt dans Chrome DevTools

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

Annonce affichée dans un navigateur à partir d&#39;enchères et de mise aux enchères

Si les services d'enchères et de mise aux enchères 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 pour les applications 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 multi-origine):

Participant

Description

Port

Annonceur

Charge les balises DSP sur la page

4001

Éditeur

Charge les balises SSP sur la page

4002

DSP-A

Acheteur sur l'appareil

5001

DSP-B

Acheteur sur l'appareil

5002

DSP-X

Acheteur de produits et services

5003

DSP-Y

Acheteur de produits et services

5004

SSP-TOP

Vendeur de premier niveau

6001

SSP-OD

Vendeur sur l'appareil uniquement

6002

SSP-BA

Vendeur d'occasions et de nouveautés uniquement

6003

SSP-MIX

Vendeur utilisant les transports mixtes

6004

Il existe quatre DSP:

  • DSP-A et DSP-B participent aux enchères sur l'appareil
  • DSP-X et DSP-Y participent aux enchères de mise aux enchères et de mise aux enchères avec enchères.

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

  • SSP-OD exécute une mise aux enchères sur l'appareil uniquement
  • SSP-BA exécute une mise aux enchères uniquement pour les enchères et les mises aux enchères
  • SSP-MIX exécute une mise aux enchères en mode mixte
  • SSP-TOP effectue une mise aux enchères multivendeur.
    • SSP-OD/BA/MIX participent 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 questions/réponses côte à côte.

Prêt ?

Service

Participant

Adresse réseau ba-dev

Set 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 de l'acheteur sont utilisés par DSP-X et les services du vendeur sont utilisés par SSP-BA.
  • Dans l'ensemble B, les services de l'acheteur sont utilisés par DSP-Y et les services du vendeur sont utilisés par SSP-MIX.

Pour la communication entre l'application de test locale et les services d'enchères et de mise aux enchères, un réseau de pont Docker est utilisé. Le réseau de pont ba-dev est créé par le script de configuration de l'application de test local. Une adresse IP est attribuée aux services d'enchères et de mise aux enchères dans le sous-réseau de 192.168.84.0.

Par exemple, lorsque vous appelez le SFE de l'ensemble A à partir de l'application, l'adresse réseau de 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 avez maintenant compris comment exécuter la pile de services d'enchères et de mise aux enchères localement sur votre machine, et que vous avez mieux compris comment les services communiquent entre eux.

6.1. Assistance technique

6.2 En savoir plus