Está en la página 1de 18

BULKHEAD

MICROSERVICIOS TOLERANTES A FALLOS

Producto
Request
Pescados
T < 1s MS
Poveedores T < 2s Postres
MS MS
T > 15s
Bebidas
MS
¿Por que debo saber de este tema?

Producto
Request
Pescados
T < 1s MS
Poveedores T < 2s Postres
MS MS
T > 15s
Bebidas
MS
¿Por que debo saber de este tema?

Producto
Max 20 TPS Request Pescados
Max 20 TPS MS
Poveedores Postres
MS Max 20 TPS MS

Max 5 TPS Bebidas


MS
¿Por que debo saber de este tema?

Servlet Thread 1
Pescados
Servlet Thread 2
MS
Servlet Thread 3
Servlet Thread 4 Postres
Servlet Thread 5 MS
Servlet Thread 6
Servlet Thread 7 Bebidas
Servlet Thread 8 MS

Con el tiempo Bebidas MS ocupará ms hilos de Proveedores MS


t
Bulkhead, en español “Mamparos”
Construcción del USS South Dakota (BB-57).

Se ven los seis mamparos transversales y los


mamparos longitudinales a lo largo de los lados
del barco.
Fuente: Wikipedia
¿Qué es un Bulkhead?

Patrón de la arquitectura microservicios que


promueve la resiliencia de la plataforma.

Resiliencia:
Capacidad de un sistema de continuar
operando aún cuando una parte del
mismo no se encuentre operativa 100%.
Antes de seguir
Evita siempre que se pueda llamadas servicio a servicio,
bulkhead es una solución a un problema muchas veces
generado por un mal diseño.
Tipos de Bulkhead
● Basado en semáforo
Ejecuta las llamadas el hilo actual y controla el grado de
concurrencia basado en un semáforo.
● Basado en un pool de hilos.
● Ejecuta cada llamada en un hilo disponible del pool de hilos
definido.
Enfoque de funcionamiento

Servlet Thread 1 Pescados


Pool 1 Servlet Thread 2
MS
Servlet Thread 3

Postres
Pool 2

Servlet Thread 1
Servlet Thread 2 MS

Servlet Thread 1
Pool 3

Servlet Thread 2
Servlet Thread 3
Bebidas
MS
Servlet Thread 4

t
Si uno de los pools se satura, el resto no se verá afectado, el problema queda “contenido”.
Si le entra agua a una sección del barco, o se incendia, no se propagará hacia todo el barco.
Resillience4j

Biblioteca ligera de tolerancia a fallos inspirada en


Netflix Hystrix.
● Circuit breaker
● Bulkhead

● Rate limiter

● Retry

● TimeLimiter

● Cache
Resillience4j / Bulkhead

● Módulo: resilience4j-bulkhead.
● Se basa en el patrón decorator para “decorar” la
función que ejecuta la operación.
● Permite composición con otros patrones de la

biblioteca.
Resillience4j / Bulkhead

Clases por tipo

Bulkhead ThreadPoolBulkhead
(Semáforo) (Thread Pool)
Resillience4j / Bulkhead
Pasos para trabajar con un Bulkhead en resilience4j

1) Crear la configuración del bulkhead con la clase


BulkheadConfig.
2) Registrar la configuración con BulkheadRegistry.
3) Crear el bulkhead a usar con Bulkhead
4) Opcional: Suscribirse a los eventos.
5) Decorar el servicio objetivo y definir el fallback.
Resillience4j / ThreadPoolBulkhead
Pasos para trabajar con un Bulkhead en resilience4j

1) Crear la configuración del bulkhead con la clase


ThreadPoolBulkheadConfig.
2) Registrar la configuración con ThreadPoolBulkheadRegistry.
3) Crear el bulkhead a usar con ThreadPoolBulkhead*
4) Opcional: Suscribirse a los eventos.
5) Decorar el servicio objetivo y definir el fallback.
Configuraciones aplicables
Valores por defecto
Semáforo

Thread Pool
Bulkhead / Code
ThreadPoolBulkheadRegistry.of(ThreadPoolBulkheadConfig.custom()
.maxThreadPoolSize(1) //The maximum number threads in the pool
.coreThreadPoolSize(1) //The core number of threads in the pool
.queueCapacity(3) //The capacity of the queue (in wait)
.build());

ThreadPoolBulkhead th = [ANTERIOR].bulkhead("mi-primer-bulkhead");

th.getEventPublisher()
.onCallPermitted(e -> {
log.info("Event " + e.getEventType());
})
.onCallFinished(e -> {
log.info("Event " + e.getEventType());
})
.onCallRejected(e -> {
log.info("Event " + e.getEventType());
});
Bulkhead / Code
Decorators
.ofSupplier([SUPPLIER]) // pass a Supplier
.withThreadPoolBulkhead(th) // set bulkhead instance to use
.withFallback(Arrays.asList(RuntimeException.class), [FALLBACK FUNCTION]) // fallback
.get() // Completable Stage
.toCompletableFuture()
.get(); // Block future for non async ops
Más para estudiar
● Módulo de métricas y monitoreo integrado con
micrometer. (+spring actuator)
● Otros patrones de resiliencia disponibles

También podría gustarte