# Almacenamiento distribuido

El crecimiento exponencial de los volúmenes de datos en todas las industrias exige nuevas tecnologías de almacenamiento.
El almacenamiento distribuido es un método de almacenamiento de datos mediante múltiples nodos en una red de ordenadores interconectados. Como resultado, los datos disponibles son escalables y resistentes frente a los errores. A diferencia de los sistemas de almacenamiento tradicionales, el almacenamiento distribuido extiende los datos a través de múltiples localizaciones. Esta descentralización reduce el riesgo de la pérdida de datos, mejora la velocidad de acceso y reduce costes.

## Historia

El almacenamiento distribuido surgió a principios de la década de 1990, impulsado por la creciente demanda de soluciones de almacenamiento más escalables, confiables y accesibles. Inicialmente, su adopción se limitaba principalmente al ámbito académico y de investigación, donde se valoraba su capacidad para manejar grandes conjuntos de datos y su resistencia a fallos.
Sin embargo, con la explosión del internet y la adopción generalizada de las tecnologías web, el almacenamiento distribuido experimentó un auge significativo en la última década del siglo XX y principios del XXI. La facilidad de uso, la accesibilidad desde cualquier dispositivo y la posibilidad de compartir archivos de forma sencilla lo convirtieron en una opción atractiva para usuarios domésticos y empresas de todos los tamaños.(Véase: Proveedores).
En el ámbito empresarial su uso es más restringido. Las grandes empresas utilizan aplicaciones propias para centralizar la información en servidores, de tal manera que desde cualquier unidad dentro de su red sea más sencillo acceder a la información.

## Tipos de datos almacenados por lo sistemas de almacenamiento distribuido

Los sistemas de almacenamiento distribuidos pueden almacenar varios tipos de datos:

### Bloques

Un tipo particular de sistema de almacenamiento distribuido son los llamados bloques realiza un seguimiento de los datos en bloques de tamaño fijo, normalmente entre unos pocos kilobytes y varios megabytes. Dentro del repositorio, cada bloque se maneja como una entidad separada y se mantiene por separado. Los repositorios de bloques ofrecen capacidades de almacenamiento de bajo nivel y se utilizan con frecuencia en plataformas de computación en la nube e infraestructuras virtualizadas, entre otras situaciones, donde es necesario el acceso directo a los bloques de almacenamiento sin procesar.
Los datos se organizan en bloques en un repositorio de bloques y cada bloque se reconoce de forma única mediante una dirección o id. En el sistema distribuido, estos bloques se dividen entre varios nodos o servidores, ofreciendo tolerancia a fallos y redundancia.
Los repositorios de bloques son una excelente opción para el almacenamiento de alto rendimiento para aplicaciones como bases de datos y otras que necesitan un acceso aleatorio eficiente a los datos.

### Archivos

Un sistema de archivos distribuido es un tipo de sistema de almacenamiento distribuido que se utiliza para organizar y controlar archivos entre varios nodos o servidores. Los repositorios de archivos son útiles para una variedad de aplicaciones, como entrega de contenido, análisis de datos y entornos de trabajo colaborativo, ya que ofrecen un espacio de nombres consistente y jerárquico para almacenar y acceder a archivos.
Los archivos en un repositorio de archivos están organizados de manera similar a los sistemas de archivos tradicionales, con archivos agrupados en directorios y subdirectorios. Dentro del repositorio, cada archivo se reconoce de forma única mediante una ruta.

### Objetos

Está destinado a administrar y almacenar objetos, que se componen de datos, metadatos y un identificador único. Normalmente, los objetos son unidades de datos no estructurados, como blobs, documentos, películas y fotografías. Los repositorios de objetos ofrecen una opción de almacenamiento extremadamente versátil y escalable, lo que los hace apropiados para una variedad de usos, como el archivado de datos, la entrega de contenido y el almacenamiento en la nube.
Utilizando sus distintos identificadores, los elementos se almacenan individualmente y son accesibles dentro de un repositorio de objetos. Los metadatos relacionados con un objeto pueden incluir detalles sobre su propietario, fecha de creación y tipo de contenido, entre otros.
El control de versiones, la replicación y la administración del ciclo de vida son algunos de los servicios que brindan los repositorios de objetos para ayudar a los usuarios a administrar los objetos de manera efectiva.

## Arquitecturas de los sistemas de almacenamiento distribuido
### Arquitectura basada en replicación

En esta arquitectura, los datos se replican en varios nodos del sistema. Esto garantiza la tolerancia a fallos, ya que la pérdida de un nodo no provoca la pérdida de datos. La replicación puede ser síncrona o asíncrona, dependiendo de si los datos se copian en todos los nodos antes de que se reconozca la operación de escritura.
Replicación síncrona: antes de que el cliente reconozca la acción de escritura, los datos se transfieren a cada nodo. Esto garantiza la coherencia de los datos en todo momento en todas las réplicas. Pero debido a que el proceso de escritura tiene que esperar el reconocimiento de cada duplicado antes de finalizar, podría causar latencia. Replicación asíncrona: este tipo de replicación no espera a que se actualicen todas las réplicas; en cambio, reconoce la operación de escritura al cliente tan pronto como los datos se escriben en el nodo principal. A continuación, se realiza una copia asíncrona de los datos en los nodos de réplica. Aunque esto reduce la latencia, si el nodo principal falla antes de que se actualicen las copias, puede generar datos inconsistentes.

### Arquitectura de fragmentación

La fragmentación implica dividir los datos en subconjuntos más pequeños llamados fragmentos y distribuirlos en varios nodos. Cada nodo es responsable de almacenar y gestionar un subconjunto de datos. Esta arquitectura ayuda a distribuir la carga de almacenamiento y procesamiento de manera uniforme entre los nodos, lo que mejora la escalabilidad.
Partición horizontal: en la fragmentación, los datos se dividen horizontalmente entre varios nodos según un criterio predeterminado (por ejemplo, rango de valores, hash de la clave). Cada fragmento es supervisado por un nodo distinto y comprende una parte de los datos. Coordinación y enrutamiento: una arquitectura de fragmentación generalmente incluye un mecanismo de enrutamiento para identificar el fragmento del cual se recuperan los datos solicitados y enrutar la solicitud de manera adecuada. También se requieren técnicas de coordinación para gestionar eventos como migraciones de fragmentos y reequilibrio y para garantizar la coherencia de los datos.

### Sistema de archivos distribuido

DFS ofrece una vista única y unificada del almacenamiento de archivos en varios servidores. Ofrece a los usuarios y a las aplicaciones un sistema de archivos único y lógico al mismo tiempo que abstrae la complejidad subyacente de la distribución del almacenamiento. El sistema de archivos distribuido Hadoop (HDFS) y el sistema de archivos de Google (GFS) son dos ejemplos.
Arquitectura cliente/servidor: para acceder y modificar archivos en un DFS, los clientes se comunican con los servidores. Cada servidor supervisa un subconjunto de todo el sistema de archivos y están dispersos por toda la red. Los clientes utilizan una interfaz definida que proporciona DFS para solicitar operaciones de archivos (lectura, escritura y eliminación).
Vista uniforme: DFS simplifica las complejidades de la distribución del almacenamiento. Los usuarios ven un sistema de archivos único y lógico incluso cuando los datos están ubicados físicamente en varios servidores. Tolerancia a fallos y escalabilidad: los DFS están diseñados para crecer horizontalmente agregando más servidores a la red. En caso de caídas del servidor, también cuentan con técnicas de tolerancia a fallos para garantizar la disponibilidad de los datos. Con frecuencia se utilizan técnicas de redundancia y replicación.

### Arquitectura de almacenamiento de objetos

Los datos se organizan como objetos en el almacenamiento de objetos, cada uno con su propia información, datos e identidad única. Los sistemas de almacenamiento de objetos pueden almacenar datos no estructurados, incluidos documentos, películas y fotografías, y son muy escalables. OpenStack Swift, Azure Blob Storage y Amazon S3 son algunos ejemplos.
Objetos y metadatos: los datos se organizan en componentes distintos llamados objetos en la arquitectura de almacenamiento de objetos. Cada objeto se compone de metadatos relacionados y datos reales, que pueden ser un documento, un vídeo o una imagen. Los atributos del elemento, como su nombre, tamaño, tipo de contenido, fecha de creación y cualquier otro metadato personalizado, están todos contenidos en los metadatos. Estos metadatos hacen posible la gestión, recuperación y almacenamiento eficientes de objetos y, al mismo tiempo, ofrecen un contexto revelador. Jerarquía plana: los sistemas de almacenamiento de objetos utilizan una jerarquía plana para organizar los datos en carpetas y subcarpetas, a diferencia de los sistemas de archivos estándar que utilizan una estructura de directorios jerárquica. Cada objeto en el sistema de almacenamiento tiene una identificación única y todos se guardan en un espacio de nombres plano.

## Comparación con almacenamiento centralizado

El almacenamiento distribuido y el almacenamiento centralizado son dos enfoques diferentes para almacenar y administrar datos.
El almacenamiento centralizado se refiere a una arquitectura de almacenamiento en la que todos los datos se almacenan en una única ubicación, como un servidor o un centro de datos. Todo el acceso a los datos está controlado por una autoridad central y los usuarios deben conectarse a esta ubicación central para acceder a sus datos. Este enfoque se utiliza a menudo en entornos de TI tradicionales y es relativamente sencillo de gestionar.
El almacenamiento distribuido, como ya hemos visto, se refiere a una arquitectura de almacenamiento en la que los datos se distribuyen en varias ubicaciones, a menudo utilizando una red de servidores o nodos. Cada nodo de la red almacena una parte de los datos y todos los nodos trabajan juntos para proporcionar acceso a los datos. Este enfoque se utiliza a menudo en entornos de computación en la nube y big data, donde es necesario almacenar y acceder a grandes cantidades de datos de forma rápida y eficiente.
La principal diferencia entre el almacenamiento distribuido y el almacenamiento centralizado es la forma en que se almacenan y se accede a los datos. En una arquitectura de almacenamiento centralizado, todos los datos se almacenan en una única ubicación, lo que puede ser un único punto de error. Por el contrario, el almacenamiento distribuido reparte los datos en múltiples ubicaciones, lo que puede mejorar la con-fiabilidad y la disponibilidad. Además, el almacenamiento distribuido puede proporcionar una mejor escalabilidad y rendimiento, ya que se puede acceder a los datos desde varias ubicaciones simultáneamente.

## Ventajas almacenamiento distribuido

* Accesibilidad: Es posible acceder a los datos desde cualquier lugar y en cualquier momento.
* Confiabilidad: El almacenamiento distribuido ofrece una alta disponibilidad y tolerancia a fallos.
* Escalabilidad: El almacenamiento distribuido puede ampliarse fácilmente añadiendo más nodos a la red. Esto lo hace ideal para aplicaciones que requieren almacenar grandes cantidades de datos o que experimentan un crecimiento rápido.
* Flexibilidad: Se adapta a las necesidades de usuarios individuales y empresas de todos los tamaños.
* Rendimiento mejorado: El almacenamiento distribuido puede distribuir la carga de trabajo entre varios nodos, lo que puede mejorar el rendimiento general.
* Redundancia de datos: Los datos pueden replicarse en varios nodos, lo que proporciona redundancia y protección contra la pérdida de datos.
* Rentabilidad: El coste por GB de repositorio a menudo disminuye cuando se almacena más información. Por ejemplo, los costes de almacenamiento en TB pueden ser significativamente menores que el coste de almacenamiento por GB para volúmenes de datos inferiores.
* Tolerancia a fallos:Si un nodo falla, los datos siguen siendo accesibles en otros nodos. Esto hace que el almacenamiento distribuido sea muy resistente a fallos.

## Desventajas almacenamiento distribuido

* Complejidad: El almacenamiento distribuido puede ser más complejo de gestionar que el almacenamiento centralizado.
* Consistencia de datos: Es importante garantizar que los datos sean coherentes en todos los nodos. Esto puede requerir el uso de protocolos y algoritmos específicos.
* Costes variables: Aunque el coste de un repositorio en la nube pueda parecer bajo, el dinero puede aumentar al acceder, compartir o transferir grandes cantidades de datos con frecuencia.
* Dependencia de internet: El acceso a los archivos depende de una conexión a internet estable.
* Dependencia del proveedor: Los usuarios dependen del proveedor para la disponibilidad y seguridad de sus datos.
* Latencia: El acceso a los archivos puede ser más lento que en soluciones de almacenamiento local, especialmente para usuarios en ubicaciones remotas.
* Seguridad: El almacenamiento distribuido puede ser un objetivo atractivo para los piratas informáticos y puede recibir amenazas potenciales si no es lo suficientemente seguro. Es importante implementar medidas de seguridad adecuadas para proteger los datos.

## El rol del Blockchain en el almacenamiento distribuido

Para ponernos en contexto, la tecnología Blockchain es como un gran libro de contabilidad digital que registra todas las transacciones de manera transparente, segura y descentralizada, gracias a, entre otras cosas, el uso de la criptografía.
La tecnología Blockchain mejora la seguridad y la transparencia de los sistemas de almacenamiento distribuido. Con blockchain, los datos se almacenan en nodos peer-to-peer. Cada dato (o bloque) está vinculado criptográficamente entre sí, formando una cadena que garantiza la integridad de los datos. La naturaleza descentralizada de Blockchain significa que no hay un punto central de fallo, lo que mejora la confiabilidad.
La transparencia de blockchain permite un fácil seguimiento y verificación de las transacciones de datos, promoviendo la confianza entre los usuarios. Por lo tanto, la integración de blockchain en el almacenamiento distribuido proporciona una solución de almacenamiento de datos segura, transparente y confiable.

## Aplicaciones

El almacenamiento distribuido ha encontrado una amplia gama de aplicaciones en diversos sectores como los siguientes:
* Almacenamiento personal: Permite a los usuarios guardar sus archivos, fotos, vídeos y documentos en la nube, accediendo a ellos desde cualquier dispositivo con conexión a internet. Servicios como Dropbox, Google Drive y OneDrive son ejemplos populares de esta aplicación.
* Almacenamiento de datos masivos: Permite almacenar y procesar grandes conjuntos de datos, como los utilizados en análisis de Big Data, inteligencia artificial y aprendizaje automático. Plataformas como Hadoop, Apache Spark y Amazon EMR son ejemplos destacados en este campo.
* Colaboración empresarial: Facilita el trabajo en equipo al permitir que varios usuarios editen y compartan archivos de forma simultánea. Plataformas como Box, Google Drive for Work y Microsoft OneDrive for Business son ampliamente utilizadas en este ámbito.
* Copia de seguridad y recuperación de desastres: Brinda una solución segura y confiable para proteger datos críticos contra fallos de hardware, software o desastres naturales. Servicios como Amazon S3, Backblaze y CrashPlan son opciones populares para este propósito.
* Distribución de contenido: Facilita la distribución de contenido multimedia, como vídeos, música y software, a una gran audiencia de forma eficiente y escalable. Redes de distribución de contenido (CDN) como Akamai, Cloudflare y Amazon CloudFront son esenciales para este tipo de aplicaciones.
El punto débil de esta aplicación es sin duda alguna la seguridad. La red es demasiado vulnerable a ataques externos, por lo que las grandes empresas desconfían mucho de este tipo de servicios. Otro inconveniente que tiene es la imposibilidad de utilizar como disco duro personal este tipo de aplicaciones, ya que, al ser gratuitas muchas de ellas, los proveedores no se hacen cargo en caso de pérdida de archivos.
Además de estas aplicaciones también existen como aplicaciones del almacenamiento distribuido más enfocadas al mundo real:
* Medios de comunicación y entretenimiento: Los servicios de streaming como Netflix y Spotify aprovechan el almacenamiento distribuido para manejar las grandes librerías de contenido multimedia. Distribuyendo los archivos a través de múltiples nodos, estas plataformas pueden ofrecer alta calidad simultáneamente, experiencia de usuario ininterrumpida a millones de usuarios de streaming. El streaming de una calidad alta es crucial en el mercado, ya que es muy competitivo y hace que si tus reproducciones son más lentas, lo más probable es que pierdas suscriptores.
* Salud: En el sector de la salud, el almacenamiento distribuido transforma como están almacenados y manejados los datos del paciente. Hospitales y distribuidores de salud utilizan almacenamiento distribuido para almacenar de forma segura grandes cantidades de datos sobre los pacientes, desde informes médicos hasta fotos y archivos para complementarlos. El almacenamiento distribuido permite el acceso a la información del paciente de forma rápida y eficiente lo que mejora los diagnósticos, el plan de tratamiento y, en general, el cuidado del paciente.
* Big Data y estadísticas: Para las compañías de Big Data y las industrias de datos, el almacenamiento distribuido es un evento, idea o procedimiento que efectúa un cambio significativo en la manera actual de hacer o pensar acerca de algo. Permite el almacenamiento y la gestión eficientes de conjuntos de datos masivos, que los sistemas de almacenamiento tradicionales necesitan ayuda para manejar. Con el almacenamiento distribuido, estas empresas pueden realizar análisis de datos complejos, generar información valiosa e impulsar procesos de toma de decisiones de manera más efectiva.

## Proveedores

En la actualidad, existe una amplia gama de proveedores de almacenamiento distribuido que ofrecen diversos servicios y planes para satisfacer las necesidades de usuarios individuales y empresas de todos los tamaños. Algunos de los proveedores más populares incluyen:

### Amazon Web Services (AWS)
#### Amazon S3

Un servicio de almacenamiento en la nube escalable y de bajo costo, ideal para almacenar grandes cantidades de datos. Amazon S3 es un sistema de almacenamiento distribuido de objetos. En S3, los objetos constan de datos y metadatos. Los metadatos son un conjunto de pares de nombre-valor que proporcionan información sobre el objeto, como la fecha de la última modificación. S3 admite campos de metadatos estándar y metadatos personalizados definidos por el usuario.
Los objetos se organizan en cubos. Los usuarios de Amazon S3 deben crear cubos y especificar en cual almacenar o recuperar objetos. Los cubos son estructuras lógicas que permiten a los usuarios organizar sus datos. Los datos reales pueden distribuirse en una gran cantidad de nodos de almacenamiento en múltiples zonas de disponibilidad de Amazon (AZ) dentro de la misma región. Un cubo de Amazon S3 siempre está vinculado a una región geográfica específica (por ejemplo, EE. UU. Este 1 (Virginia del Norte)) y los objetos no pueden salir de la región.
Cada objeto en S3 se identifica mediante un cubo, una clave y un ID de versión. La clave es un identificador único de cada objeto dentro de su cubo. S3 rastrea múltiples versiones de cada objeto, indicadas por el ID de la versión.
Debido al teorema CAP, Amazon S3 proporciona alta disponibilidad y tolerancia a las particiones, pero no puede garantizar la coherencia. En cambio, ofrece un modelo de coherencia eventual:
* Cuando se PONEN o ELIMINAN datos en S3, los datos se almacenan de forma segura, pero el cambio puede tardar un tiempo en replicarse en Amazon S3.
* Cuando se produce un cambio, los clientes que lean los datos inmediatamente seguirán viendo una versión anterior de los datos, hasta que se propague el cambio.
* S3 garantiza la atomicidad: cuando un cliente lee el objeto, puede ver la versión anterior del objeto o la nueva versión, pero nunca una versión dañada o parcial.

### Microsoft Azure

Azure Storage de Microsoft es una solución de almacenamiento escalable, segura y con una alta disponibilidad, que ofrece varias opciones para almacenar y administrar datos tanto estructurados como no estructurados.
Ofrece un almacenamiento de alta disponibilidad y masivamente escalable, en forma de cinco servicios de almacenamiento diferentes: archivos, blobs, colas, tablas y discos.
Se accede a los objetos de almacenamiento de datos usando API REST o SDK, que están disponibles en varios lenguajes de programación, como son NET, Java y Python. Los desarrolladores pueden acceder a Azure Storage usando comandos creados con Azure CLI, Azure PowerShell, el Portal de Azure o del Explorador de Azure Storage.

#### ¿Cómo funciona el software?

Microsoft aloja las soluciones de software como servicio (SaaS) de Azure y las pone a disposición de los clientes a través de un navegador web mediante un modelo de pago por uso (PaYG). Los usuarios no necesitan instalar o mantener el software en sus propios dispositivos.
Para utilizar el software como servicio de Azure, primero hay que configurar una cuenta de Azure, ya sea comprando una suscripción o registrándose para realizar una prueba gratuita. Luego, puede elegir, configurar e implementar sus servicios en la nube de Azure. También puede supervisar el uso de almacenamiento desde su cuenta.
Azure Storage ofrece los siguientes cinco tipos principales de almacenamiento, que pueden usarse individualmente o combinados, para satisfacer sus diferentes necesidades de almacenamiento:
* Archivos: permite configurar un almacenamiento de archivos en la nube totalmente administrado, para compartir archivos con múltiples usuarios. Los recursos compartidos de archivos se pueden montar desde las implementaciones locales o de la nube en Windows, Linux y macOS y es posible acceder a ellos desde cualquier parte mediante el protocolo Bloque de Mensajes del Servidor (SMB) , el protocolo Sistema de Archivos de Red (NFS) y la API REST de Azure Files.
* Blobs: trata de un almacenamiento de objetos usado para almacenar y acceder a grandes volúmenes de datos sin estructurar, como imágenes y vídeos.
* Colas: almacena y recupera mensajes que tienen que procesarse de forma asincrónica.
* Tablas: es un almacén NoSQL, de claves y atributos con un diseño sin esquema, que se puede usar para almacenar grandes cantidades de datos estructurados no relacionales en la nube.
* Discos: permite almacenar y procesar datos procedentes de un disco duro virtual expuesto (VHD). Se dice que es “administrado”, porque es una abstracción de las cuentas, los contenedores de blobs y los blobs en la página de Azure Storage.

#### Microsoft Azure File Storage

Almacenamiento de objetos seguro y escalable de forma masiva para cargas de trabajo nativas de nube, archivos, lagos de datos, informática de alto rendimiento y aprendizaje automático.
Tanto Azure Blob como Azure File Storage pueden almacenar y recuperar grandes cantidades de datos a través de una red o de Internet, pero cada uno tiene distintas características adecuadas para casos de uso diferentes.
Azure Blob Storage puede almacenar grandes cantidades de datos no estructurados, como imágenes y archivos de audio, o grandes cantidades de datos a los que se accede con poca frecuencia, como copias de seguridad o datos archivados. Por otro lado, Azure File Storage se suele usar para crear sistemas de compartición de archivos, distribuidos y basados en la nube, a los que se accede a través del protocolo SMB. File Storage es más adecuado para almacenar cantidades pequeñas de datos a los que tiene que acceder un gran número de usuarios de manera simultánea.
Es por eso que a nivel de almacenamiento distribuido, el que nos interesa es Microsoft Azure File Storage.

### Google Cloud Storage

Es un repositorio en la nube que ofrece almacenamiento de objetos. El repositorio en la nube ha sido diseñado para guardar grandes cantidades de datos y puede ser utilizada para varios propósitos como web hosting, recuperación de copias de seguridad y grandes estadísticas de información.

### BackBlaze

Un servicio de copia de seguridad en la nube simple y confiable, que ofrece almacenamiento ilimitado a un precio accesible.

### CrashPlan

Otra opción popular para la copia de seguridad en la nube, que ofrece protección contra ransomware y otras amenazas.