Laura no ve su Bizum · Episodio 5 de 6
Una ficha para leer
La ficha de Atención ya recibe los cambios de los cinco contextos. Falta decidir cómo se guarda: calcularla cada vez, preguntando a todos, o tenerla ya hecha y ponerla al día con cada evento. La segunda se llama proyección, y separar el modelo de leer del de escribir, CQRS.
El punto de partida
La ficha de Atención ya recibe los cambios de los cinco contextos (episodio 4). Falta decidir cómo se guarda. Hay dos formas. Una es no guardar nada y calcularla cada vez que la agente la abre, preguntando a Alta, Cuentas, Operaciones, Tarjetas y Fraude. La otra es guardarla ya hecha: un documento por cliente, que se actualiza con cada evento que llega.
La segunda es una proyección: una vista construida a partir de los eventos y pensada para quien la lee.
Una agente abre la ficha
Laura llama: algo no cuadra. La agente abre su ficha. A la izquierda, la ficha se calcula en el momento, llamando a los cinco contextos uno tras otro. A la derecha, se lee una sola ficha ya hecha. Primero con todo en orden; después, estropea Operaciones.
Qué ha pasado
- Calcularla en el momento es depender de que los cinco contextos estén bien a la vez, justo cuando el cliente llama porque algo no va. Tarda lo que tarde el más lento, y con uno caído la ficha queda a medias.
- La proyección responde con una sola lectura, sea cual sea el estado de los demás. Lo que cambia es la frescura: con Operaciones caída, esa parte de la ficha es de hace unos minutos.
Es una buena noticia para Atención, que ya tenía dicho que tolera un minuto de retraso: mejor una ficha ligeramente vieja que una ficha que no abre. Y se puede decir a la agente cuánto: la ficha enseña cuándo se actualizó por última vez.
Una ficha que se tira y se rehace
La proyección tiene otra ventaja, que no se ve mientras todo va bien. Como se construye a partir de los eventos, se puede borrar y volver a construir pasando de nuevo toda la historia. Atención pide ahora ver los recibos devueltos. O se descubre un error: la ficha contaba al revés las devoluciones y el saldo no cuadra con el de Cuentas.
Elige uno de los dos casos y reconstruye la ficha. Mientras tanto, la actual sigue sirviendo.
Qué ha pasado
- Un campo nuevo es una ficha nueva, calculada desde el principio con un cálculo más. Los pagos no se enteran. Hacerlo en la base operacional sería rellenar ese dato para todas las cuentas a la vez, compitiendo con los pagos por las mismas plazas.
- Un error en la ficha no es un error en el dinero. El saldo real estaba bien en Cuentas, que es la fuente de verdad. Se corrige el cálculo y se rehace la ficha.
Una proyección es desechable justo porque no es de donde sale la verdad.
CQRS, y dónde no usarlo
Lo que acaba de hacer el banco tiene nombre: separar el modelo con el que se escribe (Cuentas, con sus reglas y su base de datos) del modelo con el que se lee (la ficha, hecha a medida de Atención). Es CQRS.
Tiene un precio que conviene tener claro:
- Dos modelos que mantener, y alguien que los mantenga sincronizados.
- La ficha va por detrás. Es el mismo retraso del episodio 2, ahora a lo largo de una cadena más larga: el cambio, el conector, el evento, la proyección.
- Nunca se decide una regla de dinero con la proyección. Tarjetas no autoriza un pago con el saldo de la ficha: lo hace con el de Cuentas, en la primaria, como se vio en el episodio 1. La proyección es para mostrar.
Por eso no se aplica a todo el banco. Se aplica donde leer y escribir piden cosas distintas, como en la ficha de Atención, y se deja fuera donde una sola base de datos hace bien las dos cosas.
Para llevarse
- Una proyección es una vista construida con eventos y a medida de quien lee: una lectura, sin depender de los demás contextos al leer.
- Es desechable: se borra y se reconstruye pasando de nuevo la historia, sin tocar la base operacional ni los pagos.
- CQRS separa el modelo de escribir del de leer, a cambio de dos modelos y de un retraso. Las reglas de dinero se siguen decidiendo en el modelo de escribir.
Falta el último lector. Cumplimiento necesita todos los movimientos de todas las cuentas, y el día 5 tiene que entregar un informe al regulador.
Siguiente Episodio 6 · El informe al regulador Cumplimiento recorre millones de movimientos: ¿por qué no puede hacerlo sobre la base de los pagos? OLTP frente a OLAP, ETL y ELT.