Lo que no controlamos · Episodio 3 de 6

Reintentar sin ahogar al core

El core bancario se cae cinco segundos. Cuando vuelve, sesenta operaciones que esperaban reintentan a la vez y el core, que acaba de levantarse, se cae otra vez. Reintentar es sensato. Reintentar todos a la vez, no.

Concepto: reintentos, backoff y jitter~10 min

El punto de partida

Hasta ahora, el fallo se propagaba o se contenía. Pero la mayoría de los fallos de un sistema externo son breves: un reinicio, una red que parpadea. Para esos, lo natural es volver a intentarlo. Y como ya vimos en El dinero no se duplica, reintentar solo es seguro si la operación es idempotente: la misma clave que evitaba cobrar dos veces el Bizum permite repetir la petición al core.

La pregunta que queda es cuándo y cuántas veces.

Cinco segundos sin core

El core bancario que contrata el banco aguanta diez peticiones por segundo y, si le llegan más de treinta, se cae otra vez durante ocho segundos. Hay sesenta operaciones en curso cuando se cae cinco segundos. Cada cuadrado es una operación: ámbar, esperando para reintentar; azul, reintentando ahora; verde, completada; rojo, se ha rendido tras ocho intentos.

Pulsa «El core se cae 5 s». A la izquierda, elige entre reintentar cada segundo o con espera exponencial (1, 2, 4, 8 segundos…). A la derecha, la misma espera exponencial con jitter.

Qué ha pasado

Los tres ingredientes de un buen reintento son esperar más cada vez, repartir la espera con azar y poner un máximo de intentos. Pasado el último, el error sube a quien pidió, que decide.

Tres capas, tres intentos

Las transferencias internacionales añaden capas. Una transferencia cruza Operaciones, la conexión con otros bancos (heredada de la matriz) y el corresponsal. Cada capa la escribió un equipo distinto, y cada equipo, con buen criterio, puso tres reintentos.

Si el corresponsal de Tokio no responde, ¿cuántas llamadas recibe por cada pulsación de Laura? Marca qué capas reintentan y envía.

Los reintentos se multiplican

Tres capas con tres intentos cada una son 3 × 3 × 3 = 27 llamadas a un sistema que ya estaba mal. Ninguna capa hizo nada irrazonable; el problema es que ninguna sabe lo que hacen las demás. La regla es reintentar en un solo punto de la cadena, el que tenga contexto para decidir, y que las demás dejen pasar el error.

Para llevarse

Reintentar con cabeza ayuda con los fallos breves. Pero si el sistema lleva dos minutos caído, cada reintento es trabajo perdido. Hay un momento en que hay que dejar de llamar.