El almacenamiento de objetos (también conocido como almacenamiento basado en objetos [1] o almacenamiento de blobs ) es un enfoque de almacenamiento de datos informáticos que administra los datos como "blobs" u "objetos", a diferencia de otras arquitecturas de almacenamiento como los sistemas de archivos , que administran los datos como una jerarquía de archivos, y el almacenamiento en bloques , que administra los datos como bloques dentro de sectores y pistas. [2] Cada objeto suele estar asociado con una cantidad variable de metadatos y un identificador único global . El almacenamiento de objetos se puede implementar en múltiples niveles, incluido el nivel del dispositivo (dispositivo de almacenamiento de objetos), el nivel del sistema y el nivel de interfaz. En cada caso, el almacenamiento de objetos busca habilitar capacidades que no abordan otras arquitecturas de almacenamiento, como interfaces que son directamente programables por la aplicación, un espacio de nombres que puede abarcar múltiples instancias de hardware físico y funciones de administración de datos como la replicación de datos y la distribución de datos en granularidad a nivel de objeto.
Los sistemas de almacenamiento de objetos permiten la retención de cantidades masivas de datos no estructurados en los que los datos se escriben una vez y se leen una vez (o muchas veces). [3] El almacenamiento de objetos se utiliza para fines tales como almacenar objetos como videos y fotos en Facebook , canciones en Spotify o archivos en servicios de colaboración en línea, como Dropbox . [4] Una de las limitaciones del almacenamiento de objetos es que no está destinado a datos transaccionales , ya que el almacenamiento de objetos no fue diseñado para reemplazar el acceso y el uso compartido de archivos NAS ; no admite los mecanismos de bloqueo y uso compartido necesarios para mantener una única versión actualizada con precisión de un archivo. [3]
Jim Starkey acuñó el término " blob " [ ¿cuándo? ] mientras trabajaba en Digital Equipment Corporation para referirse a entidades de datos opacas. La terminología fue adoptada para Rdb/VMS . "Blob" se explica a menudo con humor como una abreviatura de "objeto binario grande". Según Starkey, este acrónimo surgió cuando Terry McKiever, que trabajaba en marketing en Apollo Computer, sintió que el término debía ser una abreviatura. McKiever comenzó a usar la expansión "Objeto grande básico". Esto fue eclipsado más tarde por la explicación retroactiva de los blobs como "Objetos binarios grandes". Según Starkey, "Blob no significa nada". Rechazando el acrónimo, explicó su motivación detrás de la acuñación, diciendo: "Un blob es lo que se comió a Cincinnatti [ sic ], Cleveland, o lo que sea", refiriéndose a la película de ciencia ficción de 1958 The Blob . [5]
En 1995, la investigación dirigida por Garth Gibson sobre discos seguros conectados a la red promovió por primera vez el concepto de separar las operaciones menos comunes, como las manipulaciones de espacios de nombres, de las operaciones comunes, como las lecturas y escrituras, para optimizar el rendimiento y la escala de ambas. [6] En el mismo año, se estableció una empresa belga, FilePool, para construir la base de las funciones de archivo. El almacenamiento de objetos se propuso en el laboratorio de la Universidad Carnegie Mellon de Gibson como un proyecto de investigación en 1996. [7] Otro concepto clave fue abstraer las escrituras y lecturas de datos a contenedores de datos más flexibles (objetos). El control de acceso de grano fino a través de la arquitectura de almacenamiento de objetos [8] fue descrito con más detalle por uno de los miembros del equipo de NASD, Howard Gobioff, quien más tarde fue uno de los inventores del Sistema de archivos de Google . [9]
Otros trabajos relacionados incluyen el proyecto del sistema de archivos Coda en Carnegie Mellon , que comenzó en 1987 y generó el sistema de archivos Lustre . [10] También está el proyecto OceanStore en UC Berkeley, [11] que comenzó en 1999 [12] y el proyecto Logistical Networking en la Universidad de Tennessee Knoxville, que comenzó en 1998. [13] En 1999, Gibson fundó Panasas para comercializar los conceptos desarrollados por el equipo de NASD.
Seagate Technology desempeñó un papel central en el desarrollo del almacenamiento de objetos. Según la Asociación de la Industria de Redes de Almacenamiento (SNIA), "El almacenamiento de objetos se originó a fines de la década de 1990: las especificaciones de Seagate de 1999 introdujeron algunos de los primeros comandos y cómo el sistema operativo eliminó eficazmente el uso del almacenamiento". [14]
Seagate presentó una versión preliminar de la "Propuesta de conjunto de comandos de DISPOSITIVOS DE ALMACENAMIENTO BASADOS EN OBJETOS" con fecha del 25/10/1999, editada por Dave Anderson de Seagate, y fue el producto del trabajo del Consorcio Nacional de la Industria del Almacenamiento (NSIC), que incluyó contribuciones de la Universidad Carnegie Mellon , Seagate, IBM, Quantum y StorageTek. [15] Este documento fue propuesto a INCITS T-10 ( Comité Internacional de Estándares de Tecnología de la Información ) con el objetivo de formar un comité y diseñar una especificación basada en el protocolo de interfaz SCSI. Este definía los objetos como datos abstractos, con identificadores y metadatos únicos, cómo se relacionaban los objetos con los sistemas de archivos, junto con muchos otros conceptos innovadores. Anderson presentó muchas de estas ideas en la conferencia SNIA en octubre de 1999. La presentación reveló un Acuerdo de IP que se había firmado en febrero de 1997 entre los colaboradores originales (con Seagate representado por Anderson y Chris Malakapalli) y cubría los beneficios del almacenamiento de objetos, la computación escalable, la independencia de la plataforma y la gestión del almacenamiento. [16]
Uno de los principios de diseño del almacenamiento de objetos es abstraer algunas de las capas inferiores de almacenamiento de los administradores y las aplicaciones. De este modo, los datos se exponen y se gestionan como objetos en lugar de bloques o (exclusivamente) archivos. Los objetos contienen propiedades descriptivas adicionales que se pueden utilizar para una mejor indexación o gestión. Los administradores no tienen que realizar funciones de almacenamiento de nivel inferior, como construir y gestionar volúmenes lógicos para utilizar la capacidad del disco o configurar niveles RAID para hacer frente a fallos del disco.
El almacenamiento de objetos también permite el direccionamiento e identificación de objetos individuales por algo más que el nombre y la ruta del archivo. El almacenamiento de objetos agrega un identificador único dentro de un contenedor o en todo el sistema para admitir espacios de nombres mucho más grandes y eliminar colisiones de nombres.
El almacenamiento de objetos separa explícitamente los metadatos de los archivos de los datos para admitir capacidades adicionales. A diferencia de los metadatos fijos de los sistemas de archivos (nombre de archivo, fecha de creación, tipo, etc.), el almacenamiento de objetos proporciona metadatos personalizados y con todas las funciones a nivel de objeto para:
Además, en algunas implementaciones de sistemas de archivos basados en objetos:
Los dispositivos de almacenamiento basados en objetos ( OSD ), así como algunas implementaciones de software (por ejemplo, DataCore Swarm), administran metadatos y datos a nivel del dispositivo de almacenamiento:
El almacenamiento de objetos proporciona interfaces programáticas para permitir que las aplicaciones manipulen datos. En el nivel básico, esto incluye funciones de creación, lectura, actualización y eliminación ( CRUD ) para operaciones básicas de lectura, escritura y eliminación. Algunas implementaciones de almacenamiento de objetos van más allá y admiten funciones adicionales como control de versiones de objetos/archivos , replicación de objetos, gestión del ciclo de vida y movimiento de objetos entre diferentes niveles y tipos de almacenamiento. La mayoría de las implementaciones de API se basan en REST , lo que permite el uso de muchas llamadas HTTP estándar.
La gran mayoría de los servicios de almacenamiento en la nube disponibles en el mercado utilizan una arquitectura de almacenamiento de objetos. Algunos ejemplos notables son Amazon Web Services S3 , que debutó en marzo de 2006, Microsoft Azure Blob Storage, Rackspace Cloud Files (cuyo código se donó en 2010 al proyecto Openstack y se lanzó como OpenStack Swift ) y Google Cloud Storage, lanzado en mayo de 2010.
Algunos sistemas de archivos distribuidos utilizan una arquitectura basada en objetos, en la que los metadatos de los archivos se almacenan en servidores de metadatos y los datos de los archivos se almacenan en servidores de almacenamiento de objetos. El software cliente del sistema de archivos interactúa con los distintos servidores y los abstrae para presentar un sistema de archivos completo a los usuarios y las aplicaciones.
Algunas de las primeras encarnaciones del almacenamiento de objetos se utilizaron para archivar, ya que las implementaciones se optimizaron para servicios de datos como la inmutabilidad, no el rendimiento. EMC Centera y Hitachi HCP (antes conocido como HCAP) son dos productos de almacenamiento de objetos que se citan con frecuencia para archivar. Otro ejemplo es Quantum ActiveScale Object Storage Platform.
Alrededor de 2008, llegaron al mercado sistemas de almacenamiento de objetos de uso más general. Atraídos por el increíble crecimiento de los sistemas de almacenamiento "cautivos" dentro de aplicaciones web como Yahoo Mail y el éxito temprano del almacenamiento en la nube, los sistemas de almacenamiento de objetos prometían la escala y las capacidades del almacenamiento en la nube, con la capacidad de implementar el sistema dentro de una empresa o en un aspirante a proveedor de servicios de almacenamiento en la nube.
Algunos sistemas de almacenamiento de objetos admiten el almacenamiento unificado de archivos y objetos, lo que permite a los clientes almacenar objetos en un sistema de almacenamiento mientras que simultáneamente otros clientes almacenan archivos en el mismo sistema de almacenamiento. [17] Otros proveedores en el área de almacenamiento en nube híbrido están utilizando puertas de enlace de almacenamiento en nube para proporcionar una capa de acceso a archivos sobre el almacenamiento de objetos, implementando protocolos de acceso a archivos como SMB y NFS.
Algunas grandes empresas de Internet desarrollaron su propio software cuando los productos de almacenamiento de objetos no estaban disponibles comercialmente o los casos de uso eran muy específicos. Facebook inventó su propio software de almacenamiento de objetos, cuyo nombre en código era Haystack, para abordar de manera eficiente sus necesidades particulares de gestión masiva de fotografías. [18]
El almacenamiento de objetos en la capa de protocolo y dispositivo se propuso hace 20 años [ ambiguo ] y se aprobó para el conjunto de comandos SCSI hace casi 10 años [ ambiguo ] como "Comandos de dispositivo de almacenamiento basados en objetos" (OSD), [19] sin embargo, no se había puesto en producción hasta el desarrollo de la plataforma Seagate Kinetic Open Storage. [20] [21] El conjunto de comandos SCSI para dispositivos de almacenamiento de objetos fue desarrollado por un grupo de trabajo de la SNIA para el comité T10 del Comité Internacional de Estándares de Tecnología de la Información (INCITS). [22] T10 es responsable de todos los estándares SCSI.
Uno de los primeros productos de almacenamiento de objetos, Lustre , se utiliza en el 70% de las 100 supercomputadoras más importantes y en aproximadamente el 50% de las 500 más importantes . [23] Al 16 de junio de 2013, esto incluye 7 de las 10 más importantes, incluido el cuarto sistema más rápido actual de la lista: el Tianhe-2 de China y el séptimo más rápido, la supercomputadora Titan en el Laboratorio Nacional de Oak Ridge . [24]
Los sistemas de almacenamiento de objetos tuvieron una buena adopción a principios de la década de 2000 como plataforma de archivo, particularmente a raíz de leyes de cumplimiento como Sarbanes-Oxley . Después de cinco años en el mercado, el producto Centera de EMC afirmó tener más de 3500 clientes y 150 petabytes enviados en 2007. [25] El producto HCP de Hitachi también afirma tener muchos clientes a escala de petabytes . [26] Los sistemas de almacenamiento de objetos más nuevos también han ganado algo de tracción, particularmente en torno a aplicaciones personalizadas muy grandes como el sitio de subastas de eBay, donde se utiliza EMC Atmos para administrar más de 500 millones de objetos al día. [27] Al 3 de marzo de 2014, EMC afirma haber vendido más de 1,5 exabytes de almacenamiento Atmos. [28] El 1 de julio de 2014, Los Alamos National Lab eligió Scality RING como base para un entorno de almacenamiento de 500 petabytes, que estaría entre los más grandes de la historia. [29]
Los sistemas de almacenamiento de objetos "cautivos" como Haystack de Facebook han crecido de forma impresionante. En abril de 2009, Haystack gestionaba 60.000 millones de fotos y 1,5 petabytes de almacenamiento, añadiendo 220 millones de fotos y 25 terabytes por semana. [18] Facebook declaró más recientemente que estaban añadiendo 350 millones de fotos al día y almacenando 240.000 millones de fotos. [30] Esto podría equivaler a 357 petabytes. [31]
El almacenamiento en la nube se ha vuelto omnipresente, ya que muchas nuevas aplicaciones web y móviles lo eligen como una forma común de almacenar datos binarios . [32] Como back-end de almacenamiento para muchas aplicaciones populares como Smugmug y Dropbox , Amazon S3 ha crecido a escala masiva, citando más de 2 billones de objetos almacenados en abril de 2013. [33] Dos meses después, Microsoft afirmó que almacenaban incluso más objetos en Azure con 8,5 billones. [34] Para abril de 2014, Azure afirmó tener más de 20 billones de objetos almacenados. [35] Windows Azure Storage administra Blobs (archivos de usuario), Tablas (almacenamiento estructurado) y Colas (entrega de mensajes) y los cuenta todos como objetos. [36]
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 ascenso para convertirse en un líder o mantener su liderazgo. Las evaluaciones MarketScape de IDC son particularmente útiles en los mercados emergentes que a menudo están fragmentados, tienen varios participantes y carecen de líderes claros". [37]
En 2019, IDC calificó a Dell EMC , Hitachi Data Systems , IBM , NetApp y Scality como líderes.
En la primera versión del estándar OSD, [38] 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 las particiones o los objetos; se les permite crecer sujetos a limitaciones de tamaño físico del dispositivo o restricciones de cuota lógicas en una partición.
Un conjunto extensible de atributos describe los objetos. Algunos atributos son implementados directamente por el OSD, como la cantidad de bytes en un objeto y el tiempo de modificación de un objeto. Hay un atributo de etiqueta de política especial que forma parte del mecanismo de seguridad. El OSD no interpreta otros atributos. Estos son establecidos en los objetos por los sistemas de almacenamiento de nivel superior que utilizan el OSD para el almacenamiento persistente. Por ejemplo, los atributos se pueden utilizar para clasificar objetos o para capturar relaciones entre diferentes objetos almacenados en diferentes OSD.
Un comando de lista devuelve una lista de identificadores de objetos dentro de una partición, opcionalmente filtrados por coincidencias con sus valores de atributo. Un comando de lista también puede devolver atributos seleccionados de los objetos enumerados.
Los comandos de lectura y escritura se pueden combinar o combinar con comandos para obtener y establecer atributos. Esta capacidad reduce la cantidad de veces que un sistema de almacenamiento de alto nivel debe cruzar la interfaz hacia el OSD, lo que puede mejorar la eficiencia general.
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 manejo de errores mejorado. [39]
Una instantánea es una copia puntual de todos los objetos de una partición en una nueva partición. El OSD puede implementar una copia que ahorra espacio utilizando técnicas de copia en escritura para que las dos particiones compartan objetos que no se modifican entre las instantáneas, o el OSD puede copiar físicamente los datos a la nueva partición. El estándar define clones, que se pueden escribir, e instantáneas, que son de solo lectura.
Una colección es un tipo especial de objeto que contiene los identificadores de otros objetos. Existen operaciones para agregar y eliminar elementos de las colecciones, y existen operaciones para obtener o establecer atributos para todos los objetos de una colección. Las colecciones también se utilizan para informar errores. Si un objeto se daña debido a la ocurrencia de un defecto en el medio (es decir, un punto 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 el OSD puede consultar esta colección y tomar las medidas correctivas necesarias.
La frontera entre un almacén de objetos y un almacén de clave-valor es borrosa, y a los almacenes de clave-valor a veces se los denomina vagamente almacenes de objetos.
Una interfaz de almacenamiento en bloques tradicional utiliza una serie de bloques de tamaño fijo que se numeran a partir del 0. Los datos deben tener exactamente ese tamaño fijo y pueden almacenarse en un bloque particular que se identifica por su número de bloque lógico (LBN). Más tarde, se puede recuperar ese bloque de datos especificando su LBN único.
En un almacén de clave-valor, los datos se identifican mediante una clave en lugar de un LBN. Una clave puede ser "cat", "olive" o "42". Puede ser una secuencia arbitraria de bytes de longitud arbitraria. Los datos (llamados valor en este lenguaje) no necesitan tener un tamaño fijo y también pueden ser una secuencia arbitraria de bytes de longitud arbitraria. Los datos se almacenan presentando la clave y los datos (valor) al almacén de datos y luego se pueden recuperar 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 clave-valor como Memcached, Redis y CouchDB.
Los almacenes de objetos son similares a los almacenes de clave-valor en dos aspectos. En primer lugar, el identificador del objeto o URL (el equivalente de la clave) puede ser una cadena arbitraria. [40] En segundo lugar, los datos pueden tener un tamaño arbitrario.
Sin embargo, existen algunas diferencias clave entre los almacenes de 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 pieza de datos. La combinación de una clave, un valor y un 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 clave-valor se espera que el valor sea relativamente pequeño (kilobytes). Por último, los almacenes de objetos suelen ofrecer garantías de consistencia más débiles, como la consistencia eventual , mientras que los almacenes de clave-valor ofrecen una consistencia fuerte .
El almacenamiento de objetos puede funcionar bien para datos no estructurados en los que los datos se escriben una vez y se leen una vez (o muchas veces). El contenido estático en línea, las copias de seguridad de datos, los archivos de imágenes, los vídeos, las fotografías y los archivos de música se pueden almacenar como objetos.