Patrones de Resilencia
Circuit Breaker
Los patrones circuit breaker nos permiten, en arquitecturas de microservicios, cortar los flujos normales de ejecución en caso de error para así evitar que los errores se propaguen en cascada. Su funcionamiento es el siguiente:
Los estados representados en el diagrama tienen el siguiente significado:
Cerrado: El programa sigue su flujo normal de ejecución mientras su funcionamiento sea el esperado.
Abierto: En el momento en el que el número de fallos supere al umbral establecido, el circuito se abre y deja de seguir su flujo habitual. En este estado, el flujo llamará a una función de fallback que ejecutará las acciones especificadas para este caso.
Medio Abierto: Periódicamente desde el estado cerrado se hacen llamadas periódicas para comprobar el estado del sistema. En este momento, el circuito pasa a estar en un estado semi-abierto. En el caso en el que la comprobación sea satisfactoria, el circuito volvería a cerrarse y, en caso contrario, volvería a abrirse.
Como estándar en Arquitectura usamos Sentinel para su implementación en microservicios.
Para más información y ejemplos de uso pinche aquí.
Compensating Transaction
Al tener una transacción completa, que está formada por una serie de pasos, este patrón sirve para en caso de producirse un error en uno de estos pasos, poder ir deshaciendo cada uno de los pasos anteriores y que, de esta manera, el sistema y BDs queden en el estado inicial.
Para más información y ejemplos de uso pinche aquí.
Bulkhead
Aísle los elementos de una aplicación en grupos para que, si uno falla, los demás sigan funcionando.
Health Endpoint Monitoring
Para comprobar el estado de las aplicaciones se puede implementar un endpoint en la aplicación al cual mandarle peticiones periódicas que realicen las comprobaciones necesarias y devuelvan una respuesta con indicaciones del estado del sistema.
Como estándar en Arquitectura usamos Spring Boot Actuator para su implementación en microservicios.
Para más información y ejemplos de uso pinche aquí.
Leader Election
Coordine las acciones realizadas por una colección de instancias de tareas colaboradoras en una aplicación distribuida eligiendo una instancia como líder que asume la responsabilidad de administrar las otras instancias.
Queue-Based Load Leveling
Utilice una cola que actúe como un búfer entre una tarea y un servicio que invoca para suavizar las cargas pesadas intermitentes.
Retry
Permita que una aplicación maneje fallas temporales anticipadas cuando intente conectarse a un servicio o recurso de red volviendo a intentar de forma transparente una operación que falló anteriormente.
Scheduler Agent Supervisor
Coordine un conjunto de acciones en un conjunto distribuido de servicios y otros recursos remotos.