# Almacenamiento de objetos (informática)

El almacenamiento de objeto (también conocido como almacenamiento basado en objetos) es una arquitectura de almacenamiento de dato que maneja los datos como objetos, al contrario que otras arquitecturas de almacenamiento como los sistemas de archivo, que manejan datos como una jerarquía de archivos, y como el almacenamiento de bloque, que maneja datos como bloques dentro de sectores y pistas. Normalmente cada objeto incluye el propio dato, una cantidad variable de metadatos, y un identificador global único. El almacenamiento de objetos puede ser implementado en múltiples niveles, incluyendo el nivel de dispositivo (dispositivo de almacenamiento de objetos), el nivel de sistema, y el nivel de interfaz. En cada caso, el almacenamiento de objetos busca habilitar las capacidades no cubiertas por otras arquitecturas de almacenamiento, como interfaces que pueden ser programadas directamente por la aplicación, un espacio de nombres que puede abarcar múltiples instancias de hardware físico, funciones de administración de datos como el manejo de la respuesta de los datos y la distribución de datos a un nivel más detallado para cada objeto.
El almacenamiento de objetos se utiliza para propósitos como almacenar fotos en Facebook, canciones en Spotify, o archivos en servicios de colaboración en línea, como Dropbox.

## Historia
### Orígenes

En 1995, la búsqueda dirigida por Garth Gibson en Network-Attached Secure Disks fue la primera en promover el concepto de división en un número menor de operaciones comunes, como en la manipulación del espacio de nombres, que hace uso de operaciones comunes como la lectura y la escritura, para optimizar el rendimiento y escala de ambos. En el mismo año, 1995, una compañía belga - FilePool - se estableció para construir las bases de las funciones de almacenamiento. El almacenamiento de objetos fue propuesto por el laboratorio de la universidad de Carnegie Mellon como proyecto de investigación en 1996. Otro concepto clave fue la abstracción de la lectura y la escritura de datos para dar lugar a contenedores de datos más flexibles (objetos). El control de acceso a través de la arquitectura de almacenamiento del objetos fue definido más detalladamente por un miembro del equipo del NASD, Howard Gobioff, quién más tarde fue uno de los inventores del Sistema de Archivo del Google. Otro trabajo relacionado es el proyecto de sistema de archivos Coda, que se realizó nuevamente en Carnegie Mellon, el cual empezó en 1987 y engendró el sistema de archivos ¨Lustre¨. Otro proyecto relacionado es el OceanStore, realizado en la UC Berkeley y que dio comienzo en 1999.
Centera se presentó en 2002. La tecnología de almacenamiento de contenido direccionable fue desarrollado en Filepool y adquirida por la empresa EMC en 2001.

### Desarrollo

De 1999 a 2013, al menos 300 millones de dólares de financiación de riesgo estuvieron relacionados con el almacenamiento de objetos, incluyendo vendedores como SwiftStack, Amplidata, Bycast, Cleversafe, Cloudian, Nirvanix, y Scality. Esto no incluye ingeniería desarrollada por vendedores de sistemas como DataDirect Networks (WOS), EMC de Dell, Centera, Atmos, HDS (Hitachi Content Platform (HCP)), IBM, NetApp (StorageGRID), Redhat GlusterFS, vendedores de servicios en la nube como Amazon (AWS S3 en 2006), Microsoft (Microsoft Azure), Oracle (Nube de Oracle) y Google (Almacenamiento en la nube de Google en 2010), o desarrollo de software libre en Lustre, OpenStack (Veloz), MogileFS, Ceph y OpenIO. Existe un artículo que ilustra los productos que fueron publicados en julio de 2016.

## Arquitectura
### Abstracción del almacenamiento

Uno de los principios del diseño de almacenamiento de objetos es abstraer algunas de las capas más bajas de este almacenamiento fuera de los administradores y de las aplicaciones. Así, los datos son expuestos y tratados como objetos en vez de como archivos o bloques. Los objetos contienen propiedades descriptivas adicionales que pueden ser utilizadas para una mejor administración o indexación. Los administradores no tienen que actuar sobre funciones de almacenamiento de bajo nivel, como la construcción y la gestión de volúmenes lógicos para hacer uso de la capacidad del disco o la edición de los niveles de REDADA para tratar los fallos del disco.
El almacenamiento de objetos también permite el direccionamiento y la identificación de objetos individuales por más medios que el nombre de archivo o su ruta. El almacenamiento de objetos añade un identificador único dentro de cada agrupación (bucket), o a través del sistema entero, para soportar espacios de nombres mucho más grandes y eliminar las colisiones en los nombres.

### Inclusión de metadatos personalizados dentro del objeto

Almacenamiento de objeto separa explícitamente los metadatos de los archivos de los datos para incluir prestaciones adicionales. A diferencia de los metadatos fijos de los sistemas de archivos (nombre del archivo, fecha de creación, tipo, etc.), el almacenamiento de objetos proporciona para una funcionalidad completa, personalizable, cuyos metadatos están a nivel de objeto con el fin de:
* Capturar la información específica de usuario o de la aplicación para mejorar los objetivos de la indexación
* Dar apoyo a las políticas de administración de los datos (p. ej. una política para manejar el movimiento de un objeto desde un nivel de almacenamiento a otro)
* Centralizar la administración de almacenamiento a través de muchos grupos y nodos individuales
* Optimizar el almacenamiento de los metadatos (p. ej. encapsulamiento, base de datos o almacenamiento por clave-valor) y el cacheo/indexación (cuando los metadatos de autorización son encapsulados con el resto de metadatos dentro del objeto) independientemente del tipo de almacenamiento de los datos (p. ej. almacenamiento binario no estructurado)
Además, en algunas implementaciones de sistemas de archivos basados en objetos:
* Los clientes del sistema de archivos solo contactan con los servidores de los metadatos una vez el archivo está abierto para obtener el contenido directamente mediante servidores de almacenamiento de objetos (en conntraposición a los sistemas de archivos basados en bloques, que requieren un acceso constante a los metadatos)
* Los objetos de datos pueden ser configurados para cada archivo para permitir un ancho de banda adaptable, incluso a través de múltiples servidores de almacenamiento de objetos, soportando la optimización del ancho de banda y de la entrada/salida
Dispositivos de almacenamiento basados en objetos (OSD) así como algunas implementaciones de software (p. ej., Caringo Swarm) tratan los metadatos y los datos a nivel de dispositivo del almacenamiento:
* En vez de proporcionar una interfaz orientada a bloques que lee y escribe bloques de datos de tamaño fijo, el dato está organizado en contenedores de datos de tamaño variable, llamados objetos
* Cada objeto tiene datos (una secuencia de bytes sin interpretar) y metadatos (un conjunto extensible de los atributos que describen el objeto); físicamente encapsulados para la recuperación de ambos.
* La interfaz de comandos incluye órdenes para crear y eliminar objetos, escribir y leer bytes de objetos individuales, y para editar y adquirir los atributos de los objetos
* Existen mecanismos de seguridad que proporcionan control de acceso para cada objeto y para cada comando

### Administración programable de datos

El almacenamiento de objetos proporciona interfaces programables que permiten a otras aplicaciones manipular los datos. En el nivel básico, esto incluye las funciones de creado, lectura, actualización y eliminación (CRUD), para la realización de operaciones básicas de lectura, escritura y eliminación. Algunas implementaciones de almacenamiento del objetos van más allá, apoyando funcionalidades adicionales como el versionamiento, la replicación, la administración del ciclo de vida y el movimiento de objetos entre diferentes niveles y tipos de almacenamiento. La mayoría de implementaciones de las APIs están basadas en RESTO, permitiendo el uso de muchas llamadas HTTP estándar.

## Implementación
### Dispositivos de almacenamiento basados en objetos

La proposición del almacenamiento de objetos dentro del protocolo y de la capa del dispositivo fue hace 20 años y fue aprobada para el estándar SCSI establecido por Seagate en 2007 bajo el nombre de "Órdenes de Dispositivos de Almacenamiento basadas en objetos" (OSD, por sus siglas en inglés), pero no fue producido hasta el desarrollo de la plataforma de Almacenamiento Abierto Seagate Kinetic. El estándar SCSI para Dispositivos de Almacenamiento de Objetos fue desarrollado por un grupo de trabajo de la Asociación de la Industria de las Redes de Almacenamiento (SNIA) para el comité T10 del Comité Internacional para Estándares de Tecnología de la Información (INCITS). El T10 es responsable de todos los estándares SCSI.

### Sistemas de archivos basados en objetos

Algunos sistemas de archivos distribuidos utilizan una arquitectura basada en objetos, donde los metadatos del archivo están almacenados en servidores de metadatos y los datos del archivo están almacenados en servidores de almacenamiento de objetos. El servicio del cliente del sistema de archivos interactúa con los distintos servidores y los abstrae para presentar un sistema de archivos completo a usuarios y aplicaciones. IBM Spectrum Scale (también sabido como GPFS), EMC de Dell, Ceph, XtreemFS, y Lustre son ejemplos de este tipo de almacenamiento de objetos.

### Almacenamiento de archivos

Algunas implementaciones prematuras del almacenamiento de objetos fueron utilizadas para el archivado de estos, ya que las implementaciones estaban optimizadas para servicios de datos como la inmutabilidad de estos y no para el rendimiento. EMC Centera Y Hitachi HCP (anteriormente conocido como HCAP) son dos objetos generalmente etiquetados como productos de almacenamiento de archivos. Otro ejemplo es la plataforma de almacenamiento de objetos Quantum Lattus Archivado el 27 de diciembre de 2018 en Wayback Machine..

### Almacenamiento en la nube

La mayoría del almacenamiento en la nube disponible en el mercado hace uso de una arquitectura de almacenamiento de objetos. Algunos los ejemplos notables son Amazon Web Services S3, el cual salió al mercado en marzo de 2006, Rackspace Files (cuyo código fue donado en 2010 al proyecto Openstack y anunciado como OpenStack Swift) y el Almacenamiento en la Nube del Google, que fue lanzado en mayo de 2010.

### Almacenamiento de objetos "cautivo"

Algunas grandes compañías de Internet desarrollaron su propio software cuando los productos de almacenamiento de objetos no estaban disponibles comercialmente o en casos para usos muy concretos. Facebook inventó su propio software de almacenamiento de objetos, bajo el nombre en clave de Haystack, para satisfacer sus necesidades particulares de administración de fotos a gran escala de una manera eficiente.

### Almacenamiento híbrido

Unos cuantos sistemas de almacenamiento de objetos, como Ceph, GlusterFS, Cloudian, IBM Spectrum Scale, y Scality hacen uso del almacenamiento de Objetos y Archivos Unificados (UFO, por sus siglas en inglés), permitiendo a algunos clientes guardar objetos en un sistema de almacenamiento mientras, simultáneamente, otros clientes guardan archivos en el mismo sistema de almacenamiento. Mientras que el "almacenamiento híbrido" no es concepto ampliamente aceptado, las interfaces interoperables en el mismo conjunto de datos están disponibles en algunos productos de almacenamiento de objetos.

### Almacenamiento de objetos virtuales

Además de los sistemas de almacenamiento de objetos que poseen los archivos administrados, algunos sistemas proporcionan una abstracción de los objetos sobre una o más soluciones basadas en los sistemas de archivos tradicionales. Estas soluciones no tienen almacenamiento bruto fundamental (underlying raw storage), pero en su lugar, refleja activamente los cambios del sistema de archivos y los replica en su propio catálogo de objetos, junto con los metadatos que se puedan extraer automáticamente de los archivos. Los usuarios pueden contribuir con metadatos adicionales a través de las APIs del almacenamiento de objetos virtuales. Las capacidades globales del espacio de nombres y de la replicación, tanto dentro como a través de los sistemas de archivos, son generalmente compatibles.
Algunos ejemplos notables en esta categoría son Nirvana, y su primo de código abierta iRODS.
La mayoría de productos de esta categoría han ampliado recientemente sus prestaciones para soportar soluciones de almacenamiento de objetos.

### Sistemas de almacenamiento de objetos

Alrededor de 2008 salieron al mercado más sistemas de almacenamiento de objetos de propósito general. Atraídos por el increíble crecimiento de los sistemas de almacenamiento "cautivos" dentro de aplicaciones web como Yahoo Mail, y el éxito inicial del almacenamiento en la nube, los sistemas de almacenamiento de objetos prometieron la escala y las capacidades del almacenamiento en la nube, con la capacidad de implementar el sistema dentro de una empresa, o de ser un posible proveedor de servicios de almacenamiento en la nube..Ejemplos destacados de sistemas de almacenamiento de objetos son Western Digital ActiveScale (anteriormente Amplidata), NetApp StorageGRID, EMC Atmos, OpenStack Swift, Scality RING, Caringo Swarm (anteriormente CAStor), Cloudian, OpenIO y Minio.

## Aprobación del mercado

Uno de los primeros sistemas de almacenamiento de objetos, Lustre, es utilizado en 70% de los 100 mejores superordenadores y en el 50% de los 500 mejores. A 16 de junio de 2013, se incluían 7 de los 10 mejores, teniendo el cuarto sistema actual más rápido de la lista, el Tianhe-2 de China, y el séptimo más rápido, el superordenador Titan en el Laboratorio Nacional de Oak Ridge.
Los sistemas de almacenamiento de objetos tuvieron una buena adopción a principios de la década de 2000 como plataforma de almacenado, particularmente a raíz del cumplimiento de leyes como Sarbanes-Oxley. Después de cinco años en el mercado, el producto Centera de EMC reclamó más de 3,500 clientes y 150 petabytes enviados en 2007. El producto Hitachi HCP también reclamó muchos petabytes de sus clientes. Los sistemas de almacenamiento de objetos más nuevos también han logrado cierto empuje, en particular alrededor de aplicaciones personalizadas muy grandes como el sitio web de subastas de eBay, donde se hace uso de EMC Atmos para administrar más de 500 millones de objetos por día. A partir del 3 de marzo de 2014, EMC afirma haber vendido más de 1.5 hexabytes de almacenamiento de Atmos. El 1 de julio de 2014, el laboratorio nacional de Los Álamos escogió Scality RING como base para un entorno de almacenamiento de 500 petabytes, que estaría entre los más grandes de la historia.
Los sistemas de almacenamiento de objetos "cautivos", como el Haystack de Facebook, han escalado de manera impresionante. En abril de 2009, Haystack estaba administrando 60 mil millones de fotos y 1,5 petabytes de almacenamiento, añadiendo 220 millones de fotos y 25 terabytes a la semana. Facebook declaró recientemente que estaban añadiendo 350 millones de fotos al día y que estaban almacenando 240 mil millones de fotos. Esto podría equivaler a 357 petabytes.
El almacenamiento en la nube se ha generalizado a medida que muchas aplicaciones web y móviles nuevas lo eligen como una forma común de almacenar los datos binarios. Como el backend de almacenamiento de muchas aplicaciones populares como Smugmug y Dropbox, AWS S3 ha crecido a una escala masiva, citando más de 2 billones de objetos almacenados en abril de 2013. Dos meses más tarde, Microsoft afirmó que almacenaron aún más objetos en Azure, con 8,5 billones. En abril de 2014, Azure reclamó más de 20 billones de objetos almacenaron. El almacenamiento de Microsoft Azure administra los blobs (archivos de usuario), las tablas (almacenamiento estructurado), y las colas (entrega de mensajes) y les cuenta todo como objetos.

## Análisis de mercado

IDC ha comenzado a evaluar anualmente el mercado de almacenamiento basado en objetos utilizando su metodología MarketScape. IDC describe MarketScape como: "... una evaluación cuantitativa y cualitativa de las características que evalúan el éxito actual y futuro de un proveedor en dicho mercado o segmento de mercado y proporcionan una medida de su mejora a la hora de convertirse en líder del mercado o de mantener un liderazgo. Las evaluaciones de IDC MarketScape son particularmente útiles en los mercados emergentes que a menudo están fragmentados, tienen varios actores y carecen de líderes claros ".
En 2013, IDC valoró Cleversafe, Scality, DataDirect Networks, Amplidata, y EMC como dirigentes. En 2014, se valora Scality, Cleversafe, DataDirect Networks, Hitachi Data Systems, Amplidata, EMC, y Cloudian como dirigentes.

## Estándares
### Estándares de dispositivos de almacenamiento basados en objetos
#### OSD versión 1

En la primera versión del estándar OSD, los objetos se especifican con un ID de partición de 64 bits y un ID de objeto de 64 bits. Las particiones se crean y eliminan dentro de un OSD, y los objetos se crean y eliminan dentro de las particiones. No hay tamaños fijos asociados con particiones u objetos; se les permite crecer sujetos a las limitaciones del tamaño físico del dispositivo o a las restricciones de la cuota lógica de una partición.
Un conjunto extensible de atributos describe objetos. Algunos atributos son implementados directamente por el OSD, como el número de bytes en un objeto y el tiempo de modificación de un objeto. Existe una etiqueta especial sobre la política que forma parte del mecanismo de seguridad. Otros atributos no son interpretados por el OSD. Los sistemas de almacenamiento de nivel superior que utilizan la OSD para el almacenamiento persistente los agrupan en objetos. Por ejemplo, los atributos pueden usarse para clasificar objetos o para capturar relaciones entre diferentes objetos almacenados en diferentes OSD.
Un comando ¨lista¨ devuelve una lista de identificadores para objetos dentro de una partición, opcionalmente filtrada por coincidencias sobre los valores de sus atributo. Un comando ¨lista¨ también puede devolver atributos seleccionados de los objetos de la lista.
Los comandos de lectura y escritura pueden combinarse, o complementarse, con comandos para obtener y establecer atributos. Esta capacidad reduce la cantidad de veces que un sistema de almacenamiento de alto nivel tiene que pasar desde la interfaz a la OSD, lo que puede mejorar la eficiencia general.

#### OSD versión 2

Una segunda generación del conjunto de comandos SCSI, "Dispositivos de almacenamiento basados en objetos - 2" (OSD-2) agregó soporte para instantáneas, colecciones de objetos y para un mejor manejo de los errores.
Una instantánea es una copia puntual todos los objetos de una partición en una partición nueva. El OSD puede implementar una copia eficiente en cuanto al espacio utilizando técnicas de copia en escritura para que las dos particiones compartan objetos que no cambian entre las instantáneas, o para que el OSD pueda copiar físicamente los datos a la nueva partición. El estándar define los clones, que se pueden escribir sobre ellos, y las instantáneas, que son de solo lectura.
Una colección es un tipo especial de objeto que contiene los identificadores de otros objetos. Hay operaciones para agregar y eliminar objetos de las colecciones, y hay operaciones para obtener o establecer atributos para todos los objetos en una colección. Las colecciones también se utilizan para informar de errores. Si un objeto se daña por la aparición de un defecto de los medios (por ejemplo, al situarse en un lugar defectuoso en el disco) o por un error de software dentro de la implementación del OSD, su identificador se coloca en una colección de errores especial. El sistema de almacenamiento de nivel superior que utiliza la OSD puede consultar esta colección y tomar las medidas correctivas que sean necesarias.

## Diferencias entre almacenes de pares clave-valor y de objetos

Desafortunadamente, el borde entre un almacén de objetos y un almacén de pares clave-valor es borroso, y los almacenes de pares clave-valor a veces se denominan de forma flexible como almacenes de objetos.
Una interfaz de almacenamiento de bloques tradicional utiliza una serie de bloques de tamaño fijo que se numeran a partir de 0. Los datos deben tener ese tamaño fijo exacto y se pueden almacenar en un bloque particular que se identifica por su número de bloque lógico (LBN). Más tarde, uno puede recuperar ese bloque de datos especificando su LBN único.
Con un almacén de pares clave-valor, los datos se identifican mediante una clave en lugar de una LBN. Una clave puede ser "gato" u "oliva" ó "42". Puede ser una secuencia arbitraria de bytes de longitud arbitraria. Los datos (llamados valor en este lenguaje) no necesitan ser de un tamaño fijo y también pueden ser una secuencia arbitraria de bytes de longitud arbitraria. Uno almacena los datos presentando la clave y los datos (valor) en el almacén de datos y luego puede recuperar los datos presentando la clave. Este concepto se ve en los lenguajes de programación. Python los llama diccionarios, Perl los llama hashes, Java y C ++ los llaman mapas, etc. Varios almacenes de datos también implementan almacenes de pares clave-valor como Memcached, Redis y CouchDB.
Los almacenes de objetos son similares a los almacenes de pares clave-valor en dos aspectos. Primero, el identificador de objeto o URL (el equivalente de la clave) puede ser una cadena arbitraria. Segundo, el dato puede ser de un tamaño arbitrario.
Sin embargo, existen algunas diferencias clave entre los almacenes de pares clave-valor y los almacenes de objetos. En primer lugar, los almacenes de objetos también permiten asociar un conjunto limitado de atributos (metadatos) con cada dato. La combinación de una clave, valor y conjunto de atributos se conoce como un objeto. En segundo lugar, los almacenes de objetos están optimizados para grandes cantidades de datos (cientos de megabytes o incluso gigabytes), mientras que para los almacenes de pares clave-valor se espera que el valor sea relativamente pequeño (kilobytes). Finalmente, los almacenes de objetos normalmente ofrecen garantías de consistencia más débiles, como consistencia eventual, mientras que los almacenes de pares clave-valor ofrecen una consistencia sólidae.