Вы находитесь на странице: 1из 5

Needle in a haystack: Eficiente almacenamiento de billones de Fotos

La aplicacin de fotos de Facebook es una de las mas populares. Cada dia los
usuarios suben mas de 15 billones de fotos haciendo de Facebook las mas grande
web de compartimiento de fotos.
Por cada foto subida facebokk genera y almacena 4 imgenes de diferentes
dimensiones que hace un total de 60 billones de imgenes y un total de 1.5 PB de
almacenamiento. El actual crecimiento es de 220 millones de nuevas fotos
aproximadamente por semana, adems de 25 TB adicional de almacenamiento
consumido por semana aproximadamente. Se llega a un pico de 550,000 imgenes
por segundo. Ese nmero planteo un cambio de infraestructura de almacenamiento
de Facebook.
Infraestructura NFS
Cada imagen es almacenada en su propio archivo, hay un enorme metadata
generada en el almacenamiento.
La cantidad de metadatos es muy superior a la capacidad de almacenamiento en
cach de la capa de almacenamiento NFS, dando lugar a mltiples operaciones I / O
por subir las fotos o leer peticin.
Toda la infraestructura de la foto que se sirve es un cuello de botella en los altos
metadatos del nivel de almacenamiento NFS, esa es una de las razones por las que
Facebook se basa en gran medida en las CDN para servir a las fotos. Dos
optimizaciones adicionales fueron desplegados con el fin de mitigar este problema
en cierta medida:
Cachr: un cach nivel servidor de almacenamiento en cach de imgenes con
"perfil" ms pequeos.
NFS file handle cache: Desplegado en el nivel de la foto que sirve para eliminar
algunos de los metadatos de almacenamiento NFS nivel overhead.
Infraestructura HayStack
La nueva infraestructura mezcla las fotos nivel dentro de un nivel fsico. Esto
implementa en base a a un servicio HTTP que almacena las fotos en objetos
llamados Haystack. El principal requerimiento para el nuevo nivel fue eliminar
alguna innecesaria metadata overhead para lectura de operaciones, de manera
que cada lectura y operacin I / O slo estaba leyendo los datos reales de las fotos
(en vez de los metadatos del sistema de ficheros).

Server HTTP
Photo Store
HayStack Object Store
Filesystem
Storage

Almacenamiento
La configuracin de hardware tpico (HayStack) de un blade de almacenamiento 2U
es:

2 x quad-core CPUs

16GB 32GB memory

hardware raid controller with 256MB 512MB of NVRAM cache

12+ 1TB SATA drives

Cada blade de almacenamiento proporciona alrededor de 10 TB de espacio


utilizable, configurado como una particin RAID-6 gestionado por el controlador
RAID de hardware. RAID-6 proporciona redundancia adecuada y excelente
rendimiento de lectura mientras se mantiene el costo de almacenamiento bajo. El
bajo rendimiento de escritura es parcialmente mitigado por el cach de escritura no
simultnea RAID controlador NVRAM. Dado que las lecturas son en su mayora al
azar, la memoria cach NVRAM est completamente reservado para las escrituras.
Los cachs de disco se desactivan con el fin de garantizar la coherencia de los datos
en caso de un accidente o de una prdida de potencia.

Sistema de archivos
Almacenes de objetos Haystack se implementan en la parte superior de los archivos
almacenados en un nico sistema de archivos creado en la parte superior del
volumen con 10 TB de espacio.
Las Solicitudes de lectura de fotos resultan en las llamadas al sistema en
desplazamientos conocidos en estos archivos, pero con el fin de ejecutar la lectura,
el sistema de archivos debe primero encontrar los datos sobre el volumen fsico
real. Cada archivo en el sistema de archivos est representado por una estructura
llamada un inodo que contiene un mapa de bloques que se asigna el
desplazamiento para el desplazamiento en el volumen fsico de bloque fsico de
archivo lgico. Para archivos de gran tamao, el mapa de bloques puede ser
bastante grande, dependiendo del tipo de sistema de archivos en uso.
Sistemas de archivos bloquean y mantienen las asignaciones para cada bloque
lgico, y para archivos de gran tamao, esta informacin no suele encajar en el
inodo en cach y se almacenan en bloques de direcciones de escalas en su lugar,
que hay que atravesar para poder leer los datos de un archivo. Puede haber varias
capas de direccionamiento indirecto, por lo que una sola lectura podra dar lugar a
varias entradas / salidas en funcin de si o no los bloques de direcciones indirectas
se almacenan en cach.

Sistemas de archivos basados en extensin mantienen asignaciones slo para


rangos contiguos de bloques (extents). Un mapa de bloques para un archivo grande
contigua podra consistir en una sola medida que encajara en el mismo inodo. Sin
embargo, si el archivo esta muy fragmentado y sus bloques no son contiguos en el
volumen subyacente, su mapa de bloques puede crecer bastante grande tambin.
Con los sistemas de ficheros basados en medida, la fragmentacin puede ser
mitigado mediante la asignacin de manera agresiva.
En la actualidad, el sistema de ficheros XFS es la eleccin, es un sistema de ficheros
basado en medida proporcionando preasignacin eficaz de archivos.

Haystack Object Store


Es un simple registro estructurado (slo para adjuntar) de almacn de objetos que
contiene needles que representan los objetos almacenados.
Un Haystack contiene 2 archivos: El haystack almacena archivos conteniendo
needles, adicional un index file. La siguiente figura muestra el layout del
haystack:

La primera 8KB del haystack est ocupado por el superbloque. Inmediatamente


despus de la superblock son needles, con cada needle que consiste en una
cabecera, los datos, y un pie de pgina.

Un needle es identificado nicamente por su tupla <Offset, Key, alternativo Key,


Cookie>, donde el desplazamiento es el desplazamiento en el almacenamiento
Haystack needle. Needle no pone ninguna restriccin en los valores de las claves, y
no puede haber needles con claves duplicadas. La siguiente figura se muestra la
disposicin del archivo de ndice:

Hay un registro de ndice correspondiente a cada needle en el archivo de store de


needle, y el orden de los registros de ndice needle debe coincidir con el orden de
las needles asociadas en el archivo de store de needle. El archivo de ndice
proporciona los metadatos mnimos requeridos para localizar un needle especial en
el archivo de store de needle. La carga y la organizacin de los registros de ndice
en una estructura de datos para la bsqueda eficiente es la responsabilidad de la
aplicacin del Haystack (Store de Fotografa en nuestro caso). El archivo de ndice
no es crtica, ya que puede ser reconstruido a partir del archivo de store de needle,
si es necesario. El propsito principal del ndice es permitir la carga rpida de los
metadatos del needle en la memoria sin atravesar el archivo de almacn del
Haystack ms grande, ya que el ndice es por lo general menos de 1% el tamao
del archivo de store.

Operacin de escritura HayStack


Una operacin de escritura del Haystack aade sincrnicamente nuevos needles
para el archivo de store needle. Despus de que las needles estn comprometidos
con el archivo de almacn de del Haystack ms grande, los registros de ndice
correspondientes se escriben en el archivo de ndice. Dado que el archivo de ndice
no es crtica, los registros de ndice se escriben de forma asncrona para un
rendimiento ms rpido.