SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
Sistemas Tolerantes
a Fallas
Agustín Ramos
@MachinesAreUs
¿Cuál es el costo de una falla?
¿Cuál es el costo de una falla?
• Una pequeña molestia para algún usuario.
!
• Una transacción (de negocio) no completada.
• Datos inconsistentes.
!
• No disponibilidad del sistema. O_o
!
• Pérdida de un cliente.
• O de muchos de ellos.
!
• Muerte de una organización.
(Casi) Todos los sistemas son
distribuidos
Las falacias de los sistemas distribuidos
1. La red es confiable.
2. La latencia es cero.
3. El ancho de banda es infinito.
4. La red es segura.
5. La topología no cambia.
6. Existe solo un administrador.
7. El costo del transporte es cero.
8. La red es homogénea.
Todos los sistemas fallan
http://www.ctlab.org/documents/How%20Complex%20Systems%20Fail.pdf
¿Cómo desarrollar sistemas
tolerantes a fallas?
1. Aceptar: No puedes prevenir todas las fallas.
2. Evita los “puntos únicos de falla”.
3. Implementa mecanismos de detección de
errores.
4. Implementa corrección de errores.
• Si es posible y hace sentido.
• e.g. patrón: Compensating Transactions ?
5. Contención de errores
1. Evita que se propaguen.
Consecuencias
Sistemas…
• Creados de componentes pequeños,
independientes en tiempo de ejecución.
• Distribuidos.
• Con reintentos finitos.
• Con respuestas apropiadas para casos de
falla.
Usa…
µ-Services
Patrones de Estabilidad
Patrón #1
Timeouts
Timeouts (1)
// Básico 1
myObject.wait(); // No uses esto por default
myObject.wait(TIMEOUT); // Mejor usa esto
!
// Básico 2
myThread.join(); // No uses esto por default
myThread.join(TIMEOUT); // Mejor usa esto
Timeouts (2)
// Utilizando el API de concurrencia de Java
<MyActionResult> myAction = <My Blocking Action>	

ExecutorService executor =
Executors.newSingleThreadExecutor();
Future<MyActionResult> future = executor.submit(myAction);
MyActionResult result = null;
try {
result = future.get(); // No uses esto por default
result = future.get(TIMEOUT, TIMEUNIT); // Mejor usa esto
} catch (TimeoutException e) { // Si ocurre el timeout
...
} catch (...) {
...
}
Timeouts (3)
// Utilizando el SimpleTimeLimiter de Guava
Callable<MyActionResult> myAction = <My Blocking Action>	

SimpleTimeLimiter limiter = new SimpleTimeLimiter();
MyActionResult result = null;
try {

result = limiter.callWithTimeout(myAction,
TIMEOUT, TIMEUNIT, false);
} catch (UncheckedTimeoutException e) {
...
} catch (...) {
... }
Patrón #2
Circuit Breaker
Circuit Breaker (1)
Circuit Breaker (2)
Circuit Breaker (3)
public class CircuitBreaker implements MyResource {
public enum State { CLOSED, OPEN, HALF_OPEN }
final MyResource resource;
State state;
int counter;
long tripTime;
public CircuitBreaker(MyResource r) {
resource = r;
state = CLOSED;
counter = 0;
tripTime = 0L;
} ...
Circuit Breaker (4)
...
public Result access(...) { // resource access
Result r = null;
if (state == OPEN) {
checkTimeout();
throw new ResourceUnavailableException();
}
try {
r = resource.access(...); // should use timeout
} catch (Exception e) {
fail();
throw e;
}
success();
return r;
}
...
Circuit Breaker (5)
...
private void success() {
reset();
}
private void fail() {
counter++;
if (counter > THRESHOLD) {
tripBreaker();
}
}
private void reset() {
state = CLOSED;
counter = 0;
}
...
Circuit Breaker (6)
...	

private void tripBreaker() {
state = OPEN;
tripTime = System.currentTimeMillis();
}
private void checkTimeout() {
if ((System.currentTimeMillis - tripTime) > TIMEOUT) {
state = HALF_OPEN;
counter = THRESHOLD;
}
}	

public State getState()
return state;
}
}
Patrón #3
Fail Fast
Fail Fast (1)
Fail Fast (2)
Fail Fast (3)
public class FailFastGuard {
private FailFastGuard() {}
public static void checkResources(Set<CircuitBreaker> resources) {
for (CircuitBreaker r : resources) {
if (r.getState() != CircuitBreaker.CLOSED) {
throw new ResourceUnavailableException(r);
}
}	

	

 }
}
Fail Fast (4)
public class MyService {
Set<CircuitBreaker> requiredResources;
// Initialize resources
...
public Result myExpensiveAction(...)
{
FailFastGuard.checkResources(requiredResources);
// Execute core action
...
}
}
Patrón #4
Shed Load
Shed Load (1)
Shed Load (2)
Shed Load (3)
public class ShedLoadFilter implements Filter {
Random random;
public void init(FilterConfig fc) throws ServletException {
random = new Random(System.currentTimeMillis());
}
public void destroy() {
random = null;
} ...
Shed Load (4)
...
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws java.io.IOException, ServletException {
int load = getLoad();
if (shouldShed(load)) {

HttpServletResponse res = (HttpServletResponse)response;
res.setIntHeader("Retry-After", RECOMMENDATION);
res.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
return;
}
chain.doFilter(request, response);
}
...
Shed Load (5)
...
private boolean shouldShed(int load) { // Example implement
if (load < THRESHOLD) {
return false;
}
double shedBoundary =
((double)(load - THRESHOLD))/
((double)(MAX_LOAD - THRESHOLD));
return random.nextDouble() < shedBoundary;
}
}
Patrón #5
Deferrable Work
Deferrable Work (1)
Deferrable Work (2)
Deferrable Work (3)
// Adaptive load variant
ProcessingState state = initBatch();
while(!state.done()) {
waitLoadBased();
state = processNext(state);
}
void waitLoadBased() {

int load = getLoad();

long delay = calcDelay(load);

Thread.sleep(delay); // try-catch left out for better readability
}
long calcDelay(int load) { // Simple example implementation
if (load < THRESHOLD) {
return 0L;
}
return (load – THRESHOLD) * DELAY_FACTOR;
}
Patrón #6
Monitoreo
Referencias
• How Complex Systems Fail
http://j.mp/HowComplexSystemsFail
!
• Release It!
http://j.mp/ReleaseIt
!
• Fault tolerance made Easy
http://j.mp/FaultToleranceMadeEasy
!
• Fault tolerance 101
http://j.mp/FaultTolerance101
Se MUY amable con tus usuarios
Ellos te lo agradecerán :)
Preguntas
Agustín Ramos
@MachinesAreUs

Más contenido relacionado

La actualidad más candente

Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the futureParadigma Digital
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc X
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVAinnovalabcun
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catchjbersosa
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standarjbersosa
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepcionesjbersosa
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJavaParadigma Digital
 
Workshop iOS 4: Closures, generics & operators
Workshop iOS 4: Closures, generics & operatorsWorkshop iOS 4: Closures, generics & operators
Workshop iOS 4: Closures, generics & operatorsVisual Engineering
 
SMA1011_BUBAL_Tipos de comportamiento
SMA1011_BUBAL_Tipos de comportamientoSMA1011_BUBAL_Tipos de comportamiento
SMA1011_BUBAL_Tipos de comportamientoxoanGz
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013dayaorte
 
Tipos De Comportamiento
Tipos De ComportamientoTipos De Comportamiento
Tipos De ComportamientoSegaAlex
 
3 java sesin 3 pps
3 java sesin 3 pps3 java sesin 3 pps
3 java sesin 3 ppsajplbe
 
Scjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlScjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlJose Selman
 
SCJP, Clase 4: Operadores
SCJP, Clase 4: OperadoresSCJP, Clase 4: Operadores
SCJP, Clase 4: Operadoresflekoso
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalParadigma Digital
 
Guia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesasercionesGuia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesasercionesjbersosa
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en JavaJohn Ortiz
 

La actualidad más candente (20)

Java 8 time to join the future
Java 8  time to join the futureJava 8  time to join the future
Java 8 time to join the future
 
Jyoc java-cap23 j unit
Jyoc java-cap23 j unitJyoc java-cap23 j unit
Jyoc java-cap23 j unit
 
Sincronizacion
SincronizacionSincronizacion
Sincronizacion
 
Excepciones en Java
Excepciones en JavaExcepciones en Java
Excepciones en Java
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
Estructuras de control try catch
Estructuras de control try catchEstructuras de control try catch
Estructuras de control try catch
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
5.manejo de excepciones
5.manejo de excepciones5.manejo de excepciones
5.manejo de excepciones
 
Workshop iOS 4: Closures, generics & operators
Workshop iOS 4: Closures, generics & operatorsWorkshop iOS 4: Closures, generics & operators
Workshop iOS 4: Closures, generics & operators
 
SMA1011_BUBAL_Tipos de comportamiento
SMA1011_BUBAL_Tipos de comportamientoSMA1011_BUBAL_Tipos de comportamiento
SMA1011_BUBAL_Tipos de comportamiento
 
Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013Pruebas de aceptación 15 11_2013
Pruebas de aceptación 15 11_2013
 
Tipos De Comportamiento
Tipos De ComportamientoTipos De Comportamiento
Tipos De Comportamiento
 
3 java sesin 3 pps
3 java sesin 3 pps3 java sesin 3 pps
3 java sesin 3 pps
 
Scjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow ControlScjp Jug Section 2 Flow Control
Scjp Jug Section 2 Flow Control
 
SCJP, Clase 4: Operadores
SCJP, Clase 4: OperadoresSCJP, Clase 4: Operadores
SCJP, Clase 4: Operadores
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
Guia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesasercionesGuia demanejodeexcepcionesaserciones
Guia demanejodeexcepcionesaserciones
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 

Similar a Sistemas Tolerantes a Fallas

Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - TrovitJordi Gerona
 
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesosReporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesosAntares Zehcnas
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUGJordi Gerona
 
DefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDanielCorzo12
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosmellcv
 
Curso de Struts2: Unidad Didáctica 00 Introduccion
Curso de Struts2: Unidad Didáctica 00 IntroduccionCurso de Struts2: Unidad Didáctica 00 Introduccion
Curso de Struts2: Unidad Didáctica 00 IntroduccionDavid Vaquero
 
Sistemas operativos unidad 2
Sistemas operativos unidad 2Sistemas operativos unidad 2
Sistemas operativos unidad 2Luis Cigarroa
 
5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion Final5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion FinalUVM
 
Programacion Servidor-Chat
Programacion Servidor-ChatProgramacion Servidor-Chat
Programacion Servidor-ChatEliana Ruiz
 
Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion ReactivaAndres Almiray
 

Similar a Sistemas Tolerantes a Fallas (20)

JVM Reactive Programming
JVM Reactive ProgrammingJVM Reactive Programming
JVM Reactive Programming
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesosReporte de grafos con semagforos de 3,3,4 y 6 procesos
Reporte de grafos con semagforos de 3,3,4 y 6 procesos
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
DefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJavaDefinicionExplicacionEjemplosdeHilosenJava
DefinicionExplicacionEjemplosdeHilosenJava
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptos
 
Curso de Struts2: Unidad Didáctica 00 Introduccion
Curso de Struts2: Unidad Didáctica 00 IntroduccionCurso de Struts2: Unidad Didáctica 00 Introduccion
Curso de Struts2: Unidad Didáctica 00 Introduccion
 
Sistemas operativos unidad 2
Sistemas operativos unidad 2Sistemas operativos unidad 2
Sistemas operativos unidad 2
 
5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion Final5 Mecanismos Reuntilizacion Abstraccion Final
5 Mecanismos Reuntilizacion Abstraccion Final
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Practica cliente servidor java
Practica cliente servidor javaPractica cliente servidor java
Practica cliente servidor java
 
Programacion Servidor-Chat
Programacion Servidor-ChatProgramacion Servidor-Chat
Programacion Servidor-Chat
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 
Statement
StatementStatement
Statement
 
Introduccion a Programacion Reactiva
Introduccion a Programacion ReactivaIntroduccion a Programacion Reactiva
Introduccion a Programacion Reactiva
 

Más de Agustin Ramos

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerAgustin Ramos
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017Agustin Ramos
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?Agustin Ramos
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskellAgustin Ramos
 
Técnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoTécnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoAgustin Ramos
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continuaAgustin Ramos
 
Modelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaModelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaAgustin Ramos
 
Arquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noArquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noAgustin Ramos
 
Arqueología de software
Arqueología de softwareArqueología de software
Arqueología de softwareAgustin Ramos
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Agustin Ramos
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoAgustin Ramos
 
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroLa nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroAgustin Ramos
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraAgustin Ramos
 

Más de Agustin Ramos (14)

Exploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with ArcheometerExploring Elixir Codebases with Archeometer
Exploring Elixir Codebases with Archeometer
 
From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017From Elixir to Akka (and back) - ElixirConf Mx 2017
From Elixir to Akka (and back) - ElixirConf Mx 2017
 
¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?¿En qué la estamos regando en pruebas de software?
¿En qué la estamos regando en pruebas de software?
 
Programación funcional con haskell
Programación funcional con haskellProgramación funcional con haskell
Programación funcional con haskell
 
Técnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseñoTécnicas basadas en matriz de estructura de diseño
Técnicas basadas en matriz de estructura de diseño
 
Acercándose a la entrega continua
Acercándose a la entrega continuaAcercándose a la entrega continua
Acercándose a la entrega continua
 
Modelos de paralelismo y concurrencia
Modelos de paralelismo y concurrenciaModelos de paralelismo y concurrencia
Modelos de paralelismo y concurrencia
 
Arquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que noArquitecturas que crecen y arquitecturas que no
Arquitecturas que crecen y arquitecturas que no
 
Arqueología de software
Arqueología de softwareArqueología de software
Arqueología de software
 
Hola OSGi
Hola OSGiHola OSGi
Hola OSGi
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
 
BDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamientoBDD - Desarrollo dirigido por comportamiento
BDD - Desarrollo dirigido por comportamiento
 
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingenieroLa nueva imagen del gurú - El maestro artesano dentro del ingeniero
La nueva imagen del gurú - El maestro artesano dentro del ingeniero
 
Modularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidraModularización efectiva - domando a la hidra
Modularización efectiva - domando a la hidra
 

Último

La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Último (16)

La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

Sistemas Tolerantes a Fallas

  • 2. ¿Cuál es el costo de una falla?
  • 3. ¿Cuál es el costo de una falla? • Una pequeña molestia para algún usuario. ! • Una transacción (de negocio) no completada. • Datos inconsistentes. ! • No disponibilidad del sistema. O_o ! • Pérdida de un cliente. • O de muchos de ellos. ! • Muerte de una organización.
  • 4. (Casi) Todos los sistemas son distribuidos
  • 5. Las falacias de los sistemas distribuidos 1. La red es confiable. 2. La latencia es cero. 3. El ancho de banda es infinito. 4. La red es segura. 5. La topología no cambia. 6. Existe solo un administrador. 7. El costo del transporte es cero. 8. La red es homogénea.
  • 9. 1. Aceptar: No puedes prevenir todas las fallas. 2. Evita los “puntos únicos de falla”. 3. Implementa mecanismos de detección de errores. 4. Implementa corrección de errores. • Si es posible y hace sentido. • e.g. patrón: Compensating Transactions ? 5. Contención de errores 1. Evita que se propaguen.
  • 10. Consecuencias Sistemas… • Creados de componentes pequeños, independientes en tiempo de ejecución. • Distribuidos. • Con reintentos finitos. • Con respuestas apropiadas para casos de falla.
  • 13.
  • 15. Timeouts (1) // Básico 1 myObject.wait(); // No uses esto por default myObject.wait(TIMEOUT); // Mejor usa esto ! // Básico 2 myThread.join(); // No uses esto por default myThread.join(TIMEOUT); // Mejor usa esto
  • 16. Timeouts (2) // Utilizando el API de concurrencia de Java <MyActionResult> myAction = <My Blocking Action> ExecutorService executor = Executors.newSingleThreadExecutor(); Future<MyActionResult> future = executor.submit(myAction); MyActionResult result = null; try { result = future.get(); // No uses esto por default result = future.get(TIMEOUT, TIMEUNIT); // Mejor usa esto } catch (TimeoutException e) { // Si ocurre el timeout ... } catch (...) { ... }
  • 17. Timeouts (3) // Utilizando el SimpleTimeLimiter de Guava Callable<MyActionResult> myAction = <My Blocking Action> SimpleTimeLimiter limiter = new SimpleTimeLimiter(); MyActionResult result = null; try {
 result = limiter.callWithTimeout(myAction, TIMEOUT, TIMEUNIT, false); } catch (UncheckedTimeoutException e) { ... } catch (...) { ... }
  • 21. Circuit Breaker (3) public class CircuitBreaker implements MyResource { public enum State { CLOSED, OPEN, HALF_OPEN } final MyResource resource; State state; int counter; long tripTime; public CircuitBreaker(MyResource r) { resource = r; state = CLOSED; counter = 0; tripTime = 0L; } ...
  • 22. Circuit Breaker (4) ... public Result access(...) { // resource access Result r = null; if (state == OPEN) { checkTimeout(); throw new ResourceUnavailableException(); } try { r = resource.access(...); // should use timeout } catch (Exception e) { fail(); throw e; } success(); return r; } ...
  • 23. Circuit Breaker (5) ... private void success() { reset(); } private void fail() { counter++; if (counter > THRESHOLD) { tripBreaker(); } } private void reset() { state = CLOSED; counter = 0; } ...
  • 24. Circuit Breaker (6) ... private void tripBreaker() { state = OPEN; tripTime = System.currentTimeMillis(); } private void checkTimeout() { if ((System.currentTimeMillis - tripTime) > TIMEOUT) { state = HALF_OPEN; counter = THRESHOLD; } } public State getState() return state; } }
  • 28. Fail Fast (3) public class FailFastGuard { private FailFastGuard() {} public static void checkResources(Set<CircuitBreaker> resources) { for (CircuitBreaker r : resources) { if (r.getState() != CircuitBreaker.CLOSED) { throw new ResourceUnavailableException(r); } } } }
  • 29. Fail Fast (4) public class MyService { Set<CircuitBreaker> requiredResources; // Initialize resources ... public Result myExpensiveAction(...) { FailFastGuard.checkResources(requiredResources); // Execute core action ... } }
  • 33. Shed Load (3) public class ShedLoadFilter implements Filter { Random random; public void init(FilterConfig fc) throws ServletException { random = new Random(System.currentTimeMillis()); } public void destroy() { random = null; } ...
  • 34. Shed Load (4) ... public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { int load = getLoad(); if (shouldShed(load)) {
 HttpServletResponse res = (HttpServletResponse)response; res.setIntHeader("Retry-After", RECOMMENDATION); res.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); return; } chain.doFilter(request, response); } ...
  • 35. Shed Load (5) ... private boolean shouldShed(int load) { // Example implement if (load < THRESHOLD) { return false; } double shedBoundary = ((double)(load - THRESHOLD))/ ((double)(MAX_LOAD - THRESHOLD)); return random.nextDouble() < shedBoundary; } }
  • 39. Deferrable Work (3) // Adaptive load variant ProcessingState state = initBatch(); while(!state.done()) { waitLoadBased(); state = processNext(state); } void waitLoadBased() {
 int load = getLoad();
 long delay = calcDelay(load);
 Thread.sleep(delay); // try-catch left out for better readability } long calcDelay(int load) { // Simple example implementation if (load < THRESHOLD) { return 0L; } return (load – THRESHOLD) * DELAY_FACTOR; }
  • 41.
  • 42.
  • 43. Referencias • How Complex Systems Fail http://j.mp/HowComplexSystemsFail ! • Release It! http://j.mp/ReleaseIt ! • Fault tolerance made Easy http://j.mp/FaultToleranceMadeEasy ! • Fault tolerance 101 http://j.mp/FaultTolerance101
  • 44. Se MUY amable con tus usuarios Ellos te lo agradecerán :)