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 compradores y vendedores faciliten una subasta de Protected Audience:

Pila de compradores:

  • Servicio de frontend del comprador
  • Servicio de licitación

Pila de vendedores:

  • Servicio de frontend del vendedor
  • Servicio de subastas

En este codelab, aprenderás a configurar y probar la configuración de extremo a extremo en tu entorno local. Se espera que la explicación de la función tarde aproximadamente 1 hora, sin incluir el tiempo de compilación inicial del servicio.

Aunque solo puedas trabajar en el código orientado a la compra o a la venta, es útil configurar el flujo de extremo a extremo en tu entorno local para comprender mejor cómo funcionan entre sí las pilas de compradores y vendedores. Si configuras ambas pilas, podrás tener más confianza más adelante cuando realices la integración con la pila de comprador o vendedor 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 complementaria.

La app de prueba local complementaria aloja varios recursos de 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 subasta.

2. Configuración del entorno

2.1 Prepara una máquina con Linux

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

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 tu máquina local pueda acceder al puerto 3000 para 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 Docker otorga privilegios de nivel raíz al usuario. Lee la guía de Docker sin sudo para obtener más información.

2.3 Inicia la app de prueba local complementaria

La app complementaria proporciona recursos, como secuencias de comandos de ofertas o puntuación simuladas, y extremos de BYOS de K/V simulados. 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 Extrae 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

El comando anterior compilará una instancia local de la compilación de desarrollo (non_prod) para Google Cloud Platform (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 escala de forma lineal según la cantidad de núcleos. Si usas una máquina de 32 núcleos, puede tardar 4 horas. Si usas una máquina de 16 núcleos, es posible que demore 8 horas.

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

Cómic relevante de xkcd:

Se muestran dos programadores que se relajan en la oficina, lo que hace que el gerente les diga que vuelvan a trabajar. Los trabajadores dicen que el código se está compilando, y el gerente está de acuerdo. El autor de este cómic considera que esa es la excusa legítima número uno para relajarse.

(Conocí a Randall Munroe de xkcd mientras escribía este codelab y le dije que agregué este cómic 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 pruebas locales. 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 pruebas locales ya debe estar en ejecución 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 BFE de 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

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

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

Servicio

Comando

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

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

Servicio de SFE de 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 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 para establecer en 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 falle en la verificación de pares de SSL de curl. La marca inhabilita la verificación de pares 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 ofertas. 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 de TEE del comprador

BIDDING_SERVER_ADDR

Servicio de BFE

Dirección del servicio de ofertas 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 del informe de éxito del comprador

BUYER_REPORT_WIN_SCRIPT

Servicio de subastas

Guion de informes de éxito del comprador

BUYER_PAS_REPORT_WIN_SCRIPT

Servicio de subastas

Guion de informes de éxito 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 servicios de B&A para llamar a los servicios directamente desde la línea de comandos.

4.1.2 Carga útil de SelectAd de SFE

La siguiente solicitud JSON se propagó con la configuración de 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(la secuencia de comandos 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 correcta:

{"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 GetBids de 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"
}

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 muestra 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. Analizaremos algunos de los registros notables en el 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 envía de la etiqueta 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 desencriptada

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

La solicitud de GetBids se envía de SFE a 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

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 de 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 subasta del vendedor responde con la puntuación de deseabilidad:

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 Respuesta SelectAd de SFE

La respuesta SelectAd del SFE se encripta y se envía a 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. Prueba 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, luego, inícialo 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 establece para cargar la clave de coordinador simulada que alojamos en https://storage.googleapis.com/ba-test-buyer/coordinator-test-key.json.

Importante: Asegúrate de haber salido por completo de todas las instancias de Chrome antes de abrirlo desde la línea de comandos con las marcas 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 prueba local

La IU de la app se encuentra 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 prueba local que se visita en un navegador

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

Cuando haces clic en el botón "Load DSP tags" en el iframe de la página del anunciante, se agrega una secuencia de comandos de cada DSP a la página. Esas secuencias de comandos agregan al usuario a grupos de intereses. Abre las Herramientas para desarrolladores de Chrome y visita "Application / Storage / Interest Groups" para examinar los grupos de intereses a los que se unieron las etiquetas de DSP:

Captura de pantalla de los grupos de intereses en las Herramientas para desarrolladores de Chrome

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

Un anuncio renderizado en un navegador de B&A

Si los servicios de A/B y la app de pruebas locales están configurados correctamente, el anuncio anterior se renderiza en el panel "Iframe del sitio del publicador".

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

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

Participante

Descripción

Puerto

Advertiser

Carga etiquetas de DSP en la página.

4001

Editor

Carga etiquetas de SSP en la página.

4002

DSP-A

Comprador integrado en el dispositivo

5001

DSP-B

Comprador integrado 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 integradas en el dispositivo
  • DSP-X y DSP-Y participan en 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 de modo mixto.
  • SSP-TOP ejecuta una subasta de varios vendedores
    • SSP-OD/BA/MIX participan como vendedores 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 A/B en paralelo.

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 comunicarse entre la app de pruebas locales y los servicios de B&A, se usa una red de puente de Docker. La secuencia de comandos de configuración de la app de pruebas locales crea la red de puente ba-dev. 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 de DSP-X en BFE, se usa https://192.168.84.100:5003/generate-bid.js.

6. Conclusión

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

6.1. Asistencia técnica

6.2 Más información