Skip to content

Pub/Sub

Google Cloud Pub/Sub es un servicio de mensajería asíncrona que actúa como bus de eventos para el sistema de data engineering de Solvento.

Descripción

Pub/Sub permite la comunicación desacoplada entre servicios mediante el patrón publish/subscribe. Es fundamental para el procesamiento de eventos en tiempo real y el streaming de datos.

Flujo de Datos

graph TB
    subgraph fuentes["Fuentes de Datos"]
        APIs[APIs Externas]
        Webhooks[Webhooks]
    end

    subgraph publishers["Publishers"]
        Run[Cloud Run]
        Run2[Cloud Run<br/>Invoca otro Cloud Run]
    end

    subgraph pubsub["Pub/Sub"]
        Topics[Topics]
        Subscriptions[Subscriptions]
    end

    subgraph subscribers["Subscribers"]
        Dataflow[Dataflow]
        Functions[Cloud Functions]
        Run3[Cloud Run]
    end

    APIs -->|"HTTP Request"| Run
    Webhooks -->|"HTTP Request"| Run
    Run2 -->|"HTTP Request"| Run

    Run -->|"Publica mensajes"| Topics

    Topics --> Subscriptions

    Subscriptions --> Dataflow
    Subscriptions --> Functions
    Subscriptions --> Run3

Recursos

Topics (Colas)

Los topics son canales de mensajería donde Cloud Run publica mensajes. Documenta aquí los topics principales:

Topics para Webhooks

Topic Name Publisher (Cloud Run) Descripción Formato Mensaje Proyecto
invoices-webhook-prod Cloud Run (webhook handler) Recibe eventos de invoices desde webhooks JSON solvento-data-prod
buro-webhook-prod Cloud Run (webhook handler) Recibe eventos de buró desde webhooks JSON solvento-data-prod
cp-webhook-prod Cloud Run (webhook handler) Recibe eventos de CP desde webhooks JSON solvento-data-prod

Topics para APIs Externas

Topic Name Publisher (Cloud Run) Descripción Formato Mensaje Proyecto
items-api-topic Cloud Run (API consumer) Recibe eventos de items desde APIs externas JSON solvento-data-prod
invoices-api-prod Cloud Run (API consumer) Recibe eventos de invoices desde APIs externas JSON solvento-data-prod
cp-api-prod Cloud Run (API consumer) Recibe eventos de CP desde APIs externas JSON solvento-data-prod
tax-compliance-api-prod Cloud Run (API consumer) Recibe eventos de tax compliance desde APIs externas JSON solvento-data-prod
line-items-api-topic Cloud Run (API consumer) Recibe eventos de line items desde APIs externas JSON solvento-data-prod

Topics para Insights y Analytics

Topic Name Publisher (Cloud Run) Descripción Formato Mensaje Proyecto
insights-topic-prod Cloud Run (insights processor) Recibe eventos de insights y analytics JSON solvento-data-prod

Topics de Success/Error (Syntage)

Topic Name Publisher (Cloud Run) Descripción Formato Mensaje Proyecto
cp-api-syntage-success Cloud Run Eventos exitosos de CP desde Syntage JSON solvento-data-prod
cp-api-syntage-errors Cloud Run Eventos con errores de CP desde Syntage JSON solvento-data-prod
tax-compliance-api-syntage-success Cloud Run Eventos exitosos de tax compliance desde Syntage JSON solvento-data-prod
tax-compliance-api-syntage-errors Cloud Run Eventos con errores de tax compliance desde Syntage JSON solvento-data-prod

Dead Letter Topics (DLQ)

Topic Name Descripción Proyecto
invoices-dlq Mensajes fallidos de invoices solvento-data-prod
items-dlq Mensajes fallidos de items solvento-data-prod
buro-dlq Mensajes fallidos de buró solvento-data-prod
cp-dlq Mensajes fallidos de CP solvento-data-prod
insights-dlq-prod Mensajes fallidos de insights solvento-data-prod

Subscriptions

Las subscriptions conectan topics con consumidores (Dataflow, Cloud Functions, Cloud Run). Documenta aquí las subscriptions principales:

Subscriptions para Dataflow

Subscription Name Topic Consumidor (Dataflow Job) Ack Deadline Estado
invoices-webhook-subscription invoices-webhook-prod invoices-webhook-prod-20251203-154624 60 segundos Activa
buro-webhook-subscription buro-webhook-prod buro-webhook-prod-20251204-124756 60 segundos Activa
items-api-subscription items-api-topic items-api-prod-20251120-135100 60 segundos Activa
invoices-api-subscription invoices-api-prod invoices-api-prod-* 60 segundos Activa
cp-api-prod-subscription-cloud-run cp-api-prod cp-api-multischema-prod-20251205-191037 60 segundos Activa
tax-compliance-api-prod-sub tax-compliance-api-prod tax-compliance-api-multischema-prod-20251210-183338 10 segundos Activa
insights-topic-prod-sub insights-topic-prod insights-sales-revenue-customers-daily-20251203-154949 600 segundos Activa
cp-api-syntage-success-sub cp-api-syntage-success Cloud Run / Dataflow 10 segundos Activa
tax-compliance-api-syntage-success-sub tax-compliance-api-syntage-success Cloud Run / Dataflow 10 segundos Activa

Subscriptions para Cloud Run / Cloud Functions

Subscription Name Topic Consumidor Ack Deadline Estado
subscription-name topic-name service-name segundos Activa

Mapeo Topics → Jobs Dataflow

Esta tabla muestra qué jobs de Dataflow consumen de qué topics:

Pub/Sub Topic Subscription Dataflow Job Tipo
invoices-webhook-prod invoices-webhook-subscription invoices-webhook-prod-20251203-154624 Streaming
buro-webhook-prod buro-webhook-subscription buro-webhook-prod-20251204-124756 Streaming
items-api-topic items-api-subscription items-api-prod-20251120-135100 Streaming
invoices-api-prod invoices-api-subscription invoices-api-prod-* Streaming
cp-api-prod cp-api-prod-subscription-cloud-run cp-api-multischema-prod-20251205-191037 Streaming
tax-compliance-api-prod tax-compliance-api-prod-sub tax-compliance-api-multischema-prod-20251210-183338 Streaming
insights-topic-prod insights-topic-prod-sub insights-sales-revenue-customers-daily-20251203-154949 Streaming

Flujos completos:

invoices-webhook-prod → invoices-webhook-subscription → invoices-webhook-prod-20251203-154624 → BigQuery (data-prod)
buro-webhook-prod → buro-webhook-subscription → buro-webhook-prod-20251204-124756 → BigQuery (data-prod)
items-api-topic → items-api-subscription → items-api-prod-20251120-135100 → BigQuery (data-prod)
cp-api-prod → cp-api-prod-subscription-cloud-run → cp-api-multischema-prod-20251205-191037 → BigQuery (data-prod)
tax-compliance-api-prod → tax-compliance-api-prod-sub → tax-compliance-api-multischema-prod-20251210-183338 → BigQuery (data-prod)
insights-topic-prod → insights-topic-prod-sub → insights-sales-revenue-customers-daily-20251203-154949 → BigQuery (data-prod)

Configuraciones Relevantes

Retención de Mensajes

  • Especificar políticas de retención de mensajes (default: 7 días)

Acknowledgment Deadline

  • Configuración de tiempo para acknowledgment de mensajes

Dead Letter Topics

  • Configuración de topics para mensajes fallidos

Message Ordering

  • Configuración de ordenamiento de mensajes cuando es requerido

Relaciones con Otros Componentes

Publishers (Publicadores)

Importante: Solo Cloud Run ingesta datos en las colas de Pub/Sub. Cloud Run puede ser invocado por: - Webhooks: Webhooks externos invocan Cloud Run mediante HTTP requests - Otro Cloud Run: Un servicio Cloud Run puede invocar a otro Cloud Run que publica a Pub/Sub - APIs Externas: Las APIs son consumidas por Cloud Run, que luego publica a Pub/Sub

Flujo de Publicación

Webhooks/APIs → Cloud Run → Pub/Sub Topics
Cloud Run → Cloud Run → Pub/Sub Topics

Subscribers (Suscriptores)

  • Dataflow: Consume mensajes para procesamiento batch y streaming
  • Cloud Functions: Se activa con mensajes de Pub/Sub
  • Cloud Run: Procesa mensajes en servicios containerizados

Patrones de Uso

Event-Driven Processing

Pub/Sub permite procesamiento basado en eventos donde los componentes reaccionan a cambios en tiempo real.

Fan-Out Pattern

Un topic puede tener múltiples subscriptions, permitiendo que múltiples consumidores procesen el mismo evento de manera independiente.

Message Transformation

Los mensajes pueden ser transformados entre topics usando Cloud Functions o Dataflow.

Ejemplos de Configuración

Crear Topic

gcloud pubsub topics create my-topic --project=solvento-data-prod

Crear Subscription

gcloud pubsub subscriptions create my-subscription \
  --topic=my-topic \
  --project=solvento-data-prod

Publicar Mensaje

from google.cloud import pubsub_v1

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path('solvento-data-prod', 'my-topic')

data = b'{"key": "value"}'
future = publisher.publish(topic_path, data)

Monitoreo y Métricas

  • Throughput: Mensajes por segundo publicados y consumidos
  • Latencia: Tiempo desde publicación hasta consumo
  • Backlog: Número de mensajes sin procesar en subscriptions
  • Errores: Mensajes fallidos y dead letter messages

Referencias