Límites, datos y transacciones
El mejor corte lo da el contexto acotado: la frontera dentro de la cual un modelo de dominio y su lenguaje ubicuo son coherentes. Los límites aparecen donde cambia el significado de las palabras.
Base de datos por servicio significa que sus datos se acceden solo por su API. El costo: las transacciones que cruzan servicios dejan de ser directas y las consultas que unen datos se vuelven difíciles.
Lo que reemplaza a la transacción
El commit en dos fases garantiza atomicidad, pero bloquea —quien votó que sí y perdió al coordinador espera con los locks tomados—, acopla la disponibilidad de todos y exige que cada motor hable el protocolo.
Una saga es una secuencia de transacciones locales, con compensatorias para los pasos ya confirmados. Da ACD, no ACID: no hay aislamiento, los estados intermedios son visibles, y compensar es un deshacer semántico, no un rollback. Se coordina por coreografía u orquestación.
La consistencia eventual promete que, si no hay nuevas actualizaciones, todo acceso termina devolviendo el último valor. CAP ubica la decisión entre consistencia y disponibilidad durante la partición; PACELC agrega que, sin partición, se elige entre latencia y consistencia.
Publicar sin perder
Actualizar la base y publicar un mensaje no es atómico: es la doble escritura. El patrón outbox escribe el mensaje en una tabla dentro de la misma transacción local, y un relay lo publica después. Como puede publicarlo dos veces, hace falta idempotencia, con una clave por operación.