Categorías

Tags

Arquitectura – G-Project

Category: Arquitectura

  • Arquitectura de microservicios con límites claros: bounded contexts que escalan

    Arquitectura de microservicios con límites claros: bounded contexts que escalan

    El problema no es el tamaño del servicio

    Dividir un monolito en muchos desplegables no crea una arquitectura sana. Lo que escala es el límite de responsabilidad: qué dominio posee cada equipo, qué datos son canónicos y qué contratos son públicos.

    Bounded contexts en la práctica

    1. Nombra el dominio en lenguaje de negocio (no en nombres técnicos).
    2. Lista comandos y consultas que cruzan el límite.
    3. Decide ownership de datos: database-per-service cuando el acoplamiento lo justifique.
    4. Publica un contrato versionado (OpenAPI/AsyncAPI) y un changelog.

    Señales de un mal límite

    • Dos servicios escriben la misma tabla “por comodidad”.
    • Un cambio de campo rompe tres equipos a la vez.
    • Conversaciones de diseño que siempre terminan en excepciones ad hoc.

    Contratos que no mienten

    • Versiona APIs (/v1, cabeceras o schemas).
    • Errores tipados y documentados.
    • Compatibilidad hacia atrás durante una ventana clara.
    • Contratos de eventos con esquema (JSON Schema / Avro / Protobuf).

    Observabilidad por contexto

    Cada bounded context debe exponer: latencia, errores, saturación y trazas con correlation id. Sin eso, el mapa de servicios es decoración.

    La autonomía de los equipos nace de límites bien definidos, no de más repositorios.

    Cuándo no usar microservicios

    Equipos pequeños, dominio inestable o producto en descubrimiento suelen ganar más con un modular monolith bien modularizado. Los microservicios son un coste operativo que se paga con independencia de despliegue.

    Siguiente paso

    Si estás partiendo un monolito o rediseñando dominios, conviene un mapa de contextos y un plan de strangler pattern. Contacta con ingeniería.

  • Arquitectura event-driven: workflows en tiempo real sin complejidad innecesaria

    Arquitectura event-driven: workflows en tiempo real sin complejidad innecesaria

    Eventos cuando el negocio es asíncrono

    Si tu dominio reacciona a “algo ocurrió” (pedido creado, pago confirmado, documento validado), un modelo event-driven desacopla productores y consumidores mejor que cadenas síncronas frágiles.

    Elige el patrón correcto

    Necesidad Enfoque Fan-out a varios consumidores Event bus / topics Trabajo fiable con reintentos Cola + workers Proceso largo con estado Orquestación (sagas / workflows) Consultas eventualmente consistentes Proyecciones / CQRS ligero

    Streaming vs batch

    No elijas Kafka “porque escala”. Elige según latencia de negocio y volumen. Muchos procesos diarios se resuelven con colas clásicas y jobs batch bien instrumentados.

    Contratos de evento

    • Nombre estable (order.paid.v1).
    • Schema versionado.
    • Idempotencia en consumidores.
    • Orden solo donde el dominio lo exige (y documenta el coste).

    Observabilidad desde el día uno

    Correlación entre comando → evento → proyección. Dead-letter queues con runbooks. Alertas por lag, no solo por CPU.

    La complejidad útil es la que compra desacoplamiento; el resto es moda.

    Conclusión

    Empieza con un flujo extremo a extremo, mide, y solo entonces añade buses globales. Para diseñar el mapa de eventos de tu producto, hablemos.