Prueba la B&A para la Web de extremo a extremo de forma local

1. Introducción

Los servicios de ofertas y subastas (B&A) incluyen 4 servicios para que los compradores y vendedores faciliten una subasta de Protected Audience:

Pila del comprador:

  • Servicio de frontend para compradores
  • Servicio de licitación

Pila de herramientas del vendedor:

  • Servicio de frontend para vendedores
  • Servicio de subastas

En este codelab, se explica cómo configurar y probar la configuración de extremo a extremo en tu entorno local. Se espera que el recorrido dure aproximadamente 1 hora, sin incluir el tiempo de compilación inicial del servicio.

Aunque solo trabajes en el código del comprador o del vendedor, es útil configurar el flujo de extremo a extremo en tu entorno local para comprender mejor cómo funcionan las pilas del comprador y del vendedor entre sí. Si configuras ambas pilas, podrás tener más confianza cuando integres la pila de comprador o vendedor respectiva de otra parte. Probar los servicios de forma local también ahorra costos de desarrollo.

En este codelab, usaremos la app de pruebas locales de B&A como guía.

La app complementaria de pruebas locales aloja varios recursos para compradores y vendedores que se usan en una subasta de B&A. La app también proporciona una IU en http://localhost:3000 en la que puedes simular varias configuraciones de subastas.

2. Configuración del entorno

2.1 Prepara una máquina Linux

Usa una máquina Linux local o aprovisiona una VM de Linux del proveedor de servicios en la nube que elijas. Para mejorar el tiempo de compilación, se recomienda un mínimo de 16 núcleos y se prefieren 32 o más.

Ten en cuenta que cargaremos una página HTML desde http://localhost:3000 de esta máquina. Si la VM no proporciona una GUI, asegúrate de que el puerto 3000 sea accesible para tu máquina local de modo que puedas conectarte a él.

2.2 Instala Docker

Usamos Docker para ejecutar los servicios y la aplicación de prueba local.

Usaremos la secuencia de comandos de conveniencia para instalar Docker en un entorno de prueba.

# 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

Advertencia: Con la configuración sin sudo, el grupo de Docker otorga privilegios a nivel de raíz al usuario. Lee la guía de Docker sin sudo para obtener más información.

2.3 Inicia la app complementaria de pruebas locales

La app complementaria proporciona recursos, como secuencias de comandos de simulación de ofertas o de puntuación, y extremos de BYOS simulados de K/V. La app debe iniciarse antes de ejecutar los servicios de B&A para que los recursos se puedan cargar en los servicios.

Extrae el repositorio de la app de pruebas locales:

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

Desde la raíz del repositorio, ejecuta la secuencia de comandos de configuración:

./setup

La secuencia de comandos de configuración creará la red de Docker ba-dev, generará certificados SSL y compilará la imagen de la app de prueba.

Una vez que la compilación se realice correctamente, ejecuta la secuencia de comandos de inicio:

./start

3. Compila y ejecuta B&A de forma local

3.1 Despliega los servicios de B&A

Ejecutaremos dos conjuntos de servicios de B&A en la misma máquina, por lo que extraeremos el repositorio en dos carpetas diferentes.

Conjunto A:

Extrae el repositorio de B&A:

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

Conjunto B

Extrae el repositorio de B&A:

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

3.2 Compila los servicios

Desde la carpeta raíz de cada carpeta de B&A, ejecuta el siguiente comando para compilar los 4 servicios:

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

Este comando compilará una instancia local de la compilación de desarrollo (non_prod) para Google Cloud (gcp) de los 4 servicios. Si es necesario, actualiza la marca --platform al proveedor de servicios en la nube que elijas. Para obtener más información sobre las marcas de compilación, consulta el archivo build_and_test_all_docker.

La compilación inicial puede tardar 2 horas si se usa una máquina de 64 núcleos, y el tiempo de compilación se ajusta de forma lineal según la cantidad de núcleos. Si tienes una máquina de 32 núcleos, puede tardar 4 horas. Si usas una máquina de 16 núcleos, puede tardar 8 horas.

Ten en cuenta que las compilaciones posteriores usan la caché y que cada compilación debería tardar entre 5 y 20 minutos.

Cómic de xkcd pertinente:

Dos programadores holgazaneando en la oficina. Un gerente les dice que vuelvan a trabajar, los trabajadores dicen que el código se está compilando y el gerente está de acuerdo. El autor de esta historieta considera que es la excusa legítima número uno para holgazanear. Dos programadores se divierten mientras se ejecuta una compilación.

(Conocí a Randall Munroe de xkcd mientras escribía este codelab y le dije que agregué esta tira cómica aquí).

3.3 Ejecuta los servicios

Para nuestras pruebas, ejecutaremos 8 servicios (4 servicios por pila). Cada comando está configurado para usar los recursos que proporciona la app de Local Testing. Se recomienda usar un administrador de ventanas como tmux.

Abre al menos 8 ventanas de terminal adicionales y ejecuta los siguientes comandos en cada sesión.

Ten en cuenta que el servidor de la app de prueba local ya debe estar ejecutándose en un proceso independiente, ya que la app publicará las secuencias de comandos de ofertas y puntuación.

3.3.1 Comandos de conjunto A

Servicio

Comando

DSP-X Servicio de ofertas

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

Servicio de DSP-X BFE

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 Servicio de subastas

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

Servicio de 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 Comandos del conjunto B

Servicio

Comando

DSP-Y Servicio de ofertas

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

Servicio de DSP-Y BFE

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 Servicio de subastas

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

Servicio de 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 de entorno para las secuencias de comandos de inicio locales

Las siguientes variables de entorno se pueden usar para controlar el comportamiento de inicio.

Variable de entorno

Disponibilidad

Descripción

DOCKER_RUN_ARGS_STRING

Todos los servicios

Marcas que se deben establecer para el comando docker

SKIP_TLS_VERIFICATION

Todos los servicios

Cuando realices pruebas en tu máquina local, es posible que debas usar un certificado autofirmado que no supere la verificación de pares SSL de curl. La marca inhabilita la verificación del par junto con la verificación del nombre de host SSL.

La configuración predeterminada es false.

PS_VERBOSITY

Todos los servicios

Es el nivel de los registros de servicio. El nivel más alto proporciona más registros. 0 es el más bajo y 10 es el más alto. La configuración predeterminada es 10.

BIDDING_PORT

Servicio de licitación

Es el puerto del servicio de licitación. La configuración predeterminada es 50057.

BIDDING_JS_URL

Servicio de licitación

URL de la lógica de ofertas

EGRESS_SCHEMA_URL

Servicio de licitación

Salida de datos para el entrenamiento de modelos

INFERENCE_ARGS

Servicio de licitación

Argumentos para la inferencia de ofertas

BFE_PORT

Servicio de BFE

Es el puerto del servicio de BFE. La configuración predeterminada es 50051.

BUYER_KV_SERVER_ADDR

Servicio de BFE

Dirección de K/V de BYOS del comprador

BUYER_TKV_V2_SERVER_ADDR

Servicio de BFE

Dirección K/V del TEE del comprador

BIDDING_SERVER_ADDR

Servicio de BFE

Dirección del servicio de licitación del comprador

AUCTION_PORT

Servicio de subastas

Es el puerto del servicio de subastas. La configuración predeterminada es 50061.

AUCTION_JS_URL

Servicio de subastas

URL de la lógica de puntuación

BUYER_REPORT_WIN_URL

Servicio de subastas

URL de informes de victorias del comprador

BUYER_REPORT_WIN_SCRIPT

Servicio de subastas

Secuencia de comandos de informes de victorias del comprador

BUYER_PAS_REPORT_WIN_SCRIPT

Servicio de subastas

Guion de informes de victorias del comprador para PAS

SFE_PORT

Servicio de SFE

Es el puerto del servicio de SFE. La configuración predeterminada es 50053.

AUCTION_SERVER_ADDR

Servicio de SFE

Dirección del servicio de subastas del vendedor

KEY_VALUE_SIGNALS_ADDR

Servicio de SFE

Dirección de K/V de BYOS del vendedor

TRUSTED_KEY_VALUE_V2_SIGNALS_ADDR

Servicio de SFE

Dirección de K/V de TEE del vendedor

SELLER_ORIGIN_DOMAIN

Servicio de SFE

Origen del vendedor

BUYER_SERVER_ADDRS_JSON

Servicio de SFE

Direcciones de BFE del comprador

4. Cómo realizar pruebas con Secure Invoke desde la línea de comandos

4.1 Pruebas de SFE

También puedes usar la herramienta Secure Invoke que se incluye en el paquete de B&A Services para llamar a los servicios directamente desde la línea de comandos.

4.1.2 Carga útil de SFE SelectAd

La siguiente solicitud JSON se completó con la configuración de la subasta de B&A de un solo vendedor 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]"
          }
        ]
      }
    }
  }
}

Guarda el archivo como sfe-test.json en la carpeta raíz del repositorio de B&A Services del conjunto A(el script de compilación de B&A copiará los archivos de la carpeta raíz del repositorio en la carpeta /src/workspace de la imagen de Docker).

4.1.2 Llama a SFE con Secure Invoke

Ejecuta el siguiente comando desde la carpeta raíz del repositorio de 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 las pilas de B&A están configuradas correctamente, recibirás la siguiente respuesta de éxito:

{"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 Pruebas de BFE

4.2.1 Solicitud de 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"
}

Guarda el archivo como bfe-test.json en la carpeta raíz del repositorio de B&A Services.

4.2.2 Llama a BFE con Secure Invoke

Ejecuta el siguiente comando desde la carpeta raíz del repositorio de 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 las pilas de B&A están configuradas correctamente, BFE devuelve la siguiente respuesta:

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

4.3 Verifica los registros de SFE

Visita la terminal y verifica los registros de SFE. Revisaremos algunos de los registros más importantes del resultado.

4.3.1 Carga útil encriptada de la solicitud de SelectAd

En este resultado del registro de SFE, encontramos la carga útil encriptada de la llamada navigator.getInterestGroupAdAuctionData(). El navegador genera esta carga útil, la etiqueta la envía a SAS y, luego, SAS la reenvía a 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 Carga útil descifrada

En este resultado, encontramos la carga útil desencriptada de la llamada a 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 Solicitud GetBids a BFE

La solicitud de GetBids se envía desde el SFE al 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 Respuesta GetBids de BFE

El BFE responde con la oferta:

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 Solicitud ScoreAds al servicio de subastas

Después de recibir las ofertas, SFE realiza la llamada ScoreAds al servicio de subastas para cada oferta:

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 Respuesta ScoreAds del servicio de subastas

El servicio de subastas del vendedor responde con la puntuación de conveniencia:

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 respuesta de SFE

La respuesta SelectAd del SFE se encripta y se envía al 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. Realiza pruebas con la app de prueba local desde el navegador

5.1 Abre Chrome

Lee el artículo de Chromium sobre cómo iniciar Chrome desde la línea de comandos y ejecútalo con las siguientes marcas:

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

La marca se configura para cargar la clave del coordinador simulado que alojamos en https://storage.googleapis.com/ba-test-buyer/coordinator-test-key.json.

Importante: Asegúrate de salir por completo de todas las instancias de Chrome antes de abrirlo desde la línea de comandos con las marcas de B&A. Para salir de todos los procesos de Chrome, intenta ejecutar ps aux | grep -ie chrome/chrome | awk '{print $2}' | xargs kill -9 desde la línea de comandos.

5.2 Visita la IU de la app de Local Testing

Puedes encontrar la IU de la app en http://localhost:3000 en la instancia del navegador Chrome que abriste con las marcas. La dirección exacta que visites puede ser diferente si usas una VM con un nombre de host diferente.

Una captura de pantalla de la app de pruebas locales que se visita en un navegador Una captura de pantalla de la app de prueba local que se visita en un navegador

En la fila superior de la app, el panel "Controles" contiene los botones para simular diferentes configuraciones de la subasta. Los otros dos paneles contienen elementos iframe de los sitios del anunciante y del publicador.

Captura de pantalla de los grupos de interés en las Herramientas para desarrolladores de Chrome. Captura de pantalla de los grupos de interés en las Herramientas para desarrolladores de Chrome.

Luego, haz clic en los botones del panel "Controles" para simular varios tipos de subastas.

Anuncio renderizado en un navegador desde B&A.

Si los servicios de B&A y la app de Local Testing están configurados correctamente, el anuncio anterior se renderizará en el panel "Iframe del sitio del publicador".

5.3 Configuración de la subasta de la app de pruebas locales

En la app complementaria de pruebas locales, se alojan los siguientes participantes, diferenciados por el número de puerto (se considera que un puerto diferente es de origen cruzado):

Participante

Descripción

Puerto

Anunciante

Carga etiquetas de DSP en la página

4001

Editor

Carga etiquetas de SSP en la página

4002

DSP-A

Comprador en el dispositivo

5001

DSP-B

Comprador en el dispositivo

5002

DSP-X

Comprador de B&A

5003

DSP-Y

Comprador de B&A

5004

SSP-TOP

Vendedor de nivel superior

6001

SSP-OD

Vendedor solo en el dispositivo

6002

SSP-BA

Vendedor solo de B&A

6003

SSP-MIX

Vendedor de varios medios de transporte

6004

Existen cuatro DSP:

  • DSP-A y DSP-B participan en subastas en el dispositivo
  • DSP-X y DSP-Y participan en las subastas de B&A

Hay cuatro SSP y cada vendedor ejecuta una configuración de subasta diferente:

  • SSP-OD ejecuta una subasta solo en el dispositivo
  • SSP-BA ejecuta una subasta solo de B&A
  • SSP-MIX ejecuta una subasta en modo mixto
  • SSP-TOP ejecuta una subasta de varios vendedores
    • SSP-OD/BA/MIX participa como vendedor de componentes de la subasta de varios vendedores de SSP-TOP

Para ver la arquitectura completa, consulta el diagrama de diseño.

5.4 Configuración de los servicios de ofertas y subastas

En este codelab, ejecutamos dos conjuntos de B&A uno junto al otro.

Establecer

Servicio

Participante

Dirección de red ba-dev

Conjunto A

Servicio de licitación

DSP-X

192.168.84.101:50057

Servicio de BFE

DSP-X

192.168.84.102:50051

Servicio de subastas

SSP-BA

192.168.84.103:50061

Servicio de SFE

SSP-BA

192.168.84.104:50053

Conjunto B

Servicio de licitación

DSP-Y

192.168.84.201:50057

Servicio de BFE

DSP-Y

192.168.84.202:50051

Servicio de subastas

SSP-MIX

192.168.84.203:50061

Servicio de SFE

SSP-MIX

192.168.84.204:50053

Aplicación

App de pruebas locales

Todos

https://192.168.84.100:PORT

  • En el conjunto A, DSP-X usa los servicios del comprador y SSP-BA usa los servicios del vendedor.
  • En el conjunto B, DSP-Y usa los servicios del comprador y SSP-MIX usa los servicios del vendedor.

Para la comunicación entre la app de Local Testing y los servicios de B&A, se usa una red de puente de Docker. La red de puente ba-dev se crea con el secuencia de comandos de configuración de la app de Local Testing. A los servicios de B&A se les asigna una dirección IP en la subred de 192.168.84.0.

Por ejemplo, cuando llamas al SFE del conjunto A desde la aplicación, se usa la dirección de red de 192.168.84.104:50053. Cuando cargas la secuencia de comandos de ofertas simuladas desde DSP-X en BFE, se usa https://192.168.84.100:5003/generate-bid.js.

6. Conclusión

A estas alturas, esperamos que te hayas familiarizado con la ejecución de la pila de servicios de B&A de forma local en tu máquina y que comprendas mejor cómo se comunican los servicios entre sí.

6.1. Asistencia técnica

6.2 Más información