ES2528245T3 - Almacenamiento distribuido de datos recuperables - Google Patents

Almacenamiento distribuido de datos recuperables Download PDF

Info

Publication number
ES2528245T3
ES2528245T3 ES10739071.8T ES10739071T ES2528245T3 ES 2528245 T3 ES2528245 T3 ES 2528245T3 ES 10739071 T ES10739071 T ES 10739071T ES 2528245 T3 ES2528245 T3 ES 2528245T3
Authority
ES
Spain
Prior art keywords
portions
storage
node
nodes
generated
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES10739071.8T
Other languages
English (en)
Inventor
Cohen Bram
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
BitTorrent Inc
Original Assignee
BitTorrent Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BitTorrent Inc filed Critical BitTorrent Inc
Application granted granted Critical
Publication of ES2528245T3 publication Critical patent/ES2528245T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1658Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit
    • G06F11/1662Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit the resynchronized component or unit being a persistent storage device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2053Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where persistent mass storage functionality or persistent mass storage control functionality is redundant
    • G06F11/2094Redundant storage or storage space

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Human Computer Interaction (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Método para sustituir un nodo fallido que almacena datos distribuidos, que comprende: recibir (402) una indicación de un nodo de almacenamiento nuevo, recibiéndose la indicación en cada uno de una pluralidad de nodos de almacenamiento (106), en donde dicho cada uno de la pluralidad de nodos de almacenamiento (106) contiene una pluralidad de porciones generadas a partir de un archivo de datos, generándose cada una de la pluralidad de porciones mediante la multiplicación de fragmentos del archivo de datos por coeficientes aleatorios y mediante la suma de los fragmentos multiplicados: generar (404) una porción sustitutoria en cada uno de la pluralidad de nodos de almacenamiento (106) como respuesta a la indicación, en donde la porción sustitutoria generada en uno de la pluralidad de nodos de almacenamiento incluye una combinación de la pluralidad de porciones contenidas en el nodo de almacenamiento; y enviar (406) las porciones sustitutorias generadas desde la pluralidad de nodos de almacenamiento (106) al nodo de almacenamiento nuevo indicado.

Description

5
10
15
20
25
30
35
40
45
50
55
E10739071
19-01-2015
DESCRIPCIÓN
Almacenamiento distribuido de datos recuperables
Remisión a solicitudes relacionadas
La presente solicitud reivindica el beneficio de la solicitud provisional U.S. 61/149.676, presentada el 3 de febrero de 2009.
Antecedentes
Sector técnico
La presente invención se refiere en general al almacenamiento distribuido de datos sobre varios nodos en una red.
Descripción de la técnica relacionada
Un problema fundamental del almacenamiento es cómo almacenar datos de manera redundante, de modo que incluso si falla un elemento de almacenamiento particular, los datos se puedan recuperar a partir de otras fuentes. Una de las estrategias consiste simplemente en almacenar múltiples copias de todo. Aunque esto funciona, exige considerablemente un mayor almacenamiento para un nivel particular de fiabilidad (o, por contraposición lógica, proporciona una fiabilidad considerablemente menor para una cantidad particular de almacenamiento).
Para lograr una fiabilidad mejor, se pueden usar códigos de borrado (erasure codes). Un código de borrado toma un elemento de datos original y genera a partir de él lo que se denomina “porciones”. Las porciones se diseñan de manera que siempre que haya porciones suficientes tal que su tamaño combinado sea igual al tamaño de los datos originales, los datos originales se pueden reconstruir a partir de ellas. En el esquema al que se hace referencia como codificación de borrado de k-de-n, se generan n porciones y se pueden usar k cualesquiera de ellas para reconstruir los datos originales. El tamaño de cada porción es 1/k veces el tamaño de los datos originales de manera que las porciones contienen suficiente información para la reconstrucción. La n puede variar notablemente. El almacenamiento de más porciones dará como resultado una mayor fiabilidad, aunque el número de porciones puede variar desde k hasta esencialmente infinito. El esquema trivial de simplemente almacenar múltiples copias de los datos originales se puede considerar como un esquema de 1-de-n para n copias, y el esquema de muy baja fiabilidad, aunque también sencillo, en el que los datos originales se trocean en fragmentos y los mismos se almacenan todos por separado se puede considerar como un esquema de k-de-k para k fragmentos.
La técnica de codificación de borrado (erasure coding) en primer lugar descompone los datos originales en k fragmentos, a continuación trata dichos fragmentos como vectores en un campo de Galois (GF) y genera porciones multiplicando los fragmentos por coeficientes aleatorios y sumándolos entre sí. La codificación de borrado también se puede llevar a cabo tratando los fragmentos como vectores módulo un número primo. Para simplificar, la codificación de borrado que se describe más abajo usa campos de Galois. Una porción comprende entonces el resultado de ese cálculo junto con los coeficientes aleatorios. La aleatoriedad de los coeficientes provoca que exista una probabilidad de que los datos originales sean no recuperables, esencialmente igual al inverso del número de elementos del campo de Galois que se esté usando. Por motivos de almacenamiento, un campo de Galois de tamaño 232 ó 264 (correspondiente al tratamiento de secciones de 4 y 8 bytes respectivamente como unidades individuales) constituye un compromiso razonable entre la carga de cálculo y la probabilidad de que por causalidad los datos sean no recuperables, siendo esto extremadamente improbable con 232 y esencialmente imposible con 264.
La técnica anterior se enfrenta a limitaciones cuando se usa para un almacenamiento distribuido a través de Internet. Para el almacenamiento en Internet, el recurso escaso es el ancho de banda, y la capacidad de almacenamiento de los nodos extremos es esencialmente infinita (o por lo menos suficientemente económica como para no constituir un factor limitativo), lo cual da como resultado una situación en la que el factor limitativo sobre cualquier almacenamiento es la cantidad de ancho de banda para enviarlo. Para el almacenamiento inicial, esto da como resultado un modelo muy similar a aquel en el que el factor limitativo es la capacidad de almacenamiento; existe una sustitución unívoca de almacenamiento por ancho de banda. Sin embargo, después del almacenamiento inicial, se pueden consumir recursos significativos de ancho de banda para sustituir soportes de almacenamiento fallidos (y todos los soportes de almacenamiento acaban fallando). Normalmente, cuando el almacenamiento redundante se está llevando a cabo de manera local, por ejemplo, en una red de área local, se lleva a cabo una recuperación completa de los datos originales correspondientes a las porciones contenidas por los soportes fallidos y la misma se almacena de manera temporal, a continuación se crean porciones nuevas y las mismas se almacenan en otro elemento de soporte, y seguidamente la copia completa temporal es eliminada. Hacer lo mismo por Internet requeriría la recuperación de k porciones de los diversos soportes de almacenamiento restantes, la reconstrucción de los datos originales, la generación de k porciones nuevas, y el envío de las porciones a los soportes de almacenamiento (incluyendo los soportes de almacenamiento sustitutorios). Esto requiere 2k veces el tamaño de la porción que se está usando en ancho de banda a través de internet, lo cual se convierte rápidamente en inaceptable a medida que k crece.
El simple almacenamiento de múltiples copias de los datos es una mejor solución para evitar el uso de ancho de 2
10
15
20
25
30
35
40
45
50
E10739071
19-01-2015
banda, aunque presenta unas propiedades de fiabilidad mucho peores y representa un despilfarro por sí mismo de la escala de n. ya que cuantas más copias de algo es necesario guardar, más ancho de banda se usa cuando dichas copias se deterioran.
El documento US2007079082 propone un sistema de almacenamiento digital de archivos de datos en el cual archivos de datos originales a almacenar se dispersan usando alguna forma de algoritmo de dispersión de información en una serie de “fracciones” o subconjuntos de archivos, de tal manera que los datos de cada porción de archivo son menos utilizables o menos reconocibles o totalmente inútiles o totalmente irreconocibles por sí mismos excepto cuando se combinan con parte o la totalidad de las otras porciones del archivo.
El documento US2007177739 propone una técnica de duplicación de datos para proporcionar una duplicación, con codificación de borrado, de grandes conjuntos de datos sobre un conjunto de réplicas distribuidas geográficamente. La técnica utiliza un árbol de multidifusión para almacenar, reenviar, y codificar por borrado el conjunto de datos. La codificación por borrado de datos se puede llevar a cabo en varias posiciones dentro del árbol de multidifusión, incluyendo el origen, nodos intermedios, y nodos de destino. En una realización, el sistema comprende un nodo de origen para almacenar el conjunto de datos originales, una pluralidad de nodos intermedios, y una pluralidad de nodos hoja para almacenar los fragmentos de réplica únicos. Los nodos están configurados como un árbol de multidifusión para convertir los datos originales en los fragmentos de réplica únicos llevando a cabo una codificación de borrado distribuida en una pluralidad de niveles del árbol de multidifusión.
El documento US2005216813 propone un esquema de protección de archivos para contenido fijo en un archivo de datos distribuidos usando cálculos que aprovechan operadores de permutación de un código cíclico. En una realización ilustrativa, se describe una técnica de codificación de N+K para su uso con el fin de proteger datos que se están distribuyendo en una matriz redundante de nodos independientes (RAIN). Los propios datos pueden ser de cualquier tipo, y también pueden incluir metadatos del sistema.
Sumario
Según un primer aspecto de la presente invención, se proporciona un método tal como se expone en la reivindicación independiente 1 adjunta. De acuerdo con un segundo aspecto de la presente invención, se proporciona un sistema tal como se expone en la reivindicación independiente 7 adjunta.
Breve descripción de los dibujos
La FIG. 1 ilustra un entorno que incluye nodos de almacenamiento para el almacenamiento distribuido de datos, en una realización.
La FIG. 2 es un diagrama de flujo que ilustra un método para el almacenamiento distribuido de datos, en una realización.
La FIG. 3 es un diagrama de flujo que ilustra un método para dividir un archivo de datos en porciones y enviar porciones a nodos de almacenamiento, en una realización.
La FIG. 4 es un diagrama de flujo que ilustra un método de generación de porciones para un nodo de almacenamiento sustitutorio, en una realización.
La FIG. 5 es un diagrama esquemático que ilustra la generación de porciones sustitutorias para un nodo sustitutorio de entre nodos disponibles restantes, en una realización.
Las figuras representan realizaciones preferidas de la presente invención únicamente con fines ilustrativos. Los versados en la técnica reconocerán fácilmente, a partir de la siguiente descripción, que se pueden utilizar realizaciones alternativas de las estructuras y métodos ilustrados en la presente sin desviarse con respecto a los fundamentos de la invención aquí descritos.
Descripción detallada de las realizaciones preferidas
La FIG. 1 ilustra un entorno 100 que incluye nodos de almacenamiento 106 para el almacenamiento distribuido de datos, en una realización. El módulo de carga 102 contiene inicialmente un archivo de datos a almacenar en los nodos de almacenamiento. Un operador del módulo de carga puede desear almacenar el archivo en los nodos de almacenamiento por varios motivos, tales como una copia de seguridad del archivo o compartir el archivo con otros. El módulo de carga divide los archivos en porciones, que se describen de forma adicional posteriormente, y envía las porciones a los diversos nodos de almacenamiento a través de la red 104. Los nodos de almacenamiento 106 reciben las porciones y las almacenan. El módulo de descarga 110 recupera las porciones de los diversos nodos de almacenamiento y reconstruye el archivo de datos. En una realización, el módulo de descarga 110 es el mismo que el módulo de carga 102. El módulo de seguimiento 108 puede realizar un seguimiento de aspectos del sistema de almacenamiento, tales como la disponibilidad o indisponibilidad de los diversos nodos de almacenamiento y las posiciones de diversas porciones. Los nodos de almacenamiento 106 y el módulo de carga 102 y módulo de descarga pueden recibir información del módulo de seguimiento para enviar, recibir, o crear porciones.
3 15
25
35
45
55
E10739071
19-01-2015
Cualquiera de los nodos de almacenamiento 106 se puede convertir en indisponible en cualquier momento. Por ejemplo, se pueden perder los datos almacenados en un nodo de almacenamiento o se puede perder la conectividad de red del nodo. Las porciones enviadas por el módulo de carga 102 se distribuyen en los nodos de almacenamiento 106 de tal manera que uno o más de los nodos de almacenamiento 106 pueden fallar aunque el archivo de datos sigue siendo totalmente recuperable. Existe cierta redundancia entre porciones en nodos de almacenamiento diferentes. Cuando un nodo de almacenamiento 106 particular se convierte en indisponible, se puede activar un nodo de almacenamiento sustitutorio, y los nodos de almacenamiento 106 restantes generan porciones sustitutorias y envían estas porciones directamente al nodo de almacenamiento sustitutorio para almacenarlas allí. Estas porciones sustitutorias (a las que se hace referencia también como “nuevas”) se pueden construir recombinando porciones existentes en los nodos restantes. No es necesario que las porciones se envíen a una única posición (por ejemplo, el módulo de carga), se reconstruyan en el archivo original, y a continuación se vuelvan a dividir en porciones nuevas que se envían a los nodos actuales. Como consecuencia, el consumo de ancho de banda a través de la red 104 se reduce cuando se almacenan porciones en un nodo sustitutorio después de que un nodo se haya vuelto indisponible.
El módulo de carga 102, el módulo de descarga 110, el módulo de seguimiento 108, y los nodos de almacenamiento 106 pueden ser ordenadores que comprenden una CPU, memoria, un disco duro u otro dispositivo de almacenamiento, una interfaz de red, interfaces periféricas, y otros componentes bien conocidos. Los nodos de almacenamiento 106 pueden incluir grandes cantidades de espacio de almacenamiento disponible. En una realización, los nodos de almacenamiento pueden ser dispositivos de almacenamiento incorporados a la red. Aunque en la FIG. 1 se muestran solamente tres nodos de almacenamiento, puede haber muchos más. Adicionalmente, también puede haber múltiples módulos de carga 102 y módulos de descarga 110 que acceden a los nodos de almacenamiento. También puede haber múltiples módulos de seguimiento 108 (por ejemplo, puede haber módulos de seguimiento de reserva en caso de fallo del módulo de seguimiento principal).
El módulo de carga 102, el módulo de descarga 110, el módulo de seguimiento 108, y los nodos de almacenamiento 106 se comunican a través de una red 104. La red puede comprender Internet, una red de área local, redes inalámbricas, u otros tipos diversos de redes. En una realización, los nodos de almacenamiento pueden ser distantes geográficamente con respecto al módulo de carga y al módulo de descarga, y la transferencia de grandes cantidades de datos entre el módulo de carga, el módulo de descarga, y los nodos de almacenamiento a través de la red puede resultar cara. Como consecuencia, en algunas realizaciones puede resultar importante minimizar dichas transferencias de datos durante operaciones tales como la provisión de porciones a un nodo sustitutorio.
En una realización, el módulo de seguimiento 108 funciona como un sistema centralizado de mando y control explotado por un proveedor de servicios para coordinar la transferencia de datos entre módulos de carga, módulos de descarga, y nodos de almacenamiento. Puesto que a través del módulo de seguimiento no se realiza directamente ninguna transferencia de datos en bloque, sus recursos de ancho de banda y de cálculo pueden ser bajos, y se puede hacer que el mismo sea fiable usando técnicas de recuperación tras fallo (failover) más tradicionales. El módulo de seguimiento es responsable de mantener el seguimiento de las posiciones de porciones y nodos de almacenamiento, y de mantener el seguimiento de qué operaciones han resultado satisfactorias y cuáles han fallado. Las transferencias de datos de porciones se efectúan directamente (por ejemplo, desde el módulo de carga al nodo de almacenamiento o desde el nodo de almacenamiento al nodo de almacenamiento), de manera que el módulo de seguimiento proporciona la coordinación.
La FIG. 2 es un diagrama de flujo que ilustra un método para el almacenamiento distribuido de datos, en una realización. Inicialmente, en el módulo de carga 102 hay presente un archivo de datos a almacenar. El módulo de carga divide 202 los archivos en porciones que contienen cierto grado de redundancia. A continuación, estas porciones se envían 204 a varios nodos de almacenamiento 106 y se distribuyen de tal manera que las porciones de uno o más nodos se pueden perder aunque el archivo de datos originales todavía se puede recuperar a partir de las porciones de los nodos restantes. En algún momento, uno de los nodos de almacenamiento falla y las porciones almacenadas en ese nodo se pierden. Para mantener el mismo nivel de fiabilidad de almacenamiento, un nodo de almacenamiento 106 nuevo se designa como nodo sustitutorio. Las porciones sustitutorias a almacenar en el nodo sustitutorio se generan 206 en varios de los nodos existentes, y estas porciones se envían al nodo sustitutorio para su almacenamiento en este último. La etapa 206 puede producirse múltiples veces en la medida en la que múltiples nodos fallan y son sustituidos. En algún momento, un módulo de descarga 110 puede estar interesado en recuperar el archivo de datos. El módulo de descarga recupera 208 porciones de los nodos de almacenamiento actuales y reconstruye 210 el archivo de datos originales. Posteriormente se describen de forma más detallada realizaciones de las etapas de la FIG. 2.
La FIG. 3 es un diagrama de flujo que ilustra un método para dividir un archivo de datos en porciones y enviar porciones a nodos de almacenamiento, en una realización. Inicialmente, un módulo de carga 102 recibe 302 el número de nodos de almacenamiento 106 disponibles desde el módulo de seguimiento o un administrador del sistema u otra fuente. En la descripción posterior, el número inicial de nodos disponibles se representa con N. Se recibe también 304 un parámetro de fiabilidad, x. El parámetro de fiabilidad x representa el número de nodos de almacenamiento que contienen porciones de un archivo de datos que es necesario que estén disponibles para que el archivo de datos sea recuperable. x se selecciona en general de manera que sea menor que N de modo que el
4 10
15
20
25
30
35
40
45
50
55
60
E10739071
19-01-2015
archivo pueda seguir recuperándose en caso de que uno o más nodos se haga indisponible. En la descripción posterior, se supone que x es impar, aunque se pueden construir realizaciones para valores pares de x con modificaciones pequeñas. El parámetro de fiabilidad se puede recibir desde el módulo de seguimiento o un operador del módulo de carga u otra fuente. El mismo se puede ajustar de acuerdo con la política del sistema.
Se crean porciones a partir del archivo de datos usando un esquema de codificación de borrado de k-de-n descrito anteriormente en la sección de Antecedentes, donde en una realización k = x*(x+1)/2. En una realización, k es una función cuadrática de x. Cada porción tiene un tamaño de 1/k del archivo de datos. Se crea un total de n porciones, donde n = xN, y se envían x porciones a cada nodo de almacenamiento. En una realización, el archivo de datos se divide 306 en k fragmentos secuenciales que se procesan para generar 308 n porciones usando la codificación de borrado. Por ejemplo, en la etapa 306, un archivo de 10 millones de bytes se puede dividir en fragmentos secuenciales de 4.000 bytes cada uno. El procesado de la etapa 308 incluye multiplicar los fragmentos por coeficientes aleatorios y sumar los fragmentos (escalados) entre sí en varias combinaciones. Por ejemplo, cada fragmento de 4.000 bytes se puede multiplicar por un coeficiente aleatorio de 4 bytes multiplicando cada segmento de 4 bytes del fragmento por el coeficiente aleatorio (módulo 232) con el fin de generar fragmentos escalados. A continuación, estos fragmentos escalados se pueden sumar entre sí, dando como resultado una porción que es una combinación lineal de los fragmentos.
En una realización, los coeficientes aleatorios usados para generar una porción particular se incorporan al final de la porción. Con las porciones como vectores en un campo de Galois de tamaño 232, esto implica anexar un valor de 32 bits (cuatro bytes) al final de la porción para cada coeficiente. Estos coeficientes anexados posteriormente se pueden procesar de manera similar al resto de la porción simplificando la implementación de procesado de porciones. Por ejemplo, cuando la porción se multiplica por un valor particular o se suma a otra porción, el coeficiente aleatorio se puede multiplicar de manera similar por el valor y se puede sumar al coeficiente correspondiente en la otra porción. En una realización, el archivo de divide en unidades de tamaño razonable y a continuación se divide nuevamente en fragmentos más pequeños.
A continuación, las porciones se envían 310 a los nodos de almacenamiento 106 y se almacenan en los nodos. Específicamente, se envían x porciones a cada uno de los N nodos de almacenamiento usando la técnica de k-de-n antes descrita. Las porciones se distribuyen en los nodos de manera que el fallo de cualesquiera N-x nodos dejará información suficiente en las porciones restantes de los nodos disponibles restantes para reconstruir el archivo de datos. Las porciones proporcionan a los N nodos de almacenamiento una cierta cantidad de redundancia para aguantar una cierta cantidad de fallos de nodos, y proporcionan a cada uno de los nodos información referente a todos los fragmentos del archivo. Una optimización para la distribución inicial de porciones es que cada una de las porciones de un único nodo de almacenamiento se genere a partir de un conjunto diferente de (x+1)/2 fragmentos del archivo de datos. Esto proporciona al nodo de almacenamiento información referente a todos los fragmentos del archivo aunque disminuyendo la cantidad de cálculo requerida para generar las porciones. En una realización, los fragmentos iniciales del archivo de datos se dividen en cubos, y cada porción (para la distribución inicial) se crea combinando un fragmento de cada uno de los cubos.
El módulo de seguimiento 108 se puede actualizar 312 para tener conocimiento del estado actual de las porciones y los nodos de almacenamiento. El módulo de carga 102 puede proporcionar al módulo de seguimiento información que identifica cada porción generada y que identifica al nodo de almacenamiento 106 en el cual se almacenó la porción. La información de identificación de una porción puede incluir información referente a qué fragmento secuencial del archivo de datos se corresponde la fracción. El módulo de seguimiento también se puede actualizar con el estado de cada nodo de almacenamiento como disponible y que contiene porciones particulares relacionadas con el archivo de datos. El módulo de seguimiento también puede actualizar un estado global del archivo de datos como en un estado “almacenado”.
No se puede hacer que el almacenamiento inicial de datos en nodos de almacenamiento por el módulo de carga 102 sea fiable en el sentido técnico de presentar recuperación tras fallo (failover), puesto que el propio módulo de carga es un punto único de fallo. En una realización, cuando el módulo de carga solicita que se almacene un archivo de datos, el módulo de seguimiento 108 puede considerar que el archivo de datos está en el estado de “carga”, desde el cual puede cambiar al estado “fallido” si parece que el módulo de carga ha fallado. Si suficientes nodos de almacenamiento reciben las porciones requeridas, entonces el estado del archivo de datos se actualiza en el módulo de seguimiento al estado “almacenado”. El estado “almacenado” también puede tener dos sub-estados consultivos de “disponible” e “indisponible” en función de si el número de nodos de almacenamiento que tienen en ese momento porciones es por lo menos x. Inicialmente al producirse una carga satisfactoria, el sub-estado es “disponible” pero puede cambiar a medida que fallen los nodos según se describe posteriormente.
La FIG. 4 es un diagrama de flujo que ilustra un método de generación de porciones para un nodo de almacenamiento 106 sustitutorio, en una realización. Tal como se ha mencionado anteriormente, un nodo de almacenamiento puede fallar por varios motivos en cualquier momento. Dichos motivos pueden incluir, por ejemplo, fallo del equipo, fallo de conectividad de la red, y fallo de alimentación. Los nodos de almacenamiento también pueden ser desconectados intencionadamente, con o sin notificación de antemano. A un nodo que ha fallado o que ha sido desconectado se le hace referencia también como nodo indisponible. Cuando un nodo ha fallado, normalmente resulta útil establecer rápidamente un nodo sustitutorio de manera que se mantenga el mismo nivel de 5 10
15
20
25
30
35
40
45
50
55
60
E10739071
19-01-2015
fiabilidad en el sistema de nodos de almacenamiento. Si ha fallado un número menor que N-x nodos, entonces los nodos restantes todavía contienen información suficiente para recuperar el archivo de datos, y se pueden conectar nodos sustitutorios para mantener la fiabilidad del sistema.
Se recibe 402 una indicación de un nodo fallido y un nodo sustitutorio. Puede haber también múltiples nodos fallidos y nodos sustitutorios, aunque aquí, por claridad, se describe el caso de un único nodo. Esta indicación se puede recibir en el módulo de seguimiento 108. En una realización, el módulo de seguimiento comprueba periódicamente el estado de los nodos (o recibe actualizaciones de estado de los nodos) con el fin de identificar nodos fallidos. El módulo de seguimiento puede identificar un nodo sustitutorio particular de entre un grupo de nodos libres o puede recibir una indicación de un nodo sustitutorio proveniente de alguna otra fuente, tal como un administrador del sistema. La indicación de un nodo fallido o sustitutorio puede comprender una dirección de red u otro identificador del nodo.
A continuación, el módulo de seguimiento 108 emite una notificación para cualesquiera x de los nodos disponibles restantes sobre el nodo sustitutorio. En una realización, estos nodos pueden recibir una notificación directamente. En una realización, el módulo de seguimiento notifica al nodo sustitutorio sobre los nodos disponibles y el nodo sustitutorio inicia transferencias desde los nodos disponibles. A continuación, estos x nodos disponibles, a los que se hace referencia también como nodos de carga, generan 404, cada uno de ellos, una porción sustitutoria y envían 406 esta porción sustitutoria al nodo sustitutorio. Cada nodo de carga genera una porción sustitutoria multiplicando cada una de sus porciones (incluyendo los coeficientes de las porciones) por un valor de escala aleatorio y a continuación sumándolas entre sí. Por ejemplo, si la porción tiene una longitud de 400 bytes y el valor de escala aleatorio es un número de 4 bytes, la porción se divide en 100 secciones de 4 bytes y cada sección se multiplica por el valor de escala aleatorio (módulo 232). Los datos de archivo originales contenidos en las porciones siguen siendo recuperables ya que los coeficientes de las porciones se han visto afectados por los valores de escala aleatorios de la misma manera en la que lo han sido los datos de las porciones. Como consecuencia, la porción sustitutoria generada por cada nodo representa una combinación de los datos contenidos en ese momento por las porciones de ese nodo.
La FIG. 5 es un diagrama esquemático que ilustra la generación de porciones sustitutorias para un nodo sustitutorio de entre nodos disponibles restantes, en una realización. En el ejemplo mostrado en la FIG. 5, el número inicial de nodos, N, es 5, y el parámetro de fiabilidad x es 3, de manera que pueden fallar hasta dos nodos sin pérdida de datos y irrecuperable. Cada nodo contiene x porciones (en este ejemplo tres porciones). El nodo N2 ha fallado, lo cual da como resultado cuatro nodos disponibles restantes. N6 se ha identificado como nodo sustitutorio (o nuevo) para devolver el número de nodos a cinco. El módulo de seguimiento ha seleccionado los nodos disponibles N1, N4, y N5 para generar porciones sustitutorias para N6. Cada uno de los tres nodos seleccionados combina sus tres porciones para generar una única porción sustitutoria para N6. Estas porciones sustitutorias se envían directamente desde los nodos disponibles a N6 y se almacenan en N6.
El módulo de seguimiento 108 se actualiza 408 para indicar el(los) nodo(s) disponible(s) nuevo(s) y las porciones nuevas en el(los) nodo(s) nuevo(s). Los nodos de almacenamiento individuales pueden presentar un estado de “disponible” o “indisponible”. Los nodos nuevos se pueden actualizar para estar “disponibles” una vez que los mismos han descargado todas las porciones y el nodo fallido se puede actualizar a “indisponible”. En una realización, se supone que existe siempre una posibilidad de que un nodo vuelva en algún momento posterior, de manera que un nodo no se marca como “indisponible” permanentemente. Mientras un nodo de almacenamiento está intentando descargar una porción desde otros nodos o desde el módulo de carga, al mismo se le puede asignar un estado de “descarga” por parte del módulo de seguimiento.
El éxito o fallo de un intento de generar una porción combinada por parte de un nodo de almacenamiento es una valoración realizada por el nodo de almacenamiento y se informa sobre la misma al módulo de seguimiento 108. En una realización, durante la carga inicial de un archivo de datos, el módulo de seguimiento puede iniciar unas pocas transferencias de porciones a nodos de almacenamiento 106, a continuación añadir más a medida que las mismas o bien resultan exitosas o bien fallan, y detenerse si suficientes nodos tienen conjuntos completos de porciones o renunciar si fallan demasiadas de una vez. De manera similar, si se ha almacenado un archivo de datos y fallan suficientes nodos de almacenamiento de manera que la cantidad de porciones disponibles está por debajo de un umbral de seguridad, el módulo de seguimiento puede iniciar una transferencia a un nodo de almacenamiento nuevo, y a continuación volver al estado estable si esa transferencia tiene éxito o efectuar una recuperación tras fallo hacia otro nodo si la misma falla, y marcar temporalmente el fragmento particular de datos como indisponible en caso de que fallen demasiadas transferencias de una vez. En el ejemplo de la FIG. 5, supóngase que se ajusta un umbral de seguridad de cinco nodos. Si un nodo falla y el número de nodos cae por debajo de cinco, el módulo de seguimiento puede entrar en contacto con los nodos restantes para comenzar a generar porciones sustitutorias para un nodo nuevo. Si la transferencia de porciones sustitutorias al nodo nuevo falla, el módulo de seguimiento puede marcar este nodo como fallido, identificar un segundo nodo nuevo, y entrar en contacto con los nodos restantes para comenzar a generar porciones sustitutorias para el segundo nodo nuevo. Si la transferencia de porciones sustitutorias al segundo nodo nuevo falla también, el archivo de datos de las porciones se puede marcar como temporalmente indisponible para la descarga.
Las transferencias se pueden efectuar mediante la generación, por parte del nodo de almacenamiento de carga, de 6
15
25
35
45
55
E10739071
19-01-2015
una porción recombinada nueva, y el mero almacenamiento de la misma por parte del nodo de almacenamiento de descarga. Para hacer que el sistema de transferencia sea más versátil, un archivo se puede dividir en fragmentos inicialmente (en el módulo de carga) antes de quedar dividido en porciones, de manera que los x nodos que suministran porciones para un fragmento no tienen que ser los mismos que los x nodos que suministran las porciones para otro fragmento. Las transferencias se pueden finalizar desde un conjunto diferente de nodos a los nodos desde las que se iniciaron en caso de que uno de los nodos deje de funcionar a mitad de camino. Además, se pueden realizar transferencias desde cada fuente disponible de porciones simultáneamente, lo cual constituye una ventaja ya que el cuello de botella en las velocidades de transferencia de datos se encuentra generalmente en el lado del enlace ascendente, por lo que la descarga desde múltiples fuentes dará como resultado transferencias más rápidas así como un uso distribuido más uniformemente del ancho de banda. Esto a su vez da como resultado una rápida recuperación con respecto a un fallo y por tanto una mayor fiabilidad. En una realización, cuando un nodo de almacenamiento comienza una transferencia, a la misma se le proporciona el conjunto completo de recursos disponibles que se creen que están en línea por parte del módulo de seguimiento, incluyendo posiblemente el módulo de carga original, y el nodo a continuación realiza las transferencias a cualquiera que sea la velocidad que pueda de entre todas las fuentes disponibles.
El proceso antes descrito de sustitución de nodos fallidos 106 se puede repetir cualquier número de veces según sea necesario. Siguiendo este proceso, los nodos de almacenamiento pueden fallar y se pueden sustituir con el paso del tiempo, y las porciones para nodos sustitutorios pueden provenir de nodos que eran ellos mismos nodos sustitutorios en generaciones previas. Para recuperar el archivo original se pueden usar cualesquiera x nodos con conjuntos completos de porciones, con independencia de cuántas generaciones de fallos de nodo se hayan producido. En muchos casos prácticos, el número de nodos necesario para la recuperación es menor que x nodos. Por ejemplo, cuando se generan porciones sustitutorias para el primer nodo sustitutorio después de un almacenamiento inicial, basta con porciones de cualesquiera (x+1)/2 nodos.
Después de suficientes generaciones de fallos y sustituciones de nodos, el número de nodos necesario para una recuperación completa se aproximará de forma monótona a x, especialmente si se produce en algún momento una ocasión en la que el número de nodos disponibles desciende a x. Aunque en la práctica es probable que la fiabilidad sea mejor, el hecho de que sean necesarios x nodos como mucho, es un rendimiento mínimo riguroso del sistema. En una realización, el sistema de almacenamiento puede comenzar con menos nodos para el almacenamiento inicial del archivo de datos y puede incrementar el número de nodos con el paso de tiempo en la medida en la que se espere que la fiabilidad del sistema disminuya. Por ejemplo, después de un cierto tiempo o un cierto número de fallos y sustituciones de nodos, se puede añadir un nodo adicional al sistema. Las porciones para este nodo adicional se pueden generar de la misma manera que se generan porciones para nodos sustitutorios. No obstante, es posible que la fiabilidad del sistema pueda aumentar con el tiempo, puesto que los nodos que contienen todavía porciones para el archivo de datos habrán dispuesto de más tiempo de funcionamiento y por lo tanto será menos probable que fallen que aquellos que todavía no han sido comprobados los cuales se usan para el almacenamiento inicial. Esta consideración puede tender a equilibrar la reducción esperada de la fiabilidad, antes mencionada.
Si se proporcionan múltiples porciones sustitutorias desde un único nodo a nodos sustitutorios a través de generaciones subsiguientes de fallo de nodo, puede obtenerse como resultado una pérdida de datos. No obstante, es posible usar información adicional para verificar la integridad de porciones sustitutorias recibidas desde un nodo disponible con el fin de detectar esta pérdida de datos. En caso de que una porción sustitutoria no supere esta verificación, se puede solicitar una porción sustitutoria nueva del nodo o de otro nodo.
La integridad de una porción sustitutoria de un nodo disponible particular se puede verificar o bien recibiendo información adicional de ese nodo disponible particular o bien recibiendo información de otro nodo disponible. Esta verificación no hace que aumente significativamente el uso del ancho de banda a través de la red. Para verificar una porción recién recibida, un nodo sustitutorio (o nuevo) envía un valor semilla a un generador de números seudoaleatorios (PRNG) para un nodo disponible. El nodo disponible genera una nueva porción recombinada y a continuación multiplica todas las entradas del mismo (aparte de los coeficientes) por el valor actual correspondiente de la salida del PRNG, y suma todos ellos entre sí. El nodo disponible envía esta suma, junto con los coeficientes, al nodo sustitutorio como información de verificación, a la que se hace referencia también como información de comprobación hash. A continuación, el nodo sustitutorio puede calcular cuál debería ser el valor de la suma, dadas las porciones completas de las que dispone y los coeficientes. El nodo sustitutorio verifica la integridad de la porción recién recibida si el valor calculado es igual a la suma recibida. Es posible que los datos disponibles no contengan ninguna redundancia, y, como resultado, la verificación de la integridad puede ser de valor limitado. No obstante, esta posibilidad es muy remota, especialmente poco después del almacenamiento inicial.
La eficacia del planteamiento antes descrito para generar porciones sustitutorias recombinando porciones en nodos disponibles se puede demostrar empíricamente. Una manera de determinar cuántos datos son recuperables a partir de un conjunto de porciones después de una serie de recombinaciones consiste en ejecutar una simulación que representa cada porción mediante un vector aleatorio. A continuación, se puede llevar a cabo una serie de operaciones sobre dichos vectores, y se puede calcular el rango de la matriz formada por los vectores correspondientes. Este rango indica la cantidad de datos recuperables a partir de los vectores (o porciones).
A continuación se presenta un análisis de la eficiencia del planteamiento antes descrito. Puesto que son necesarias 7
15
25
35
45
55
E10739071
19-01-2015
x entidades pares para una recuperación, el mejor rendimiento posible sobre la base de límites teóricos de información sería que dichas entidades pares tuviesen k, ó x*(x+1)/2, porciones. Con este esquema, cada una de dichas x entidades pares tiene x porciones, para un total de x*x porciones. La relación entre las dos es por lo tanto (x*(x+1)/2)/(x*x) = (x+1)/(2*x) que, asintóticamente, se aproxima a 1/2 a medida que x se hace mayor, con lo que se puede hacer que x sea arbitrariamente grande con una carga adicional muy pequeña del ancho de banda. Puesto que una x mayor se corresponde con una mayor fiabilidad, es deseable que x se seleccione de manera que sea un valor grande (por ejemplo, ligeramente menor que el número total de nodos N). En la práctica es probable que el factor limitativo sobre x sea la carga de cálculo, aunque hay algunos otros efectos de segundo orden que podrían resultar prominentes. Son ejemplos de ellos los efectos sobre la carga de los protocolos alámbricos, la carga de indexación de datos centralizada, el hecho de que los coeficientes de tamaño se hagan significativos, o el aproximamiento de x al número total de nodos N en el sistema como conjunto, lo cual es un límite estricto.
Al generar porciones sustitutorias a partir de nodos existentes según se ha descrito anteriormente, se pueden mantener niveles altos de fiabilidad aunque conservando un uso bajo del ancho de banda. Es posible simplemente esperar hasta que queden solo k nodos de almacenamiento y a continuación llevar a cabo una recuperación (y una nueva generación de porciones para re-almacenar los datos en los nodos de almacenamiento). Este planteamiento presenta unas características de fiabilidad deficientes puesto que un fallo de un nodo de almacenamiento adicional puede dar como resultado pérdida de datos. Este planteamiento requiere también la regeneración del archivo original y porciones nuevas (por ejemplo, en el módulo de carga). Otro planteamiento consiste en realizar una recuperación y regeneración completa de porciones (por ejemplo, en el módulo de carga) cada vez que se pierde un nodo de almacenamiento. Esto presenta mejores características de fiabilidad, aunque puede que requiera grandes cantidades de ancho de banda.
Volviendo a la FIG. 2, un módulo de descarga 110 recupera 208, de los nodos de almacenamiento, porciones. Un módulo de descarga interesado en un archivo de datos puede recuperar información del módulo de seguimiento 108 en relación con qué nodos de almacenamiento tienen en ese momento porciones del archivo. A continuación, el módulo de descarga puede recuperar directamente las porciones de los nodos de almacenamiento 106 especificados. El módulo de descarga puede recuperar porciones de x o más nodos disponibles. A continuación, el módulo de descarga reconstruye 210 el archivo de datos original a partir de las porciones recuperadas. La reconstrucción se lleva a cabo usando los coeficientes incluidos con cada porción junto con información de secuencia de porciones del módulo de seguimiento.
Las descargas en general no se pueden hacer fiables en el sentido de recuperación tras fallo ya que el propio módulo de descarga es un punto único de fallo. La información de descarga se puede considerar como consultiva, y el módulo de seguimiento puede proporcionar simplemente información sobre todos los nodos disponibles que tienen porciones completas para un posible módulo de descarga, incluyendo posiblemente el módulo de carga original, y los módulos de descarga determinan para sí mismos si tienen éxito o fallan (aunque un fallo por cualquier motivo diferente a la desconexión del módulo de carga debería ser poco frecuente).
A diferencia de cuando un nodo nuevo se está convirtiendo en disponible, es aceptable que un nodo efectúe una recuperación completa para descargar múltiples porciones de un nodo único. Supóngase que un nodo de descarga (por ejemplo, el módulo de descarga 110) ya ha recibido una porción de un nodo de almacenamiento 106 de carga. Para determinar si una porción recombinada adicional del nodo de carga podría resultar útil, el nodo de carga puede enviar al nodo de descarga los coeficientes de la porción adicional. El nodo de descarga puede calcular si esa porción es linealmente independiente de las correspondientes que ya tiene usando los coeficientes, y en caso afirmativo, el nodo de descarga puede solicitar la porción del nodo de carga. En una realización, no es necesario que el nodo de descarga solicite la misma porción, sino que puede solicitar en su lugar otra porción, ya que, en general, una porción adicional será útil si y solo si todas las fracciones, excepto una minúscula, de otras porciones son útiles. El nodo de descarga también puede solicitar información de comprobación hash usando la misma técnica que la usada por nodos nuevos para verificar la integridad de los datos según se ha descrito anteriormente. En general, la información de comprobación hash de un nodo es útil si y solo si porciones adicionales de ese nodo pudieran ser útiles.
En una realización, las técnicas de almacenamiento distribuido antes descritas se aplican sobre dispositivos de almacenamiento ampliamente distribuido, no fiables (posiblemente conectados a ordenadores). En la actualidad existen muchos dispositivos de almacenamiento con cantidades muy grandes de capacidad no utilizada sobre conexiones de Internet no reguladas que se pueden usar para un almacenamiento distribuido. Estos dispositivos de almacenamiento (es decir, nodos de almacenamiento 106) pueden ser propiedad de varios negocios e individuos y pueden ser explotados por los mismos. Los dispositivos de almacenamiento pueden presentar tasas de fallo elevadas, aunque los fallos no presentan en gran medida ninguna correlación. Puesto que es improbable que muchos nodos fallen al mismo tiempo, es probable que el planteamiento antes descrito funcione bien. En una realización, el módulo de seguimiento 108 puede permitir que proveedores de dispositivos de almacenamiento hagan que su almacenamiento resulte disponible para usuarios que necesitan almacenar datos. El módulo de seguimiento puede incluir un servidor web para que proveedores de dispositivos de almacenamiento registren sus dispositivos de almacenamiento en el módulo de seguimiento, de manera que los dispositivos pueden comenzar a usarse como nodos de almacenamiento iniciales o nodos sustitutorios para archivos de datos de usuarios del
8 10
15
20
25
30
35
40
45
50
55
E10739071
19-01-2015
almacenamiento. El módulo de seguimiento también puede realizar un seguimiento del uso de los dispositivos de almacenamiento y facilitar el pago de usuarios del almacenamiento a proveedores de dispositivos de almacenamiento.
En la memoria descriptiva, la referencia a “una realización” significa que un rasgo, estructura, o característica particular descrito en relación con las realizaciones está incluido en por lo menos una realización de la invención. Las apariciones de la expresión “en una realización” o “una realización preferida” en varios lugares de la memoria descriptiva no se refieren todas ellas necesariamente a la misma realización.
Algunas partes de lo anterior se presentan en términos de métodos y representaciones simbólicas de operaciones sobre bits de datos en una memoria de ordenador. Estas descripciones y representaciones son los medios usados por aquellos versados en la técnica para comunicar, de manera más efectiva, la esencia de su trabajo a otros versado en la técnica. En este caso, y en general, se considera que un método es una secuencia autónoma de etapas (instrucciones) que conducen a un resultado deseado. Etapas son aquellas que requieren manipulaciones físicas de magnitudes físicas. Habitualmente, aunque no de forma necesaria, estas magnitudes adoptan la forma de señales eléctricas, magnéticas u ópticas con capacidad de ser almacenadas, transferidas, combinadas, comparadas y manipuladas de otro modo. En ocasiones resulta cómodo, principalmente por motivos de uso común, referirse a estas señales como bits, valores, elementos, símbolos, caracteres, términos, números, o similares. Además, también resulta cómodo en ocasiones, referirse a ciertas disposiciones de etapas que requieren manipulaciones físicas de magnitudes físicas como módulos o dispositivos de código, sin pérdida de generalidad.
No obstante, debe tenerse en mente que todos estos términos y similares están destinados a asociarse a las magnitudes físicas apropiadas y son meramente etiquetas adecuadas que se aplican a estas magnitudes. A no ser que se mencione específicamente lo contrario tal como se pone de manifiesto a partir de la siguiente argumentación, se aprecia que en la totalidad de la descripción, las argumentaciones que utilizan términos tales como “procesar” o “calcular” o “determinar” o “visualizar” o “determinar” o similares, se refieren a la acción y procesos de un sistema de ordenador, o dispositivo informático electrónico similar, que manipula y transforma datos representados en forma de magnitudes (electrónicas) físicas dentro de las memorias o registros del sistema informático u otros dispositivos de almacenamiento, transmisión o visualización de información del tipo mencionado.
Ciertos aspectos de la presente invención incluyen etapas de proceso e instrucciones descritas en la presente en forma de un método. Debe observarse que las etapas de proceso e instrucciones de la presente invención se pueden materializar en software, microprogramas o hardware, y cuando se materialicen en software, se pueden descargar para residir en y ser explotadas desde diferentes plataformas usadas por varios sistemas operativos.
La presente invención se refiere también a un aparato para llevar a cabo las operaciones de la presente. Este aparato se puede construir especialmente para los fines requeridos, o puede comprender un ordenador de propósito general activado o reconfigurado selectivamente por un programa de ordenador almacenado en el ordenador. Dicho programa de ordenador se puede almacenar en un soporte de almacenamiento legible por ordenador, tal como, aunque sin carácter limitativo, cualquier tipo de disco incluyendo discos flexibles, discos ópticos, CD-ROMs, discos magnético-ópticos, memorias de solo lectura (ROMs), memorias de acceso aleatorio (RAMs), EPROMs, EEPROMs, tarjetas magnéticas u ópticas circuitos integrados de aplicación específica (ASICs), o cualquier tipo de soporte adecuado para almacenar instrucciones electrónicas, y acoplado, cada uno de ellos, a un bus de un sistema de ordenador. Además, los ordenadores a los que se hace referencia en la memoria descriptiva pueden incluir un único procesador o pueden ser arquitecturas que utilizan diseños de procesador múltiple para incrementar la capacidad de cálculo.
Los métodos y representaciones visuales presentados en este documento no están relacionados inherentemente con ningún ordenador particular u otro aparato. Varios sistemas de propósito general también se pueden usar con programas de acuerdo con las enseñanzas de la presente, o puede que resulte conveniente construir aparatos más especializados para llevar a cabo las etapas de método requeridas. La estructura requerida para varios de estos sistemas se pondrá de manifiesto a partir de la siguiente descripción. Adicionalmente, la presente invención no se describe en referencia a ningún lenguaje de programación particular. Se apreciará que se puede usar varios lenguajes de programación para implementar las enseñanzas de la presente invención que se describen en la presente, y cualesquiera referencias posteriores a lenguajes específicos se proporcionan para dar a conocer la habilitación y el modo óptimo de la presente invención.
Aunque la invención se ha mostrado y descrito particularmente en referencia a una realización preferida y varias realizaciones alternativas, aquellos versados en la técnica pertinente entenderán que en la misma se pueden realizar diversos cambios en cuanto a forma y detalles sin desviarse con respecto al alcance de la invención.
Finalmente, debe señalarse que el lenguaje usado en la memoria descriptiva se ha seleccionado principalmente con fines de legibilidad e instructivos, y puede no haber sido seleccionado para delimitar o circunscribir la materia objeto de la invención. Por consiguiente, la exposición de la presente invención está destinada a ser ilustrativa, aunque no limitativa, del alcance de la invención.
9

Claims (9)

  1. E10739071
    19-01-2015
    REIVINDICACIONES
    1. Método para sustituir un nodo fallido que almacena datos distribuidos, que comprende:
    recibir (402) una indicación de un nodo de almacenamiento nuevo, recibiéndose la indicación en cada uno de una pluralidad de nodos de almacenamiento (106), en donde dicho cada uno de la pluralidad de nodos
    5 de almacenamiento (106) contiene una pluralidad de porciones generadas a partir de un archivo de datos, generándose cada una de la pluralidad de porciones mediante la multiplicación de fragmentos del archivo de datos por coeficientes aleatorios y mediante la suma de los fragmentos multiplicados:
    generar (404) una porción sustitutoria en cada uno de la pluralidad de nodos de almacenamiento (106) como respuesta a la indicación, en donde la porción sustitutoria generada en uno de la pluralidad de 10 nodos de almacenamiento incluye una combinación de la pluralidad de porciones contenidas en el nodo de almacenamiento; y
    enviar (406) las porciones sustitutorias generadas desde la pluralidad de nodos de almacenamiento
    (106) al nodo de almacenamiento nuevo indicado.
  2. 2. El método según la reivindicación 1, en el que la porción sustitutoria generada comprende una combinación
    15 lineal de la pluralidad de porciones contenidas en el nodo de almacenamiento que usan coeficientes aleatorios, y/o en donde un número total de las porciones sustitutorias generadas por la pluralidad de nodos de almacenamiento (106) es igual a un parámetro de fiabilidad, en donde el parámetro de fiabilidad se basa en un número total de nodos de almacenamiento requeridos para que el archivo de datos siga siendo recuperable.
  3. 3. El método según una cualquiera de las reivindicaciones anteriores, que comprende además verificar la 20 integridad de las porciones sustitutorias generadas.
  4. 4. El método según una cualquiera de las reivindicaciones anteriores, en el que:
    cada una de la pluralidad de porciones generadas a partir del archivo de datos comprende una combinación lineal de fragmentos del archivo de datos y un conjunto de coeficientes usados para generar la combinación; y/o
    25 la pluralidad de porciones generadas a partir del archivo de datos se genera usando codificación de borrado (erasure coding) basada en fragmentos del archivo de datos; y/o
    las porciones sustitutorias generadas se usan para reconstruir el archivo de datos (210) o en donde las porciones sustitutorias generadas se usan para generar porciones sustitutorias subsiguientes para un nodo nuevo subsiguiente; y/o
    30 la indicación se recibe desde un módulo de seguimiento (108) que monitoriza el estado de la pluralidad de nodos de almacenamiento y realiza un seguimiento de posiciones de porciones.
  5. 5.
    Método según la reivindicación 1, en el que el nodo de almacenamiento nuevo sustituye a un nodo de almacenamiento fallido.
  6. 6.
    Método según la reivindicación 1, en el que la generación de una porción sustitutoria comprende:
    35 multiplicar cada una de la pluralidad de porciones contenidas en el nodo de almacenamiento y un conjunto de coeficientes por un valor de escala aleatorio; y
    combinar las porciones multiplicadas y el conjunto multiplicado de coeficientes.
  7. 7. Sistema para sustituir un nodo fallido que almacena datos distribuidos, presentando el sistema una pluralidad de nodos de almacenamiento (106), en donde cada nodo de almacenamiento contiene una pluralidad de
    40 porciones generadas a partir de un archivo de datos, generándose cada una de la pluralidad de porciones por la multiplicación de fragmentos del archivo de datos por coeficientes aleatorios y la suma de los fragmentos multiplicados, y en donde cada nodo de almacenamiento está configurado para
    recibir (402) una indicación de un nodo de almacenamiento nuevo;
    generar (404) una porción sustitutoria como respuesta a la indicación, en donde la porción sustitutoria 45 comprende una combinación de la pluralidad de porciones contenidas en el nodo de almacenamiento; y
    enviar (406) la porción sustitutoria generada al nodo de almacenamiento nuevo indicado.
  8. 8. El sistema según la reivindicación 7, en el que:
    la porción sustitutoria comprende una combinación lineal de la pluralidad de porciones contenidas en el
    10
    E10739071
    19-01-2015
    nodo de almacenamiento que usan coeficientes aleatorios; y/o
    un número total de las porciones sustitutorias generadas por la pluralidad de nodos de almacenamiento
    (106) es igual a un parámetro de fiabilidad, en donde el parámetro de fiabilidad se basa en un número total
    de nodos de almacenamiento requeridos para que el archivo de datos siga siendo recuperable; y/o
    5
    cada uno de la pluralidad de nodos de almacenamiento (106) está configurado además para enviar
    información de comprobación hash al nodo de almacenamiento nuevo con el fin de verificar la porción
    sustitutoria; y/o
    cada una de la pluralidad de porciones generadas a partir del archivo de datos comprende una combinación
    lineal de fragmentos del archivo de datos y un conjunto de coeficientes usados para generar la
    10
    combinación; y/o
    la pluralidad de porciones generadas a partir del archivo de datos se genera usando codificación de borrado
    (erasure coding) basada en fragmentos del archivo de datos; y/o
    la porción sustitutoria generada se usa para reconstruir el archivo de datos o en donde la porción
    sustitutoria generada se usa para generar porciones sustitutorias subsiguientes para un nodo nuevo
    15
    subsiguiente; y/o
    la indicación se recibe desde un módulo de seguimiento (108) que monitoriza el estado de la pluralidad de
    nodos de almacenamiento (106) y realiza un seguimiento de posiciones de porciones.
  9. 9.
    Sistema según la reivindicación 8, en el que el nodo de almacenamiento nuevo sustituye a un nodo de
    almacenamiento fallido.
    20
    10. Sistema según la reivindicación 8, en el que la generación de una porción sustitutoria comprende:
    multiplicar cada una de la pluralidad de porciones contenidas en el nodo de almacenamiento y un conjunto
    de coeficientes por un valor de escala aleatorio; y
    combinar las porciones multiplicadas y el conjunto multiplicado de coeficientes.
    11
ES10739071.8T 2009-02-03 2010-02-03 Almacenamiento distribuido de datos recuperables Active ES2528245T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14967609P 2009-02-03 2009-02-03
US149676P 2009-02-03
PCT/US2010/023075 WO2010091101A1 (en) 2009-02-03 2010-02-03 Distributed storage of recoverable data

Publications (1)

Publication Number Publication Date
ES2528245T3 true ES2528245T3 (es) 2015-02-05

Family

ID=42398690

Family Applications (1)

Application Number Title Priority Date Filing Date
ES10739071.8T Active ES2528245T3 (es) 2009-02-03 2010-02-03 Almacenamiento distribuido de datos recuperables

Country Status (8)

Country Link
US (1) US8522073B2 (es)
EP (1) EP2394220B1 (es)
KR (1) KR20110122169A (es)
BR (1) BRPI1008072A2 (es)
CA (1) CA2751358C (es)
ES (1) ES2528245T3 (es)
RU (1) RU2501072C2 (es)
WO (1) WO2010091101A1 (es)

Families Citing this family (171)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8881011B2 (en) 2006-12-05 2014-11-04 Crackle, Inc. Tool for creating content for video sharing platform
US8386841B1 (en) * 2010-07-21 2013-02-26 Symantec Corporation Systems and methods for improving redundant storage fault tolerance
US11614893B2 (en) 2010-09-15 2023-03-28 Pure Storage, Inc. Optimizing storage device access based on latency
EP2469413B1 (en) 2010-12-27 2013-06-05 Amplidata NV A hierarchical, distributed object storage system
EP2469411B1 (en) 2010-12-27 2013-05-29 Amplidata NV A distributed object storage system
EP2993585B1 (en) * 2010-12-27 2017-06-28 Amplidata NV Distributed object storage system comprising performance optimizations
US8538029B2 (en) * 2011-03-24 2013-09-17 Hewlett-Packard Development Company, L.P. Encryption key fragment distribution
WO2012147087A1 (en) 2011-04-29 2012-11-01 Tata Consultancy Services Limited Archival storage and retrieval system
US9106943B2 (en) 2011-05-04 2015-08-11 Cisco Technology, Inc. Sharing of subscriber-recorded digital video recorder content
US8589640B2 (en) 2011-10-14 2013-11-19 Pure Storage, Inc. Method for maintaining multiple fingerprint tables in a deduplicating storage system
US20130185257A1 (en) * 2012-01-12 2013-07-18 Krishna P. Puttaswamy Naga Cloud data resiliency system and method
EP2660723A1 (en) * 2012-05-03 2013-11-06 Thomson Licensing Method of data storing and maintenance in a distributed data storage system and corresponding device
EP2672387B1 (en) * 2012-06-04 2018-08-01 Amplidata NV A distributed object storage system
US9086992B1 (en) 2012-06-08 2015-07-21 Digital Ordnance Storage, Inc. System and method for interconnecting storage elements
US8935221B1 (en) 2012-07-25 2015-01-13 Amazon Technologies, Inc. Object loss reporting in a data storage system
WO2014131148A1 (zh) * 2013-02-26 2014-09-04 北京大学深圳研究生院 一种最小存储再生码的编码和存储节点修复方法
CN103152434A (zh) * 2013-03-27 2013-06-12 江苏辰云信息科技有限公司 一种分布式云系统中的领导节点更替方法
EP2863566B1 (en) 2013-10-18 2020-09-02 Université de Nantes Method and apparatus for reconstructing a data block
US8874835B1 (en) 2014-01-16 2014-10-28 Pure Storage, Inc. Data placement based on data properties in a tiered storage device system
US10291696B2 (en) * 2014-04-28 2019-05-14 Arizona Board Of Regents On Behalf Of Arizona State University Peer-to-peer architecture for processing big data
US9367243B1 (en) 2014-06-04 2016-06-14 Pure Storage, Inc. Scalable non-uniform storage sizes
US11960371B2 (en) 2014-06-04 2024-04-16 Pure Storage, Inc. Message persistence in a zoned system
US11068363B1 (en) 2014-06-04 2021-07-20 Pure Storage, Inc. Proactively rebuilding data in a storage cluster
US9087012B1 (en) * 2014-06-04 2015-07-21 Pure Storage, Inc. Disaster recovery at high reliability in a storage cluster
US9003144B1 (en) 2014-06-04 2015-04-07 Pure Storage, Inc. Mechanism for persisting messages in a storage system
US8850108B1 (en) * 2014-06-04 2014-09-30 Pure Storage, Inc. Storage cluster
US9213485B1 (en) * 2014-06-04 2015-12-15 Pure Storage, Inc. Storage system architecture
US11652884B2 (en) 2014-06-04 2023-05-16 Pure Storage, Inc. Customized hash algorithms
US10574754B1 (en) 2014-06-04 2020-02-25 Pure Storage, Inc. Multi-chassis array with multi-level load balancing
US11399063B2 (en) 2014-06-04 2022-07-26 Pure Storage, Inc. Network authentication for a storage system
US9612952B2 (en) 2014-06-04 2017-04-04 Pure Storage, Inc. Automatically reconfiguring a storage memory topology
US9836234B2 (en) 2014-06-04 2017-12-05 Pure Storage, Inc. Storage cluster
EP3152662B1 (en) * 2014-06-04 2019-04-24 Pure Storage, Inc. Mechanism for persisting messages in a storage system
US9218244B1 (en) 2014-06-04 2015-12-22 Pure Storage, Inc. Rebuilding data across storage nodes
US11604598B2 (en) 2014-07-02 2023-03-14 Pure Storage, Inc. Storage cluster with zoned drives
US11886308B2 (en) 2014-07-02 2024-01-30 Pure Storage, Inc. Dual class of service for unified file and object messaging
US10114757B2 (en) 2014-07-02 2018-10-30 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9021297B1 (en) 2014-07-02 2015-04-28 Pure Storage, Inc. Redundant, fault-tolerant, distributed remote procedure call cache in a storage system
US9836245B2 (en) 2014-07-02 2017-12-05 Pure Storage, Inc. Non-volatile RAM and flash memory in a non-volatile solid-state storage
US8868825B1 (en) * 2014-07-02 2014-10-21 Pure Storage, Inc. Nonrepeating identifiers in an address space of a non-volatile solid-state storage
US9811677B2 (en) 2014-07-03 2017-11-07 Pure Storage, Inc. Secure data replication in a storage grid
US9747229B1 (en) 2014-07-03 2017-08-29 Pure Storage, Inc. Self-describing data format for DMA in a non-volatile solid-state storage
US8874836B1 (en) 2014-07-03 2014-10-28 Pure Storage, Inc. Scheduling policy for queues in a non-volatile solid-state storage
US10853311B1 (en) 2014-07-03 2020-12-01 Pure Storage, Inc. Administration through files in a storage system
US9817750B2 (en) 2014-07-03 2017-11-14 Pure Storage, Inc. Profile-dependent write placement of data into a non-volatile solid-state storage
US9495255B2 (en) 2014-08-07 2016-11-15 Pure Storage, Inc. Error recovery in a storage cluster
US10983859B2 (en) 2014-08-07 2021-04-20 Pure Storage, Inc. Adjustable error correction based on memory health in a storage unit
US9558069B2 (en) 2014-08-07 2017-01-31 Pure Storage, Inc. Failure mapping in a storage array
US9483346B2 (en) 2014-08-07 2016-11-01 Pure Storage, Inc. Data rebuild on feedback from a queue in a non-volatile solid-state storage
US9082512B1 (en) 2014-08-07 2015-07-14 Pure Storage, Inc. Die-level monitoring in a storage cluster
US9766972B2 (en) 2014-08-07 2017-09-19 Pure Storage, Inc. Masking defective bits in a storage array
US10079711B1 (en) 2014-08-20 2018-09-18 Pure Storage, Inc. Virtual file server with preserved MAC address
US9727432B1 (en) 2014-10-09 2017-08-08 Seagate Technology Llc Accelerated testing using simulated failures in a multi-device storage system
WO2016080569A1 (ko) * 2014-11-19 2016-05-26 서울대학교산학협력단 일정 수 이상의 파일 조각으로 원본 파일을 복원하는 파일 관리 장치 및 그것의 파일 관리 방법
US10042848B1 (en) 2014-12-19 2018-08-07 Amazon Technologies, Inc. Sparse index-based storage, retrieval, and management of stored data
US9959274B2 (en) * 2014-12-19 2018-05-01 Amazon Technologies, Inc. Volume-level redundancy coding techniques for sequential transfer optimized storage devices
US9948615B1 (en) 2015-03-16 2018-04-17 Pure Storage, Inc. Increased storage unit encryption based on loss of trust
US11294893B2 (en) 2015-03-20 2022-04-05 Pure Storage, Inc. Aggregation of queries
US9940234B2 (en) 2015-03-26 2018-04-10 Pure Storage, Inc. Aggressive data deduplication using lazy garbage collection
US10082985B2 (en) 2015-03-27 2018-09-25 Pure Storage, Inc. Data striping across storage nodes that are assigned to multiple logical arrays
US10178169B2 (en) 2015-04-09 2019-01-08 Pure Storage, Inc. Point to point based backend communication layer for storage processing
US9672125B2 (en) 2015-04-10 2017-06-06 Pure Storage, Inc. Ability to partition an array into two or more logical arrays with independently running software
US10140149B1 (en) 2015-05-19 2018-11-27 Pure Storage, Inc. Transactional commits with hardware assists in remote memory
US9817576B2 (en) 2015-05-27 2017-11-14 Pure Storage, Inc. Parallel update to NVRAM
US10846275B2 (en) 2015-06-26 2020-11-24 Pure Storage, Inc. Key management in a storage device
US10983732B2 (en) 2015-07-13 2021-04-20 Pure Storage, Inc. Method and system for accessing a file
US11232079B2 (en) 2015-07-16 2022-01-25 Pure Storage, Inc. Efficient distribution of large directories
US10108355B2 (en) 2015-09-01 2018-10-23 Pure Storage, Inc. Erase block state detection
US11341136B2 (en) 2015-09-04 2022-05-24 Pure Storage, Inc. Dynamically resizable structures for approximate membership queries
US10853266B2 (en) 2015-09-30 2020-12-01 Pure Storage, Inc. Hardware assisted data lookup methods
US9768953B2 (en) 2015-09-30 2017-09-19 Pure Storage, Inc. Resharing of a split secret
US10762069B2 (en) 2015-09-30 2020-09-01 Pure Storage, Inc. Mechanism for a system where data and metadata are located closely together
US9843453B2 (en) 2015-10-23 2017-12-12 Pure Storage, Inc. Authorizing I/O commands with I/O tokens
US10007457B2 (en) 2015-12-22 2018-06-26 Pure Storage, Inc. Distributed transactions with token-associated execution
US10261690B1 (en) 2016-05-03 2019-04-16 Pure Storage, Inc. Systems and methods for operating a storage system
US11231858B2 (en) 2016-05-19 2022-01-25 Pure Storage, Inc. Dynamically configuring a storage system to facilitate independent scaling of resources
US10691567B2 (en) 2016-06-03 2020-06-23 Pure Storage, Inc. Dynamically forming a failure domain in a storage system that includes a plurality of blades
US11706895B2 (en) 2016-07-19 2023-07-18 Pure Storage, Inc. Independent scaling of compute resources and storage resources in a storage system
US11861188B2 (en) 2016-07-19 2024-01-02 Pure Storage, Inc. System having modular accelerators
US10768819B2 (en) 2016-07-22 2020-09-08 Pure Storage, Inc. Hardware support for non-disruptive upgrades
US9672905B1 (en) 2016-07-22 2017-06-06 Pure Storage, Inc. Optimize data protection layouts based on distributed flash wear leveling
US11449232B1 (en) 2016-07-22 2022-09-20 Pure Storage, Inc. Optimal scheduling of flash operations
US11604690B2 (en) 2016-07-24 2023-03-14 Pure Storage, Inc. Online failure span determination
US11080155B2 (en) 2016-07-24 2021-08-03 Pure Storage, Inc. Identifying error types among flash memory
US10216420B1 (en) 2016-07-24 2019-02-26 Pure Storage, Inc. Calibration of flash channels in SSD
US11797212B2 (en) 2016-07-26 2023-10-24 Pure Storage, Inc. Data migration for zoned drives
US11734169B2 (en) 2016-07-26 2023-08-22 Pure Storage, Inc. Optimizing spool and memory space management
US11886334B2 (en) 2016-07-26 2024-01-30 Pure Storage, Inc. Optimizing spool and memory space management
US10366004B2 (en) 2016-07-26 2019-07-30 Pure Storage, Inc. Storage system with elective garbage collection to reduce flash contention
US10203903B2 (en) 2016-07-26 2019-02-12 Pure Storage, Inc. Geometry based, space aware shelf/writegroup evacuation
US11422719B2 (en) 2016-09-15 2022-08-23 Pure Storage, Inc. Distributed file deletion and truncation
US9747039B1 (en) 2016-10-04 2017-08-29 Pure Storage, Inc. Reservations over multiple paths on NVMe over fabrics
US10756816B1 (en) 2016-10-04 2020-08-25 Pure Storage, Inc. Optimized fibre channel and non-volatile memory express access
US10481798B2 (en) 2016-10-28 2019-11-19 Pure Storage, Inc. Efficient flash management for multiple controllers
US10491378B2 (en) 2016-11-16 2019-11-26 StreamSpace, LLC Decentralized nodal network for providing security of files in distributed filesystems
US11550481B2 (en) 2016-12-19 2023-01-10 Pure Storage, Inc. Efficiently writing data in a zoned drive storage system
US11307998B2 (en) 2017-01-09 2022-04-19 Pure Storage, Inc. Storage efficiency of encrypted host system data
US11955187B2 (en) 2017-01-13 2024-04-09 Pure Storage, Inc. Refresh of differing capacity NAND
US9747158B1 (en) 2017-01-13 2017-08-29 Pure Storage, Inc. Intelligent refresh of 3D NAND
US10255134B2 (en) * 2017-01-20 2019-04-09 Samsung Electronics Co., Ltd. Control plane method and apparatus for providing erasure code protection across multiple storage devices
US10979223B2 (en) 2017-01-31 2021-04-13 Pure Storage, Inc. Separate encryption for a solid-state drive
US10528488B1 (en) 2017-03-30 2020-01-07 Pure Storage, Inc. Efficient name coding
US11016667B1 (en) 2017-04-05 2021-05-25 Pure Storage, Inc. Efficient mapping for LUNs in storage memory with holes in address space
US10141050B1 (en) 2017-04-27 2018-11-27 Pure Storage, Inc. Page writes for triple level cell flash memory
US10516645B1 (en) 2017-04-27 2019-12-24 Pure Storage, Inc. Address resolution broadcasting in a networked device
US10944671B2 (en) 2017-04-27 2021-03-09 Pure Storage, Inc. Efficient data forwarding in a networked device
RU2680350C2 (ru) * 2017-05-02 2019-02-19 федеральное государственное казенное военное образовательное учреждение высшего образования "Краснодарское высшее военное училище имени генерала армии С.М. Штеменко" Министерства обороны Российской Федерации Способ и система распределенного хранения восстанавливаемых данных с обеспечением целостности и конфиденциальности информации
US11467913B1 (en) 2017-06-07 2022-10-11 Pure Storage, Inc. Snapshots with crash consistency in a storage system
RU2675785C2 (ru) * 2017-06-08 2018-12-25 Общество с ограниченной ответственностью "КВАНТУМ А РУС" Способ уведомления абонента в сетях сотовой связи и устройство для его осуществления
US11138103B1 (en) 2017-06-11 2021-10-05 Pure Storage, Inc. Resiliency groups
US11947814B2 (en) 2017-06-11 2024-04-02 Pure Storage, Inc. Optimizing resiliency group formation stability
US11782625B2 (en) 2017-06-11 2023-10-10 Pure Storage, Inc. Heterogeneity supportive resiliency groups
US10425473B1 (en) 2017-07-03 2019-09-24 Pure Storage, Inc. Stateful connection reset in a storage cluster with a stateless load balancer
US10402266B1 (en) 2017-07-31 2019-09-03 Pure Storage, Inc. Redundant array of independent disks in a direct-mapped flash storage system
US10877827B2 (en) 2017-09-15 2020-12-29 Pure Storage, Inc. Read voltage optimization
US10210926B1 (en) 2017-09-15 2019-02-19 Pure Storage, Inc. Tracking of optimum read voltage thresholds in nand flash devices
US11024390B1 (en) 2017-10-31 2021-06-01 Pure Storage, Inc. Overlapping RAID groups
US10545687B1 (en) 2017-10-31 2020-01-28 Pure Storage, Inc. Data rebuild when changing erase block sizes during drive replacement
US10884919B2 (en) 2017-10-31 2021-01-05 Pure Storage, Inc. Memory management in a storage system
US10496330B1 (en) 2017-10-31 2019-12-03 Pure Storage, Inc. Using flash storage devices with different sized erase blocks
US10515701B1 (en) 2017-10-31 2019-12-24 Pure Storage, Inc. Overlapping raid groups
US10637508B2 (en) 2017-11-03 2020-04-28 Board Of Trustees Of Michigan State University Optimal construction of regenerating code through rate-matching
US10860475B1 (en) 2017-11-17 2020-12-08 Pure Storage, Inc. Hybrid flash translation layer
US10990566B1 (en) 2017-11-20 2021-04-27 Pure Storage, Inc. Persistent file locks in a storage system
US10929053B2 (en) 2017-12-08 2021-02-23 Pure Storage, Inc. Safe destructive actions on drives
US10719265B1 (en) 2017-12-08 2020-07-21 Pure Storage, Inc. Centralized, quorum-aware handling of device reservation requests in a storage system
US10929031B2 (en) 2017-12-21 2021-02-23 Pure Storage, Inc. Maximizing data reduction in a partially encrypted volume
US10976948B1 (en) 2018-01-31 2021-04-13 Pure Storage, Inc. Cluster expansion mechanism
US10467527B1 (en) 2018-01-31 2019-11-05 Pure Storage, Inc. Method and apparatus for artificial intelligence acceleration
US10733053B1 (en) 2018-01-31 2020-08-04 Pure Storage, Inc. Disaster recovery for high-bandwidth distributed archives
US11036596B1 (en) 2018-02-18 2021-06-15 Pure Storage, Inc. System for delaying acknowledgements on open NAND locations until durability has been confirmed
US11494109B1 (en) 2018-02-22 2022-11-08 Pure Storage, Inc. Erase block trimming for heterogenous flash memory storage devices
US11995336B2 (en) 2018-04-25 2024-05-28 Pure Storage, Inc. Bucket views
US10931450B1 (en) 2018-04-27 2021-02-23 Pure Storage, Inc. Distributed, lock-free 2-phase commit of secret shares using multiple stateless controllers
US11385792B2 (en) 2018-04-27 2022-07-12 Pure Storage, Inc. High availability controller pair transitioning
US10853146B1 (en) 2018-04-27 2020-12-01 Pure Storage, Inc. Efficient data forwarding in a networked device
US11436023B2 (en) 2018-05-31 2022-09-06 Pure Storage, Inc. Mechanism for updating host file system and flash translation layer based on underlying NAND technology
US10942807B2 (en) 2018-06-12 2021-03-09 Weka.IO Ltd. Storage system spanning multiple failure domains
US11438279B2 (en) 2018-07-23 2022-09-06 Pure Storage, Inc. Non-disruptive conversion of a clustered service from single-chassis to multi-chassis
US11500570B2 (en) 2018-09-06 2022-11-15 Pure Storage, Inc. Efficient relocation of data utilizing different programming modes
US11520514B2 (en) 2018-09-06 2022-12-06 Pure Storage, Inc. Optimized relocation of data based on data characteristics
US11868309B2 (en) 2018-09-06 2024-01-09 Pure Storage, Inc. Queue management for data relocation
US11354058B2 (en) 2018-09-06 2022-06-07 Pure Storage, Inc. Local relocation of data stored at a storage device of a storage system
US10936406B2 (en) * 2018-10-09 2021-03-02 EMC IP Holding Company LLC Multi cloud transactional storage for availability and security
US10454498B1 (en) 2018-10-18 2019-10-22 Pure Storage, Inc. Fully pipelined hardware engine design for fast and efficient inline lossless data compression
US10976947B2 (en) 2018-10-26 2021-04-13 Pure Storage, Inc. Dynamically selecting segment heights in a heterogeneous RAID group
US11334254B2 (en) 2019-03-29 2022-05-17 Pure Storage, Inc. Reliability based flash page sizing
US11775189B2 (en) 2019-04-03 2023-10-03 Pure Storage, Inc. Segment level heterogeneity
US11099986B2 (en) 2019-04-12 2021-08-24 Pure Storage, Inc. Efficient transfer of memory contents
US11714572B2 (en) 2019-06-19 2023-08-01 Pure Storage, Inc. Optimized data resiliency in a modular storage system
US11281394B2 (en) 2019-06-24 2022-03-22 Pure Storage, Inc. Replication across partitioning schemes in a distributed storage system
US11893126B2 (en) 2019-10-14 2024-02-06 Pure Storage, Inc. Data deletion for a multi-tenant environment
US11847331B2 (en) 2019-12-12 2023-12-19 Pure Storage, Inc. Budgeting open blocks of a storage unit based on power loss prevention
US11416144B2 (en) 2019-12-12 2022-08-16 Pure Storage, Inc. Dynamic use of segment or zone power loss protection in a flash device
US11704192B2 (en) 2019-12-12 2023-07-18 Pure Storage, Inc. Budgeting open blocks based on power loss protection
US11188432B2 (en) 2020-02-28 2021-11-30 Pure Storage, Inc. Data resiliency by partially deallocating data blocks of a storage device
US11507297B2 (en) 2020-04-15 2022-11-22 Pure Storage, Inc. Efficient management of optimal read levels for flash storage systems
US11256587B2 (en) 2020-04-17 2022-02-22 Pure Storage, Inc. Intelligent access to a storage device
US11474986B2 (en) 2020-04-24 2022-10-18 Pure Storage, Inc. Utilizing machine learning to streamline telemetry processing of storage media
US11416338B2 (en) 2020-04-24 2022-08-16 Pure Storage, Inc. Resiliency scheme to enhance storage performance
US11768763B2 (en) 2020-07-08 2023-09-26 Pure Storage, Inc. Flash secure erase
US11513974B2 (en) 2020-09-08 2022-11-29 Pure Storage, Inc. Using nonce to control erasure of data blocks of a multi-controller storage system
US11681448B2 (en) 2020-09-08 2023-06-20 Pure Storage, Inc. Multiple device IDs in a multi-fabric module storage system
US11216441B1 (en) 2020-11-25 2022-01-04 Coupang Corp. Systems and methods for managing a highly available and scalable distributed database in a cloud computing environment
US11487455B2 (en) 2020-12-17 2022-11-01 Pure Storage, Inc. Dynamic block allocation to optimize storage system performance
US11614880B2 (en) 2020-12-31 2023-03-28 Pure Storage, Inc. Storage system with selectable write paths
US11847324B2 (en) 2020-12-31 2023-12-19 Pure Storage, Inc. Optimizing resiliency groups for data regions of a storage system
US11630593B2 (en) 2021-03-12 2023-04-18 Pure Storage, Inc. Inline flash memory qualification in a storage system
US11507597B2 (en) 2021-03-31 2022-11-22 Pure Storage, Inc. Data replication to meet a recovery point objective
US11832410B2 (en) 2021-09-14 2023-11-28 Pure Storage, Inc. Mechanical energy absorbing bracket apparatus
US11994723B2 (en) 2021-12-30 2024-05-28 Pure Storage, Inc. Ribbon cable alignment apparatus

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6970939B2 (en) * 2000-10-26 2005-11-29 Intel Corporation Method and apparatus for large payload distribution in a network
US7146524B2 (en) * 2001-08-03 2006-12-05 Isilon Systems, Inc. Systems and methods for providing a distributed file system incorporating a virtual hot spare
US7159150B2 (en) * 2002-12-31 2007-01-02 International Business Machines Corporation Distributed storage system capable of restoring data in case of a storage failure
US7266716B2 (en) * 2003-10-23 2007-09-04 Hewlett-Packard Development Company, L.P. Method and recovery of data using erasure coded data from stripe blocks
US7155466B2 (en) * 2003-10-27 2006-12-26 Archivas, Inc. Policy-based management of a redundant array of independent nodes
US7302603B2 (en) * 2003-11-20 2007-11-27 International Business Machines Corporation Host-initiated data reconstruction for improved RAID read operations
US7201533B2 (en) * 2004-02-18 2007-04-10 Grate Sewer Lock Co., Llc Sewer grate locking mechanism and method of installing same
US7240236B2 (en) * 2004-03-23 2007-07-03 Archivas, Inc. Fixed content distributed data storage using permutation ring encoding
US7546342B2 (en) * 2004-05-14 2009-06-09 Microsoft Corporation Distributed hosting of web content using partial replication
US7734643B1 (en) * 2004-06-30 2010-06-08 Oracle America, Inc. Method for distributed storage of data
US7529198B2 (en) * 2005-04-07 2009-05-05 Microsoft Corporation Scalable overlay network
US7546427B2 (en) 2005-09-30 2009-06-09 Cleversafe, Inc. System for rebuilding dispersed data
JP4566874B2 (ja) * 2005-10-04 2010-10-20 株式会社日立製作所 Ipネットワークにおけるストレージアクセス管理機能及びシステム
US7778960B1 (en) * 2005-10-20 2010-08-17 American Megatrends, Inc. Background movement of data between nodes in a storage cluster
US7596673B2 (en) * 2005-12-08 2009-09-29 Sony Corporation Failure tolerant data storage
US20070177739A1 (en) * 2006-01-27 2007-08-02 Nec Laboratories America, Inc. Method and Apparatus for Distributed Data Replication
RU2006125251A (ru) * 2006-07-13 2008-01-27 Институт систем обработки изображений Российской академии наук (ИСОИ РАН) (RU) Устройство распределенного хранения изображений с регулируемой избыточностью
US7613946B2 (en) * 2006-09-14 2009-11-03 International Business Machines Corporation Apparatus, system, and method for recovering a multivolume data set
US7992037B2 (en) * 2008-09-11 2011-08-02 Nec Laboratories America, Inc. Scalable secondary storage systems and methods
US8627184B2 (en) * 2009-03-31 2014-01-07 Qualcomm Incorporated Systems and methods for protecting a multi-part broadcast control message

Also Published As

Publication number Publication date
BRPI1008072A2 (pt) 2016-03-15
CA2751358A1 (en) 2010-08-12
CA2751358C (en) 2016-06-07
WO2010091101A1 (en) 2010-08-12
KR20110122169A (ko) 2011-11-09
EP2394220A4 (en) 2013-02-20
US8522073B2 (en) 2013-08-27
RU2011136622A (ru) 2013-03-10
RU2501072C2 (ru) 2013-12-10
EP2394220A1 (en) 2011-12-14
EP2394220B1 (en) 2014-10-22
US20100199123A1 (en) 2010-08-05

Similar Documents

Publication Publication Date Title
ES2528245T3 (es) Almacenamiento distribuido de datos recuperables
US9710346B2 (en) Decoupled reliability groups
US10387249B2 (en) Migrating data slices within a dispersed storage network
US8386841B1 (en) Systems and methods for improving redundant storage fault tolerance
Papailiopoulos et al. Simple regenerating codes: Network coding for cloud storage
US10084857B2 (en) Dispersing data to biological memory systems
US8171102B2 (en) Smart access to a dispersed data storage network
CN109643258B (zh) 使用高速率最小存储再生擦除代码的多节点修复
CN104364765A (zh) 分布式数据存储系统中的数据存储和维护的方法以及对应设备
US20160147453A1 (en) Resolving write conflicts in a dispersed storage network
US20150127974A1 (en) Method of storing a data item in a distributed data storage system, corresponding storage device failure repair method and corresponding devices
US9104603B2 (en) Method of exact repair of pairs of failed storage nodes in a distributed data storage system and corresponding device
Datta et al. An overview of codes tailor-made for better repairability in networked distributed storage systems
Ivanichkina et al. Mathematical methods and models of improving data storage reliability including those based on finite field theory
US9552254B1 (en) Verification of erasure encoded fragments
US10534668B2 (en) Accessing data in a dispersed storage network
Li et al. Parallelizing degraded read for erasure coded cloud storage systems using collective communications
US8510625B1 (en) Multi-site data redundancy
KR101756136B1 (ko) 계층적 구조를 갖는 시스템의 정보 결함허용 방법
US9450617B2 (en) Distribution and replication of erasure codes
Liu et al. Systematic erasure codes with optimal repair bandwidth and storage
Madden et al. Provenance based rebuild: using data provenance to improve reliability
JP2005202458A (ja) ネットワークによる分散型の機密保持型データ保全方法
Xu et al. Towards optimisation of replicated erasure codes for efficient cooperative repair in cloud storage systems
Xu et al. A Reliable and Secure Cloud Storage Schema Using Multiple Service Providers.