Un sistema de archivos distribuido para la nube es un sistema de archivos que permite que muchos clientes tengan acceso a los datos y admite operaciones (crear, eliminar, modificar, leer, escribir) sobre esos datos. Cada archivo de datos puede estar particionado en varias partes llamadas fragmentos . Cada fragmento puede almacenarse en diferentes máquinas remotas, lo que facilita la ejecución paralela de aplicaciones. Normalmente, los datos se almacenan en archivos en un árbol jerárquico , donde los nodos representan directorios. Hay varias formas de compartir archivos en una arquitectura distribuida: cada solución debe ser adecuada para un cierto tipo de aplicación, dependiendo de lo compleja que sea la aplicación. Mientras tanto, la seguridad del sistema debe estar asegurada. La confidencialidad , la disponibilidad y la integridad son las claves principales para un sistema seguro.
Los usuarios pueden compartir recursos informáticos a través de Internet gracias a la computación en la nube , que se caracteriza por contar con recursos escalables y elásticos , como servidores físicos , aplicaciones y cualquier servicio que se virtualice y se asigne de forma dinámica. La sincronización es necesaria para garantizar que todos los dispositivos estén actualizados.
Los sistemas de archivos distribuidos permiten que muchas empresas grandes, medianas y pequeñas almacenen y accedan a sus datos remotos como lo hacen con sus datos locales, lo que facilita el uso de recursos variables.
En la actualidad, existen muchas implementaciones de sistemas de archivos distribuidos. Los primeros servidores de archivos fueron desarrollados por investigadores en la década de 1970. El sistema de archivos en red de Sun Microsystems estuvo disponible en la década de 1980. Antes de eso, las personas que querían compartir archivos usaban el método sneakernet , que consistía en transportar físicamente los archivos en medios de almacenamiento de un lugar a otro. Una vez que las redes de computadoras comenzaron a proliferar, se hizo evidente que los sistemas de archivos existentes tenían muchas limitaciones y no eran adecuados para entornos multiusuario. Los usuarios inicialmente usaban FTP para compartir archivos. [1] FTP se ejecutó por primera vez en el PDP-10 a fines de 1973. Incluso con FTP, los archivos debían copiarse desde la computadora de origen a un servidor y luego desde el servidor a la computadora de destino. Los usuarios debían conocer las direcciones físicas de todas las computadoras involucradas en el intercambio de archivos. [2]
Los centros de datos modernos deben dar soporte a entornos grandes y heterogéneos, compuestos por un gran número de ordenadores de distintas capacidades. La computación en la nube coordina el funcionamiento de todos esos sistemas con técnicas como la red de centros de datos (DCN), el marco MapReduce , que admite aplicaciones informáticas con uso intensivo de datos en sistemas paralelos y distribuidos, y técnicas de virtualización que proporcionan una asignación dinámica de recursos, lo que permite que varios sistemas operativos coexistan en el mismo servidor físico.
La computación en la nube permite realizar operaciones de computación a gran escala gracias a su capacidad de proporcionar al usuario los recursos de CPU y almacenamiento necesarios con total transparencia. Esto hace que la computación en la nube sea especialmente adecuada para soportar distintos tipos de aplicaciones que requieren un procesamiento distribuido a gran escala. Esta computación intensiva en datos necesita un sistema de archivos de alto rendimiento que pueda compartir datos entre máquinas virtuales (VM). [3]
La computación en la nube asigna dinámicamente los recursos necesarios y los libera una vez finalizada una tarea, lo que obliga a los usuarios a pagar solo por los servicios necesarios, a menudo a través de un acuerdo de nivel de servicio . Los paradigmas de computación en la nube y computación en clústeres están adquiriendo cada vez mayor importancia para el procesamiento de datos industriales y las aplicaciones científicas, como la astronomía y la física, que con frecuencia requieren la disponibilidad de grandes cantidades de computadoras para llevar a cabo experimentos. [4]
La mayoría de los sistemas de archivos distribuidos se basan en la arquitectura cliente-servidor, pero también existen otras soluciones descentralizadas.
El sistema de archivos de red (NFS) utiliza una arquitectura cliente-servidor , que permite compartir archivos entre varias máquinas en una red como si estuvieran ubicados localmente, lo que proporciona una vista estandarizada. El protocolo NFS permite que procesos de clientes heterogéneos, probablemente ejecutándose en diferentes máquinas y bajo diferentes sistemas operativos, accedan a archivos en un servidor distante, ignorando la ubicación real de los archivos. Depender de un solo servidor hace que el protocolo NFS sufra de una disponibilidad potencialmente baja y una escalabilidad deficiente. El uso de varios servidores no resuelve el problema de disponibilidad, ya que cada servidor funciona de forma independiente. [5] El modelo de NFS es un servicio de archivos remoto. Este modelo también se denomina modelo de acceso remoto, que contrasta con el modelo de carga/descarga:
El sistema de archivos que utiliza NFS es casi el mismo que el que utilizan los sistemas Unix . Los archivos están organizados jerárquicamente en un gráfico de nombres en el que los directorios y los archivos están representados por nodos.
Una arquitectura basada en clústeres mejora algunos de los problemas de las arquitecturas cliente-servidor, mejorando la ejecución de aplicaciones en paralelo. La técnica utilizada aquí es la fragmentación de archivos: un archivo se divide en varios fragmentos, que se "distribuyen" en varios servidores de almacenamiento. El objetivo es permitir el acceso a diferentes partes de un archivo en paralelo. Si la aplicación no se beneficia de esta técnica, sería más conveniente almacenar diferentes archivos en diferentes servidores. Sin embargo, cuando se trata de organizar un sistema de archivos distribuido para grandes centros de datos, como Amazon y Google, que ofrecen servicios a clientes web que permiten múltiples operaciones (lectura, actualización, eliminación, ...) a una gran cantidad de archivos distribuidos entre una gran cantidad de computadoras, las soluciones basadas en clústeres se vuelven más beneficiosas. Tenga en cuenta que tener una gran cantidad de computadoras puede significar más fallas de hardware. [7] Dos de los sistemas de archivos distribuidos (DFS) más utilizados de este tipo son el Sistema de archivos de Google (GFS) y el Sistema de archivos distribuidos de Hadoop (HDFS). Los sistemas de archivos de ambos son implementados por procesos de nivel de usuario que se ejecutan sobre un sistema operativo estándar ( Linux en el caso de GFS). [8]
Google File System (GFS) y Hadoop Distributed File System (HDFS) están diseñados específicamente para gestionar el procesamiento por lotes de conjuntos de datos muy grandes. Para ello, se deben tener en cuenta las siguientes hipótesis: [9]
El equilibrio de carga es esencial para un funcionamiento eficiente en entornos distribuidos. Significa distribuir el trabajo entre diferentes servidores, [11] de manera justa, para poder realizar más trabajo en la misma cantidad de tiempo y atender a los clientes más rápido. En un sistema que contiene N chunkservers en una nube (N es 1000, 10000 o más), donde se almacena una cierta cantidad de archivos, cada archivo se divide en varias partes o chunks de tamaño fijo (por ejemplo, 64 megabytes), y la carga de cada chunkserver es proporcional a la cantidad de chunks alojados por el servidor. [12] En una nube con equilibrio de carga, los recursos se pueden usar de manera eficiente mientras se maximiza el rendimiento de las aplicaciones basadas en MapReduce.
En un entorno de computación en la nube, los fallos son la norma [13] [14] y los servidores de fragmentos pueden actualizarse, reemplazarse y agregarse al sistema. Los archivos también pueden crearse, eliminarse y agregarse dinámicamente. Esto genera un desequilibrio de carga en un sistema de archivos distribuido, lo que significa que los fragmentos de archivos no se distribuyen equitativamente entre los servidores.
Los sistemas de archivos distribuidos en nubes como GFS y HDFS dependen de servidores o nodos centrales o maestros (Master para GFS y NameNode para HDFS) para administrar los metadatos y el equilibrio de carga. El maestro reequilibra las réplicas periódicamente: los datos deben trasladarse de un DataNode/ChunkServer a otro si el espacio libre en el primer servidor cae por debajo de un cierto umbral. [15] Sin embargo, este enfoque centralizado puede convertirse en un cuello de botella para esos servidores maestros, si se vuelven incapaces de administrar una gran cantidad de accesos a archivos, ya que aumenta sus cargas ya pesadas. El problema del reequilibrio de carga es NP-hard . [16]
Para lograr que una gran cantidad de servidores de fragmentos trabajen en colaboración y para resolver el problema del equilibrio de carga en sistemas de archivos distribuidos, se han propuesto varios enfoques, como la reasignación de fragmentos de archivos para que estos se puedan distribuir de la manera más uniforme posible y, al mismo tiempo, reducir el costo de movimiento tanto como sea posible. [12]
Google, una de las mayores empresas de Internet, ha creado su propio sistema de archivos distribuido, denominado Google File System (GFS), para satisfacer las crecientes demandas de procesamiento de datos de Google, y se utiliza para todos los servicios en la nube. GFS es un sistema de archivos distribuido escalable para aplicaciones con uso intensivo de datos. Proporciona almacenamiento de datos de alto rendimiento y tolerante a fallos para un gran número de clientes que acceden a él simultáneamente.
GFS utiliza MapReduce , que permite a los usuarios crear programas y ejecutarlos en varias máquinas sin tener que preocuparse por la paralelización y el equilibrio de carga. La arquitectura de GFS se basa en tener un único servidor maestro para varios servidores de bloques y varios clientes. [17]
El servidor maestro que se ejecuta en un nodo dedicado es responsable de coordinar los recursos de almacenamiento y administrar los metadatos de los archivos (el equivalente, por ejemplo, a los inodos en los sistemas de archivos clásicos). [9] Cada archivo se divide en múltiples fragmentos de 64 megabytes. Cada fragmento se almacena en un servidor de fragmentos. Un fragmento se identifica mediante un identificador de fragmento, que es un número de 64 bits único a nivel global que asigna el maestro cuando se crea el fragmento por primera vez.
El maestro mantiene todos los metadatos de los archivos, incluidos los nombres de los archivos, los directorios y la asignación de los archivos a la lista de fragmentos que contienen los datos de cada archivo. Los metadatos se guardan en la memoria principal del servidor maestro, junto con la asignación de los archivos a los fragmentos. Las actualizaciones de estos datos se registran en un registro de operaciones en el disco. Este registro de operaciones se replica en máquinas remotas. Cuando el registro se vuelve demasiado grande, se crea un punto de control y los datos de la memoria principal se almacenan en una estructura de árbol B para facilitar la asignación de nuevo a la memoria principal. [18]
Para facilitar la tolerancia a fallos , cada fragmento se replica en varios servidores de fragmentos (por defecto, tres). [19] Un fragmento está disponible en al menos un servidor de fragmentos. La ventaja de este esquema es la simplicidad. El maestro es responsable de asignar los servidores de fragmentos para cada fragmento y se contacta con él solo para obtener información de metadatos. Para todos los demás datos, el cliente tiene que interactuar con los servidores de fragmentos.
El maestro lleva un registro de la ubicación de un fragmento. Sin embargo, no intenta mantener la ubicación exacta de los fragmentos, sino que solo se comunica ocasionalmente con los servidores de fragmentos para ver qué fragmentos tienen almacenados. [20] Esto permite la escalabilidad y ayuda a evitar cuellos de botella debido al aumento de la carga de trabajo. [21]
En GFS, la mayoría de los archivos se modifican agregando datos nuevos y no sobrescribiendo los existentes. Una vez escritos, los archivos generalmente solo se leen secuencialmente en lugar de hacerlo de manera aleatoria, y eso hace que este DFS sea el más adecuado para escenarios en los que se crean muchos archivos grandes una vez pero se leen muchas veces. [22] [23]
Cuando un cliente desea escribir en un archivo o actualizarlo, el maestro le asignará una réplica, que será la réplica principal si se trata de la primera modificación. El proceso de escritura se compone de dos pasos: [9]
En consecuencia, podemos diferenciar dos tipos de flujos: el flujo de datos y el flujo de control. El flujo de datos está asociado a la fase de envío y el flujo de control está asociado a la fase de escritura. Esto garantiza que el servidor de fragmentos primario tome el control del orden de escritura. Tenga en cuenta que cuando el maestro asigna la operación de escritura a una réplica, incrementa el número de versión del fragmento e informa a todas las réplicas que contienen ese fragmento sobre el nuevo número de versión. Los números de versión de los fragmentos permiten detectar errores de actualización, si una réplica no se actualizó porque su servidor de fragmentos estaba inactivo. [24]
Algunas de las nuevas aplicaciones de Google no funcionaban bien con el tamaño de fragmento de 64 megabytes. Para resolver ese problema, GFS comenzó, en 2004, a implementar el enfoque Bigtable . [25]
HDFS , desarrollado por la Apache Software Foundation , es un sistema de archivos distribuido diseñado para almacenar grandes cantidades de datos (terabytes o incluso petabytes). Su arquitectura es similar a GFS, es decir, una arquitectura de servidor/cliente. El HDFS normalmente se instala en un clúster de computadoras. El concepto de diseño de Hadoop está basado en el de Google, con Google File System, Google MapReduce y Bigtable , implementados por Hadoop Distributed File System (HDFS), Hadoop MapReduce y Hadoop Base (HBase) respectivamente. [26] Al igual que GFS, HDFS es adecuado para escenarios con acceso a archivos de escritura única y lectura múltiple, y admite anexiones y truncamientos de archivos en lugar de lecturas y escrituras aleatorias para simplificar los problemas de coherencia de datos. [27]
Un clúster HDFS consta de un solo NameNode y varias máquinas DataNode. El NameNode, un servidor maestro, administra y mantiene los metadatos de los DataNodes de almacenamiento en su RAM. Los DataNodes administran el almacenamiento conectado a los nodos en los que se ejecutan. NameNode y DataNode son software diseñados para ejecutarse en máquinas de uso diario, que generalmente funcionan con un sistema operativo Linux. HDFS se puede ejecutar en cualquier máquina que admita Java y, por lo tanto, puede ejecutar un NameNode o el software Datanode. [28]
En un clúster HDFS, un archivo se divide en uno o más bloques del mismo tamaño, excepto por la posibilidad de que el último bloque sea más pequeño. Cada bloque se almacena en varios DataNodes y cada uno puede replicarse en varios DataNodes para garantizar la disponibilidad. De forma predeterminada, cada bloque se replica tres veces, un proceso denominado "replicación a nivel de bloque". [29]
El NameNode administra las operaciones del espacio de nombres del sistema de archivos, como abrir, cerrar y cambiar el nombre de archivos y directorios, y regula el acceso a los archivos. También determina la asignación de bloques a los DataNodes. Los DataNodes son responsables de atender las solicitudes de lectura y escritura de los clientes del sistema de archivos, administrar la asignación o eliminación de bloques y replicar bloques. [30]
Cuando un cliente desea leer o escribir datos, se pone en contacto con el NameNode y este verifica desde dónde se deben leer o escribir los datos. Después de eso, el cliente conoce la ubicación del DataNode y puede enviarle solicitudes de lectura o escritura.
El HDFS se caracteriza por su compatibilidad con esquemas de reequilibrio de datos. En general, la gestión del espacio libre en un DataNode es muy importante. Los datos deben trasladarse de un DataNode a otro si el espacio libre no es suficiente; y en el caso de crear réplicas adicionales, los datos deben trasladarse para asegurar el equilibrio del sistema. [29]
Los sistemas de archivos distribuidos se pueden optimizar para diferentes propósitos. Algunos, como los diseñados para servicios de Internet, incluido GFS, están optimizados para la escalabilidad. Otros diseños para sistemas de archivos distribuidos admiten aplicaciones de alto rendimiento que generalmente se ejecutan en paralelo. [31] Algunos ejemplos incluyen: MapR File System (MapR-FS), Ceph-FS , Fraunhofer File System (BeeGFS) , Lustre File System , IBM General Parallel File System (GPFS) y Parallel Virtual File System .
MapR-FS es un sistema de archivos distribuido que es la base de la Plataforma Convergente MapR, con capacidades para el almacenamiento distribuido de archivos, una base de datos NoSQL con múltiples API y un sistema de transmisión de mensajes integrado. MapR-FS está optimizado para la escalabilidad, el rendimiento, la confiabilidad y la disponibilidad. Su capacidad de almacenamiento de archivos es compatible con la API del Sistema de Archivos Distribuidos Apache Hadoop (HDFS) pero con varias características de diseño que lo distinguen de HDFS. Entre las diferencias más notables se encuentra que MapR-FS es un sistema de archivos totalmente de lectura/escritura con metadatos para archivos y directorios distribuidos en el espacio de nombres, por lo que no hay NameNode. [32] [33] [34] [35] [36]
Ceph-FS es un sistema de archivos distribuido que ofrece un excelente rendimiento y confiabilidad. [37] Responde a los desafíos de manejar archivos y directorios enormes, coordinar la actividad de miles de discos, brindar acceso paralelo a metadatos a gran escala, manipular cargas de trabajo científicas y de propósito general, autenticar y cifrar a gran escala y aumentar o disminuir dinámicamente debido al desmantelamiento frecuente de dispositivos, fallas de dispositivos y expansiones de clústeres. [38]
BeeGFS es el sistema de archivos paralelos de alto rendimiento del Centro de Competencia Fraunhofer para Computación de Alto Rendimiento. La arquitectura de metadatos distribuidos de BeeGFS ha sido diseñada para proporcionar la escalabilidad y flexibilidad necesarias para ejecutar HPC y aplicaciones similares con altas demandas de E/S. [39]
Lustre File System se diseñó e implementó para solucionar el problema de los cuellos de botella que se encuentran tradicionalmente en los sistemas distribuidos. Lustre se caracteriza por su eficiencia, escalabilidad y redundancia. [40] GPFS también se diseñó con el objetivo de eliminar dichos cuellos de botella. [41]
El alto rendimiento de los sistemas de archivos distribuidos requiere una comunicación eficiente entre los nodos informáticos y un acceso rápido a los sistemas de almacenamiento. Las operaciones como abrir, cerrar, leer, escribir, enviar y recibir deben ser rápidas para garantizar ese rendimiento. Por ejemplo, cada solicitud de lectura o escritura accede al almacenamiento en disco, lo que introduce latencias de búsqueda, rotación y red. [42]
Las operaciones de comunicación de datos (envío/recepción) transfieren datos desde el búfer de la aplicación al núcleo de la máquina, y TCP controla el proceso y se implementa en el núcleo. Sin embargo, en caso de congestión o errores de la red, TCP puede no enviar los datos directamente. Mientras transfiere datos desde un búfer en el núcleo a la aplicación, la máquina no lee el flujo de bytes de la máquina remota. De hecho, TCP es responsable de almacenar en búfer los datos para la aplicación. [43]
La elección del tamaño del búfer para la lectura y escritura de archivos o para el envío y recepción de archivos se realiza a nivel de aplicación. El búfer se mantiene mediante una lista enlazada circular . [44] Consiste en un conjunto de BufferNodes. Cada BufferNode tiene un DataField. El DataField contiene los datos y un puntero llamado NextBufferNode que apunta al siguiente BufferNode. Para encontrar la posición actual, se utilizan dos punteros : CurrentBufferNode y EndBufferNode, que representan la posición en el BufferNode para las últimas posiciones de escritura y lectura. Si el BufferNode no tiene espacio libre, enviará una señal de espera al cliente para que espere hasta que haya espacio disponible. [45]
Cada vez más usuarios tienen varios dispositivos con conectividad ad hoc. Los conjuntos de datos replicados en estos dispositivos deben sincronizarse entre una cantidad arbitraria de servidores. Esto es útil para realizar copias de seguridad y también para el funcionamiento sin conexión. De hecho, cuando las condiciones de la red del usuario no son buenas, el dispositivo del usuario replicará selectivamente una parte de los datos que se modificará más tarde y sin conexión. Una vez que las condiciones de la red se vuelven buenas, el dispositivo se sincroniza. [46] Existen dos enfoques para abordar el problema de la sincronización distribuida: la sincronización entre pares controlada por el usuario y la sincronización maestro-réplica en la nube. [46]
En la computación en la nube, los conceptos de seguridad más importantes son la confidencialidad, la integridad y la disponibilidad (" CIA "). La confidencialidad se vuelve indispensable para evitar que se divulguen datos privados. La integridad garantiza que los datos no se corrompan. [47]
La confidencialidad significa que los datos y las tareas de computación son confidenciales: ni el proveedor de la nube ni otros clientes pueden acceder a los datos del cliente. Se han realizado muchas investigaciones sobre la confidencialidad, porque es uno de los puntos cruciales que aún presenta desafíos para la computación en la nube. La falta de confianza en los proveedores de la nube también es un problema relacionado. [48] La infraestructura de la nube debe garantizar que los datos de los clientes no sean accedidos por terceros no autorizados.
El entorno se vuelve inseguro si el proveedor de servicios puede hacer todo lo siguiente: [49]
La ubicación geográfica de los datos ayuda a determinar la privacidad y confidencialidad. Se debe tener en cuenta la ubicación de los clientes. Por ejemplo, los clientes en Europa no estarán interesados en utilizar centros de datos ubicados en Estados Unidos, porque eso afecta la garantía de confidencialidad de los datos. Para abordar ese problema, algunos proveedores de computación en la nube han incluido la ubicación geográfica del host como un parámetro del acuerdo de nivel de servicio realizado con el cliente, [50] lo que permite a los usuarios elegir por sí mismos las ubicaciones de los servidores que alojarán sus datos.
Otro enfoque para la confidencialidad implica el cifrado de datos. [51] De lo contrario, habrá un riesgo grave de uso no autorizado. Existe una variedad de soluciones, como cifrar solo datos confidenciales, [52] y admitir solo algunas operaciones, con el fin de simplificar el cálculo. [53] Además, se utilizan técnicas y herramientas criptográficas como FHE para preservar la privacidad en la nube. [47]
La integridad en la computación en la nube implica la integridad de los datos y la integridad de la computación. Dicha integridad significa que los datos deben almacenarse correctamente en los servidores en la nube y que, en caso de fallas o computación incorrecta, deben detectarse los problemas.
La integridad de los datos puede verse afectada por eventos maliciosos o por errores administrativos (por ejemplo, durante la copia de seguridad y la restauración, la migración de datos o el cambio de membresías en sistemas P2P ). [54]
La integridad es fácil de lograr utilizando criptografía (normalmente a través de códigos de autenticación de mensajes , o MAC, en bloques de datos). [55]
Existen mecanismos de control que afectan la integridad de los datos. Por ejemplo:
La disponibilidad se logra generalmente mediante replicación . [61] [62] [63] [64] Mientras tanto, se debe garantizar la consistencia. Sin embargo, la consistencia y la disponibilidad no se pueden lograr al mismo tiempo; cada una se prioriza con cierto sacrificio de la otra. Se debe lograr un equilibrio. [65]
Los datos deben tener una identidad para ser accesibles. Por ejemplo, Skute [61] es un mecanismo basado en el almacenamiento de clave/valor que permite la asignación dinámica de datos de una manera eficiente. Cada servidor debe estar identificado por una etiqueta en el formato continente-país-centro de datos-sala-rack-servidor. El servidor puede hacer referencia a múltiples nodos virtuales, y cada nodo tiene una selección de datos (o múltiples particiones de múltiples datos). Cada pieza de datos se identifica por un espacio de clave que se genera mediante una función hash criptográfica unidireccional (por ejemplo, MD5 ) y se localiza por el valor de la función hash de esta clave. El espacio de clave se puede dividir en múltiples particiones y cada partición hace referencia a una pieza de datos. Para realizar la replicación, los nodos virtuales deben ser replicados y referenciados por otros servidores. Para maximizar la durabilidad y la disponibilidad de los datos, las réplicas deben ubicarse en diferentes servidores y cada servidor debe estar en una ubicación geográfica diferente, porque la disponibilidad de los datos aumenta con la diversidad geográfica. El proceso de replicación incluye una evaluación de la disponibilidad de espacio, que debe estar por encima de un cierto umbral mínimo en cada servidor de fragmentos. De lo contrario, los datos se replican en otro servidor de fragmentos. Cada partición, i, tiene un valor de disponibilidad representado por la siguiente fórmula:
¿Dónde están los servidores que alojan las réplicas, y la confianza de los servidores y (dependiendo de factores técnicos como los componentes de hardware y no técnicos como la situación económica y política de un país) y la diversidad es la distancia geográfica entre y . [66]
La replicación es una gran solución para garantizar la disponibilidad de los datos, pero cuesta demasiado en términos de espacio de memoria. [67] DiskReduce [67] es una versión modificada de HDFS que se basa en la tecnología RAID (RAID-5 y RAID-6) y permite la codificación asincrónica de los datos replicados. De hecho, existe un proceso en segundo plano que busca datos ampliamente replicados y elimina las copias adicionales después de codificarlos. Otro enfoque es reemplazar la replicación con la codificación de borrado. [68] Además, para garantizar la disponibilidad de los datos, existen muchos enfoques que permiten la recuperación de datos. De hecho, los datos deben codificarse y, si se pierden, se pueden recuperar a partir de fragmentos que se construyeron durante la fase de codificación. [69] Algunos otros enfoques que aplican diferentes mecanismos para garantizar la disponibilidad son: el código Reed-Solomon de Microsoft Azure y RaidNode para HDFS. Además, Google sigue trabajando en un nuevo enfoque basado en un mecanismo de codificación de borrado. [70]
No existe implementación RAID para el almacenamiento en la nube. [68]
La economía de la computación en la nube está creciendo rápidamente. El gobierno de Estados Unidos ha decidido destinar el 40% de su tasa de crecimiento anual compuesta (CAGR), que se espera que alcance los 7 mil millones de dólares en 2015. [71]
Cada vez más empresas utilizan la computación en la nube para gestionar la enorme cantidad de datos y superar la falta de capacidad de almacenamiento, y porque les permite utilizar dichos recursos como un servicio, garantizando que sus necesidades informáticas se cubrirán sin tener que invertir en infraestructura (modelo de pago por uso). [72]
Cada proveedor de aplicaciones debe pagar periódicamente el costo de cada servidor donde se almacenan réplicas de datos. El costo de un servidor está determinado por la calidad del hardware, las capacidades de almacenamiento y su carga de trabajo de procesamiento de consultas y comunicación. [73] La computación en la nube permite a los proveedores escalar sus servicios según las demandas de los clientes.
El modelo de pago por uso también ha aliviado la carga de las empresas emergentes que desean beneficiarse de negocios con uso intensivo de recursos informáticos. La computación en la nube también ofrece una oportunidad a muchos países del tercer mundo que de otro modo no tendrían esos recursos informáticos. La computación en la nube puede reducir las barreras de TI a la innovación. [74]
A pesar del amplio uso de la computación en la nube, compartir eficientemente grandes volúmenes de datos en una nube no confiable sigue siendo un desafío.