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