Social Bot Scheduler

🧩 Caso 15: 🐹 Go (gRPC server) → 🌉 n8n → 🐍 Python (gRPC client) + CockroachDB#

Status: Ready Language: Go Protocol: gRPC Database: CockroachDB

Protocolo binario gRPC entre un servidor Go y un cliente Python, con persistencia en CockroachDB (SQL distribuido con consenso Raft, wire-compatible con PostgreSQL). El contrato se define en un .proto compartido y se compilan stubs para ambos lenguajes.


🏗️ Arquitectura del Flujo#

  1. 📤 Origenorigin/server.go: servidor gRPC en Go que implementa SocialService (Publish, ListRecent) y persiste en CockroachDB.
  2. 🌉 Puenten8n: guardrails canónicos; entrega vía HTTP al receiver Python.
  3. 📥 Destinodest/main.py: cliente gRPC (FastAPI + grpcio) que traduce el contrato REST del laboratorio (/webhook, /logs) a llamadas gRPC unary contra el servidor Go.
  4. 📁 PersistenciaCockroachDB 24: tabla social_posts con INSERT ... ON CONFLICT.

Nota

n8n no habla gRPC nativo; por eso el receiver Python actúa de adaptador REST↔gRPC. Los stubs (social.pb.go, social_pb2.py) se generan en el build desde proto/social.proto con protoc / grpc_tools.


🚀 Cómo levantarlo#

bash
docker-compose --profile case15 up -d      # CockroachDB + servidor Go + receiver Python
ServicioRolPuerto host
cockroach-15CockroachDB (single-node)interno
grpc-server-15Servidor gRPC Gointerno (:50051)
dest-grpc-15Cliente gRPC + receiver REST + dashboard8095

🎯 Objetivos didácticos#

  • Contratos .proto y generación de stubs en dos lenguajes (Go y Python).
  • gRPC unary sobre HTTP/2 (binario, tipado) frente al REST/JSON del resto del laboratorio.
  • CockroachDB: SQL distribuido, serializable, sin single point of failure.

⚠️ Consideraciones (modelo del laboratorio)#

  • Puerto 8095 = 8080 + 15 (regla canónica, ver docs/PORTS.md).
  • CockroachDB en modo --insecure (local-only); el receiver valida id/text (→ HTTP 422).

✅ Estado#

Implementado y verificado (build + boot + health). Parte del Lote 3 del roadmap v5.0 → v4.7.