El dinero no se duplica · Episodio 3 de 7

Guardado, pero no avisado

Cuentas registra el Bizum de 50 € de Laura y, justo antes de publicar MovimientoRegistrado, el servidor se reinicia por un despliegue. El movimiento está en el extracto. Fraude no lo evaluará nunca, Cumplimiento no lo verá y Laura no recibirá la notificación.

Concepto: patrón outbox~10 min

El punto de partida

En Las áreas del banco, Cuentas aprendió a avisar en lugar de llamar: cuando registra un movimiento, publica el evento MovimientoRegistrado en el broker, y Fraude, Comunicación y Cumplimiento reaccionan cada uno a lo suyo. Cuentas no sabe quién escucha, y eso es bueno.

Y la saga del episodio anterior también depende de los avisos: cada paso se entera de que el anterior ha terminado por un evento. Si un evento no sale, la saga se queda parada sin que nadie lo sepa.

Dos escrituras

Para registrar un movimiento y avisar, Cuentas escribe en dos sitios: en su base de datos y en el broker. Son dos sistemas distintos, y no hay ninguna transacción que cubra los dos. Si el servidor se cae entre una escritura y la otra, queda una hecha y la otra no.

Elige una estrategia y un momento de caída, y registra el Bizum. Prueba primero las dos estrategias evidentes: guardar y luego publicar, y al revés.

Qué ha pasado

Al menos una vez

El outbox tiene su propio punto débil, y conviene haberlo visto: si el repetidor publica el evento y se cae antes de marcarlo como enviado, al volver lo encuentra pendiente y lo publica otra vez. El evento sale al menos una vez, no exactamente una.

No se puede evitar desde quien publica, porque es el mismo problema de la doble escritura en pequeño (publicar y marcar). Se resuelve en quien recibe: cada evento lleva un identificador, y los consumidores ignoran los que ya han procesado. Es la idempotencia del episodio 1, ahora en el lado del consumidor. Un sistema fiable se construye con avisos que pueden repetirse y receptores a los que no les importa.

GuíaArquitectura orientada a eventos · Persistir lo que entra y lo que sale. El outbox junto a su pareja, el inbox, y qué recupera un servicio al volver de cada tipo de caída.

El recibo que nadie avisó

Con las domiciliaciones, el aviso perdido sale del banco. Cuando Operaciones devuelve el recibo de la luz por falta de saldo, publica ReciboDevuelto, que tiene que llegar al banco del acreedor (por la conexión con los otros bancos) y a Comunicación, que avisa a Laura. Elige el caso «Recibo devuelto» en la simulación y repite las estrategias.

Si el evento se pierde, la compañía cree que la luz está cobrada y Laura no sabe que tiene un recibo pendiente. Lo descubrirán semanas después, con una reclamación. El dinero no se ha duplicado ni perdido: se ha perdido la información de que faltaba.

Para llevarse

Hasta ahora, los problemas venían de una sola operación que se repite o se rompe. El siguiente episodio va de dos operaciones distintas que llegan exactamente a la vez.