Skip to content

Amazon Dynamo

by Cristian Requena on marzo 31st, 2010

Dynamo es una base de datos NoSQL propietaria y de código cerrado, por lo que su uso es exclusivo de la empresa que la implementó: Amazon.

En octubre de 2007 se publicó un paper con el diseño y la especificación, a grandes rasgos, de Dynamo, rompiendo con conceptos como la consistencia o modelo relacional. Su objetivo se definió claramente: escalabilidad y disponibilidad.

A lo largo del paper Dynamo: Amazon’s Highly Available Key-value Store (Fuente: http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html) se especifica esta base de datos como una gran tabla de hash distribuida (DHT) y accesible mediante un mecanismo de “Clave-Valor”.

Sin duda se trata de la que para muchos nos ha sido la primera piedra de las bases de datos NoSQL, y, pese a no ser accesible para desarrolladores, vale la pena dar un par de pinceladas por encima de sus interesantes características.

Un aspecto interesante de Dynamo es el garantizar, en el 99.9% de los accesos, un tiempo de respuesta menor de 300ms, que provee a los clientes una experiencia “siempre en línea”, sin caídas ni restricciones del servicio. Esto quiere decir que la base de datos ha de responder en ese lapso de tiempo aunque un nodo esté caído, se corte el suministro eléctrico en un centro de datos (es decir, que se caigan 300 nodos) o, tal y como menciona el paper, “un tornado esté destruyendo centros de datos” (o lo que es lo mismo, que se pierdan esos 300 nodos).

Obviamente, esto implica una gran distribución de los datos entre nodos y sobretodo algo más interesante aún: el mecanismo de búsqueda. En las tablas de hash distribuidas (DHT) se implementan típicamente mecanismos de búsqueda como Chord, que “salta” entre varios nodos hasta que encuentra la clave buscada. Dynamo se caracteriza por no necesitar saltos, donde cada nodo mantiene la suficiente información de forma local como para poder direccionar una petición directamente al nodo que contiene el valor a devolver.

De cara al desarrollador, Dynamo proporciona la habilidad de permitir la escritura de valores siempre. Y aunque parezca algo nimio, para los que hemos lidiado con las bases de datos relacionales clásicas estoy puede llegar a ser simplemente impensable. Una de las características de las RDBMS (Relational Database Management System) se denomina por el acrónimo ACID: Atomicidad, Consistencia, Aislamiento (Isolation) y Durabilidad. Dynamo rompe con esto e implementa un mecanismo de consistencia eventual, que permite ofrecer lo que se ha comentado unas líneas atrás: siempre se puede escribir, siempre se puede leer, y en caso de producirse múltiples escrituras de la misma clave desde dos nodos no conectados de la base de datos (como por ejemplo durante la desconexión temporal de un centro de datos), en el momento de la reconciliación de los mismos prevalecerá el valor con más Quorum. Este punto se trata extensamente en la página 212 del paper.

También se ha implementado un mecanismo de sincronicación de las réplicas, utilizando árboles Merkle (árboles de hash de 192 bits), que tal y como se utilizan permiten comprobar discrepancias entre dos nodos sin tener que transferir toda la estructura de datos entre ambos. En el paper no se declara el mecanismo de comunicación, de modo que queda un poco en el aire si ambos nodos exponen sus árboles completamente o si proporcionan algún tipo de interfaz de acceso a los mismos. En cambio sí que se especifica el método de comprobación de discrepancias: si las raices de los árboles (que no dejan de ser un hash) son iguales, los dos nodos mantienen la misma información. En caso contrario, se procede a leer las ramas que surgen de la raíz, y así se itera hasta que todas las ramas de un determinado nivel equivalen entre ambos árboles/nodos.

Finalmente, y en cuanto a la integración de nodos en la red y su desagregación eventual o definitiva, se utiliza un mecanismo de Gossiping, así como un servicio de directorio de nodos (nodos seed, semilla) a los que se recurre mediante un mecanismo externo de localización.

Todas estas características hacen de Dynamo una base de datos que escala con una gran facilidad, a la vez que proporciona un acceso rápido (recordemos que el 99.9% se realiza en menos de 300 ms.), siendo, sin lugar a dudas, la primera demostración de explotación a gran escala de una base de datos NoSQL.

http://en.wikipedia.org/wiki/Chord_%28peer-to-peer%29

From → Historia, NoSQL

4 Comments
  1. Jose Rodriguez permalink

    Quisiera saber si es posible utilizar bases de datos relacionales para guardar datos de transacciones y replicar esos datos de forma resumida en una base de datos NoSQL para consultar reportes? Es recomendable utilizar por ejemplo Amazon RDS para guardar datos de facturas de un sistema de gestion y replicar esos datos en DynamoDB para generar informes o reportes Gerenciales ?

    • Si se puede, necesitas trasladar los datos de una base de datos a otra, como en MySQL todo es estructural y en NoSQL, solo es {clave:valor}
      necesitas crear algun script para pasar los datos, yo actualmente traslado los datos de MySQL a MongoDB utilizando python, y es mucho mas facil hacer una consulta a MongoDB y te tenga todo organizado que a MySQL que necesitas hacer muchos Join para obtener lo mismo…

      salu2

  2. Darly Enríquez permalink

    Me interesa conocer y profundizar más sobre el tema bases de datos no relacionales

Trackbacks & Pingbacks

  1. Bases de datos NoSQL: Cassandra vs BigTable | El Blog de Classora

Leave a Reply

Note: XHTML is allowed. Your email address will never be published.

Subscribe to this comment feed via RSS