Técnicas de replicacion para disponibilidad
Published: 2020-07-01 23:14:34

---
title: Técnicas de replicacion para disponibilidad
published: true
description: 
tags: 
//cover_image: https://direct_url_to_image.jpg
---
# Abstract 📖
Vamos ver como proporcionar a los clientes acceso un objeto replicado es lógicamente indistinguible de acceder a un objeto único, pero altamente disponible. Vamos a estudiar este problema bajo 2 diferentes modelos:
- **Modelo 1**: los fallos pueden ser detectados precisamente, aplicando las técnicas **primary-backup** y **chain replication**.
- **Modelo 2**: todo lo contrario al primero, para hacer un modelo mas realista y significativamente mas desafiante. Aplicando técnicas basadas en votos.

# Intro
>La replicación es crear múltiples copias de un objeto posiblemente mutante (archivos, base de datos, etc) con el objectivo de proporcionar alta:
- **Disponibilidad**
- **Rendimiento**.
- **Integridad**
- o cualquier combinación de los mismos.

Así, para una alta **disponibilidad** e **integridad**, las replicas necesitan ser diversas, así los fallos son lo suficientemente aislados. Para alto **rendimiento**, solo debe haber una cantidad suficiente de réplicas para cumplir con la carga impuesta sobre el objeto replicado.

**Pero nosotros acá, nos vamos a enfocar únicamente en técnicas para asegurar alta disponibilidad**. Particularmente en técnicas para dar a los clientes acceso un objeto replicado es lógicamente indistinguible de acceder a un objeto único (no replicado), pero altamente disponible.

Esta propiedad "indistinguible de un solo objeto" a veces se llama *linealización*, *semántica de una copia*, o simplemente *consistencia*, y se garantiza al imponer un orden total en las operaciones del cliente. Tal estrategia puede funcionar solo en un modelo de fallos restringido. Por ejemplo: Si los enlaces de comunicación fallidos dividen las réplicas, puede ser imposible proporcionar disponibilidad y coherencia para un objeto.

## 2 enfoques 👩‍❤️‍👨
Existen muchas técnicas de replicacion, pero 2 enfoques son bien conocidos.

### Replicacion Activa 😃
También conocida como *replicacion de maquina de estado*, las operaciones del cliente se ordenan mediante un protocolo de pedido y se envían directamente a una colección de réplicas. Cada replica individualmente ejecuta la operación. Mantener las réplicas consistentes requiere que el procesamiento sea determinista: dada la misma operación del cliente y el mismo estado, cada réplica produce la misma actualización de estado.

### Replicacion Pasiva 🥺
También conocida como replicación de copia de seguridad primaria (primary-backup replication), una de las replicas es designada primaria. Ejecuta las operaciones y envía el resultado de actualizaciones de estado a cada replica (incluso a si misma), el cual, pasivamente aplican las actualizaciones de estado recibidas.

### Comparando 😃🥺
- Si las operaciones son intensivas en cómputo, la replicación activa puede desperdiciar recursos computacionales, pero si las actualizaciones de estado son grandes, la replicación pasiva puede desperdiciar el ancho de banda de la red.
- La replicación activa no puede lidiar con el procesamiento no determinista, pero puede enmascarar fallas sin degradación del rendimiento, mientras que la replicación pasiva puede involucrar un retraso de detección y recuperación en caso de que el primario falle.

Varias soluciones híbridas que combinan ambos enfoques son comunes. Algunos procesamientos se ejecutan en una sola réplica, mientras que otros procesan todas las réplicas. No son enfoques puramente activos ni pasivos, y enfrentan diferentes compensaciones.

### Salteando parte no necesaria por ahora, vamos al grano

## Primary-Backup
- Quizas el metodo de replicacion mas comun en uso hoy en dia.
- El nodo no bloqueado y con *id* mas bajo es designado **primario** (*primary*).
- El resto de nodos no bloqueados (en funcionamiento) son llamados **copias de seguridad** (*backups*).
- Durante una operación normal, un cliente envía una actualización al primario y recibe una respuesta del primario.
- Si el primario falla, el cliente determina el nuevo primario al cual reenvía su actualización. El cliente hace esto hasta que recibe una respuesta o hasta que no queden servidores.