El patrón Transactional Outbox: cómo resolver la doble escritura en sistemas distribuidos

Casi todos los sistemas distribuidos esconden este bug en algún rincón del código: guardar el pedido en la base de datos y después publicar un evento order.created en Kafka. Cuando la publicación falla —y tarde o temprano fallará—, el pedido ya existe, pero todos los servicios que dependen de él quedan ciegos para siempre. Se puede añadir lógica de reintentos, pero eso solo desplaza el problema. La solución real es arquitectónica: dejar de tratar la escritura en la base de datos y la publicación en el broker como dos operaciones separadas.

El patrón Transactional Outbox resuelve esto a nivel de infraestructura. Cambia la ilusión de atomicidad entre dos sistemas por una escritura atómica real en uno solo, y luego propaga el cambio de forma asíncrona mediante un proceso de relay independiente. El resultado es consistente, fácil de depurar y escalable horizontalmente.