Episodio 4 · 13:00

Dejar de llamar

lectura · 12 mindominio · BCPS Bankoperación · pago con tarjeta

Preguntar a quien no va a contestar

A la una, Antifraude se cae otra vez, y esta vez va para largo: el equipo está restaurando una base de datos. Tarjetas ya sabe qué hacer sin él: riesgo acotado. Hasta 50 € se autoriza; por encima, se deniega.

Pero antes de llegar ahí, cada pago pregunta a Antifraude y espera su segundo de timeout. Veinte pagos por segundo, cada uno esperando un segundo para obtener una respuesta que ya conocemos, y veinte llamadas por segundo a un servicio que intenta levantarse.

Una persona haría lo obvio: después de que Antifraude falle unas cuantas veces seguidas, dejaría de llamarle un rato. Eso, en código, es un circuit breaker, como el diferencial de casa: cuando algo va mal, corta, y alguien tiene que comprobar que ya se puede volver a subir.

Cerrado, abierto, semiabierto

Veinte pagos por segundo. Si Antifraude no contesta en 1 s, riesgo acotado. A la derecha, un circuit breaker sobre la conexión, con su máquina de estados debajo; puedes cambiar cuántos fallos seguidos lo abren, cuánto tiempo se queda abierto y cuántas llamadas de prueba hace antes de cerrarse.

Pulsa Arrancar, deja que se vea el tráfico normal y pon Antifraude «caído». Luego vuelve a ponerlo sano y mira cómo se entera el breaker.

Qué ha pasado

Tres estados

Un circuit breaker envuelve las llamadas a una dependencia y lleva la cuenta de cómo van:

Qué gana cuando Antifraude está caído

Con Antifraude caído, los dos paneles acaban decidiendo lo mismo: riesgo acotado.probar en el laboratorio Los denegados son casi idénticos. Lo que cambia es el camino:

Es lo mismo que el episodio anterior pedía a los reintentos, pero llevado al extremo: si sabemos que va a fallar, lo más barato para todos es no intentarlo.

Qué pasa cuando vuelve

El breaker no sabe cuándo vuelve Antifraude: lo averigua probando.probar en el laboratorio Cuando acaba el tiempo abierto, pasa a semiabierto y deja pasar unas pocas llamadas. Si Antifraude sigue caído, solo esas pocas pagan el timeout y el breaker se abre otra vez. Si ha vuelto, se cierra y todo sigue como siempre.

Ese sondeo tiene un precio que se ve en el contador de denegados de más: entre que Antifraude vuelve y el breaker lo comprueba, se siguen denegando pagos grandes que Antifraude habría aprobado. Un tiempo abierto más corto lo acorta, a cambio de más llamadas de prueba a un servicio que quizá no ha vuelto. Es otro número que ajustar.

La alternativa es una decisión de negocio

Abrir el circuito solo sirve si hay algo razonable que hacer cuando está abierto. Aquí es el riesgo acotado: sin Antifraude, BCPS Bank asume el riesgo de autorizar hasta 50 € por pago y 150 € por tarjeta, y deniega el resto. Esos pagos quedan marcados y Antifraude los revisa cuando vuelve.

No lo decide el equipo de Tarjetas, lo decide el negocio: cuánto fraude está dispuesto a comerse el banco a cambio de que Ana pueda pagar el café. Los límites podrían ser otros (0 €, y se deniega todo; 200 €, y se arriesga más), y hay contextos donde la única alternativa honesta es fallar. Lo que no vale es que la alternativa la decida un timeout por accidente. Las redes de tarjetas reales hacen exactamente esto y lo llaman stand-in processing: cuando el banco emisor no contesta, la red autoriza por él con límites pactados de antemano.

Fíjate también en la diferencia entre denegado y fallido. Con riesgo acotado, un pago grande se deniega: es una decisión, rápida y con motivo, y la tienda puede ofrecer otra forma de pago. Sin alternativa, el pago falla: nadie ha decidido nada.

Cuándo hace daño: un umbral demasiado sensible

Ahora deja Antifraude sano, pero «con ruido»: cada seis segundos, un cuarto de segundo de errores (una pausa del recolector de basura, un despliegue, un nodo que se reinicia). Con un umbral de 3 fallos seguidos, el breaker se abre con cada pico.probar en el laboratorio

Cada apertura son cinco segundos de riesgo acotado con Antifraude perfectamente sano: pagos grandes denegados sin motivo (los «denegados de más») y el tope de 150 € de cada tarjeta gastándose. Mira la barra de Ana: se queda sin tope por un breaker nervioso, y cuando Antifraude está de verdad caído ya no le queda margen. Con un umbral de 10, el mismo ruido no abre nada.probar en el laboratorio

El umbral tiene que estar por encima de los errores normales del servicio. Por eso los breakers reales no suelen contar fallos seguidos, sino un porcentaje de fallos en una ventana (por ejemplo, más del 50 % de las últimas 100 llamadas), con un mínimo de llamadas para no decidir con dos datos.

Criterio

  1. ¿Es una dependencia remota que puede caerse un rato?Otro servicio, una base de datos, una API de terceros.
    candidata a breaker
  2. ¿Hay una alternativa razonable cuando está abierto?Riesgo acotado, un valor en caché, una respuesta degradada, un «inténtalo luego» rápido.
    breaker + alternativa
  3. ¿Conoces la tasa de errores normal del servicio?Sin ese dato, el umbral es una apuesta.
    umbral por encima de ella

Y cómo encaja con lo de los episodios anteriores:

PiezaQué acota
Timeout y plazo (ep. 1)Cuánto espera cada llamada
Compartimentos (ep. 2)Cuántas esperan a la vez a una misma dependencia
Reintentos con backoff y jitter (ep. 3)Cuánta carga extra genera cada fallo
Circuit breakerSi se llama o no, cuando la dependencia está claramente caída

Se usan juntos: el breaker cuenta como fallo el timeout de la llamada, los reintentos no deberían reintentar un «circuito abierto» (es un fallo que no se arregla en un segundo) y el compartimento protege mientras el breaker aún no se ha abierto.

En el mundo real

El patrón lo describió Michael Nygard en Release It! (2007) y Martin Fowler lo popularizó en su web. Netflix lo llevó a producción a gran escala con Hystrix; hoy, en Java, lo habitual es Resilience4j, cuyo CircuitBreaker abre por porcentaje de fallos o de llamadas lentas en una ventana (por número de llamadas o por tiempo), con un mínimo de llamadas, y tiene los tres estados de la simulación. En .NET, Polly ofrece lo mismo.

En las mallas de servicios, la idea equivalente es la outlier detection de Envoy e Istio: si una instancia concreta devuelve errores seguidos, se saca del balanceo un tiempo y luego se vuelve a probar. Es un breaker por instancia en lugar de por servicio.

Y en pagos, el stand-in processing de las redes de tarjetas es el mismo razonamiento aplicado a escala de industria: si el emisor no contesta, la red decide con límites pactados, y el emisor revisa después lo autorizado en su nombre.

Siguiente episodio

A las ocho de la tarde todo funciona. Antifraude está sano, Cuentas también. Y aun así Tarjetas se ahoga: empiezan las ofertas nocturnas y llegan más peticiones de las que puede atender, entre ellas las de un comercio cuya integración reintenta sin freno. Ya no hay ninguna dependencia a la que dejar de llamar: el problema está en la puerta.

Siguiente · Episodio 5 · 20:00 El pico de la noche Rate limiting por comercio y descarte por prioridades: decidir qué no atender para poder atender lo importante.

← Todos los episodios · Mapa de BCPS Bank