LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
DynamoDB, análisis del paper.
1. DynamoDB
José A. San Miguel Carrillo
Javier de la Rosa Fernández
Alexandra Conde Hermo
Manuel Bazaga
Carmen Alonso Martínez
2. Introducción
● Requisitos operativos en términos de:
rendimiento, fiabilidad y eficiencia.
● Altamente escalable.
● Almacenamiento siempre disponibles
(Amazon S3)
● Acceso con primary-key
3. Introducción
● Data es particionada y replicada usando
hashing consistente y object versioning
(consistencia: técnica de quórum similar y
un protocolo de sincronización de réplica
descentralizado)
● Almacenamiento eventualmente consistente
4. Trasfondo
¿Qué es?
BD no relacional Uso de recursos eficiente
Interfaz (k,v) Escalable
Alta disponibilidad
¿Para quién?
● Para Amazon
● Para aquellos con problemas similares:
o No requieren querys ni manejo complejo
o Prefieren disponibilidad sobre consistencia
5. Requisitos
Query Model:
R/W simple. Objetos identificados por clave única
Las operaciones no afectan a más de un objeto
Objetos<1MB
ACID:
Sacrifica consistencia por disponibilidad.
No garantiza aislamiento y permite sólo
actualizaciones por clave única
Eficiencia:
Sacrifica rendimiento, disponibilidad y eficiencia
en coste para alcanzar latencias muy bajas y
consistentes.
Supuestos
“Dynamo sólo es usado
por Amazon”
● Se asume un ambiente no
hostil.
● No se tienen en cuenta
requisitos de seguridad.
● El primer dimensionamiento
se hace acorde a las
necesidades de Amazon.
6. SLA - service level agreement
● Medido en el percentil 99.9, no en la media.
● tr,tw<300ms
● Enfocado a mejorar la experiencia de todos
los usuarios, no de la mayoría.
7. Consideraciones del diseño
Eventualmente consistente - las actualizaciones llegan a
las réplicas eventualmente… ¿cuándo? ¿R/W?
Siempre podremos escribir.
Otros principios del diseño
Escalabilidad
Simetría
Descentralización
Heterogeneidad
8. Trabajo relacionado
Peer to Peer Systems
Freenet y Gnutella
Structured P2P Networks (Pastry y Chord) DHT
Oceanstore y PAST (Sistemas de almacenamiento)
9. Trabajo relacionado
Distributed File Systems and Databases
Ficus y Coda
Farsite - NFS (Network File System)
Google File System
GFS (Global Forecast System)
11. Trabajo relacionado
Discusión
● Always writeable.
● Infraestructura dentro de un dominio administrativo
único.
● No requieren soporte para espacios de nombres
jerárquicos
● Se construye para aplicaciones sensibles a la latencia
13. Interfaz
● Almacenamiento <clave,valor>
● Operaciones:
o get(key): Devuelve un objeto (o una lista) de objetos (incluidos
los conflictos)
o put(key,context,object): Localiza donde escribir un objeto (y
sus réplicas) a partir de una clave
Context contiene metainformación tal como versionado,
validaciones, etc.
● Se generan identificadores de 128-bits aplicando
MD5 a las claves
14. Particionado
● Diseñado para un escalado incremental mediante nodos
● Esquema de particionado distribuido mediante “Consistent
hashing”
o Claves distribuidas en estructura de anillo en varios nodos
o Cada nodo es responsable de gestionar un rango de claves
o Nodos virtuales para gestionar la carga y repartición de las claves
● Cada nodo acepta una carga equivalente a las de sus
vecinos.
15. Replicacion
● Cada clave (k) es asignada a un coordinador (i)
● Cada valor (v) se replica en los nodos (lógicos) (N-
1) segun el sentido horario
● El coordinador (i) es responsable de actualizar el
resto de nodos para las claves que posee.
● Cada clave (k) sabe los nodos físicos responsables
de mantener y acceder a los valores.
17. Versionado
● Consistencia Eventual
● Los datos son actualizados de forma asincrona
o put() se devuelve el dato antes de actualizar todas
las replicas
o get() puede devolver versiones (no actualizadas) del
mismo valor
● “Siempre escribe”
o Carrito de la compra
● “Vector de tiempo” para el versionado
20. Resolución de conflictos
● Sintáctica (interna)
o Resolucion automatica
● Semántica (cliente)
o Es el cliente quien decide cómo resolver el conflicto
o Ejemplo: Carrito de la compra
Siempre se mantienen los items añadidos
Pueden “volver a aparecer” elementos borrados
22. put() & get()
● 2 estrategias para seleccionar un nodo
o En función de la carga (Generic load-balancer)
o Partition aware client-library
● Operaciones de lectura y escritura a través de un nodo Coordinador
● Quorum como protocolo de consistencia
o Operación de escritura se realizará en (N/2) +1 nodos
● Para mantener la consistencia se utilizan 3 variables
o N – Numero de nodos
o W – Número de nodos para escribir
o R – Número de nodos para leer
23. put()
● Ante una escritura, el coordinador genera el Vector de
tiempo y escribe localmente
● El coordinador réplica hacia los N nodos de su lista
● Si al menos W-1 nodos responden, la escritura es
correcta
24. get()
● El coordinador pide todas las versiones del objeto a los
N nodos de su lista
● Espera al menos a que R nodos respondan con el dato
● Si hay diferentes versiones, delega en el cliente su
resolución
● El cliente resuelve el conflicto y actualiza el dato
25. Hinted Handoff
● Asumiendo N=3, un fallo en una operacion
put() en el node A is administrado
temporalmente por B.
● Después de que A se recupere, B envia el
resultado de la operación put() a A.
● Ventaja: Los fallos temporales tienen un
mínimo efecto en la aplicación.
26. Escalabilidad
● Para añadir o quitar nodos se necesita
interacción directa
● Protocolo “Gossip”
o Detección de fallos
o Propagaciones en el cluster
● La sincronización de las replicas se realiza
mediante un Merkel hash tree
27. Implementación
Persistencia local, solicitud de coordinación y detección
de fallos
Persistencia local: diferentes motores (BDB, MySQL etc) - depende del tamaño
del objeto.
Solicitud de coordinación:
Petición R -> State machine -> enviar petición a nodos -> esperar y recibir
respuestas (si se reciben pocas la petición es fallida) -> decidir la versión de los
datos a devolver -> actualizar nodos a la última versión (read repair)
Petición W -> puede ser coordinada por cualquiera de los “top N nodes”
Generalmente el que antes respondió al read, para mantener la consistencia.
28. Estrategias seguidas con Dynamo
● Reconciliación lógica del negocio
● Reconciliación basada en Timestamp
● Alto rendimiento en lecturas
o N (Nodes) W (Writes) R(Read)
29. Dynamo es personalizable
● El poder cambiar los valores de N, W y R nos permite
adaptar Dynamo a nuestras necesidades.
o Bajos valores de W y R dan posibles riesgos de
inconsistencia
o Incrementando W se dotará de mayor durabilidad
o La configuración estándar es (3,2,2)
30. Equilibrio rendimiento-durabilidad
● El típico SLA ofrecido por Dynamo es 99.9% de
lecturas y escrituras a 300ms de latencia.
● Para algunos clientes esto no es aceptable y prefieren
intercambiar garantías de durabilidad por rendimiento.
○ Buffer en memoria
31. Distribución uniforme de la carga
● Un nodo está fuera de equilibrio si supera un cierto
umbral (por ejemplo un 15%) con respecto a la media
de peticiones en un determinado periodo de tiempo.
● Los tokens son nodos virtuales que se podrán distribuir
según las siguientes estrategias
○ ESTRATEGIA 1: T Tokens aleatorios por nodo
○ ESTRATEGIA 2: T Tokens del mismo tamaño
○ ESTRATEGIAS 3: Q/S Tokens por nodo y particionado del mismo
tamaño.
32. Conclusiones
Durante el tiempo de vida de Dynamo se ha
contrastado:
● El 99.9995% de peticiones de datos se han producido sin pérdida
● Configurable (N,R,W)
● Altamente disponible, es posible el manejo de los fallos e inconsistencias.
Consistent hashing: Consistent hashing is a special kind of hashing such that when a hash table is resized and consistent hashing is used, only keys need to be remapped on average, where is the number of keys, and is the number of slots. In contrast, in most traditional hash tables, a change in the number of array slots causes nearly all keys to be remapped. (WIKIPEDIA)
PAPER: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.147.1879
Si un nodo no está disponible (por fallas o mantenimiento de rutina), la carga manejada por este nodo se dispersa de forma uniforme en todos los nodos disponibles restantes.
Cuando un nodo esté disponible de nuevo o un nodo nuevo se añade al sistema, el nodo recién disponible acepta una cantidad aproximadamente equivalente de carga de cada uno de los nodos disponibles.
Each key (k) is assigned to a coordinator node (i).
Each value (v) is replicated to (N-1) clockwise successor logical nodes in the ring.
Node (i) is responsible to update all other (N-1) replicas for the keys it owns.
Each key (k) has a preference list of physical nodes that are responsible to maintain and access the keys data
Eventual consistency protocol is used to update all data replicas asynchronously.
put() is returned before updating all replicas.
get() can return multiple versions for the same key.
Dynamo track each data mutation as a new version version to support “write always” protocol.
Dynamo uses vector clocks protocol for versioning
¿? Bastante dificil de explicar (seguimos, mas adelante explicada
Syntactic reconciliation:
The Application is able to resolve the conflict automatically
Semantic reconciliation:
Merge results from different conflicts, make the user revise the new values.
Example: Amazons shopping cart:
Preserve “Add to cart” items.
Deleted items can resurface
2 strategies client uses to select a node
Generic load-balancer that will select a node based on load
Partition aware client-library which routes request to right node
Node handling read and write operation is called “coordinator”
Coordinator should be among first in top N nodes in preference list
For reads and writes dynamo uses consistency protocol similar to quorum system
Consistency protocol has 3 variables
N – Number of replicas of data to be read or written
W – Number of nodes that must participate in successful write operation
R – Number of machines contacted in read operation
Upon receiving put() request coordinator generates vector clock and writes data locally
Coordinator sends new version (along with vector clock) to top N nodes from preference list
If at least W-1 nodes respond, write is successful
Coordinator requests all existing version of data from top N nodes from preference list
Waits for at least R nodes to respond
In case of multiple versions, coordinator send all casually unrelated versions to client
Client reconcile divergent versions and supersede current version with reconciled version
Adding or removing the node requires a third party tool or direct user interaction.
Gossip-based protocol is used to propagate membership throughout the cluster and to detect failures.
Replica synchronization is done using Merkle hash tree.