Todos los días, decenas de millones de compradores, vendedores y arrendatarios, así como agentes y administradores de propiedades, utilizan el sitio web de Zillow para examinar los listados de casas y apartamentos, comparar hipotecas y buscar información sobre los 110 millones de inmuebles de todos los Estados Unidos. El popular sitio es propiedad del Grupo Zillow, cuya cartera cuenta con las mayores marcas de inmuebles y hogares en línea. Además de Zillow, el Grupo Zillow administra Trulia, HotPads y StreetEasy.

Zillow procesa más de 3 millones de imágenes nuevas al día, incluidas las imágenes de los listados, fotos de perfil de los prestamistas y agentes, e imágenes de proyectos inmobiliarios en el sitio web de Zillow Digs. “Recibimos más de 17 000 solicitudes de imágenes por segundo durante los picos de tráfico de clientes tanto desde escritorios como móviles”, explica Nick Michal, director de ingeniería de sistemas Unix del Grupo Zillow.

A medida que Zillow adquirió más popularidad, los agentes empezaron a publicar imágenes de mayor resolución en los listados y el sistema de imágenes antiguo de la compañía no podía satisfacer la demanda. El sistema se encontraba en centros de datos alojados, con las imágenes descargadas de una sola fila, almacenadas en un dispositivo de almacenamiento conectado a la red (NAS) en formato TIFF piramidal, y enviadas a una red de entrega de contenido(CDN) a través de un servicio Squid local. “Este método resultaba caro, y dependíamos de la CDN para tener una tasa de caché elevada. Si no lográbamos la tasa necesaria, no podíamos abastecer las imágenes de forma eficaz. Todos los días nos acercábamos a nuestra capacidad máxima”, afirma Michal.

Zillow también sufría problemas de desempeño en el procesamiento de las imágenes, ya que algunas se cargaban manualmente pero otras procedían de fuentes masivas para su descarga. A menudo, la tasa de imágenes nuevas procedentes de fuentes masivas era impredecible, y algunas fuentes de imágenes permitían descargas mucho más rápidas con mayor concurrencia que otras fuentes. Como resultado, si había una imagen lenta o problemática al principio de la cola se retrasaba la descarga de las demás imágenes. “No podemos tener problemas de ancho de banda en Zillow, porque si los usuarios van al sitio y la imagen no aparece, ni siquiera mirarán el listado”, explica Feroze Daud, ingeniero sénior de desarrollo de software del Grupo Zillow. “A los usuarios les resultaría frustrante”.

Además, la herramienta que Zillow utilizaba para procesar imágenes para su almacenamiento en formato TIFF piramidal se estaba quedando vieja y no era fácil de ampliar. “No resultaba fácil introducir mejoras a la calidad de las imágenes, como eliminar los bordes de colores”, comenta Daud. La recuperación de desastres también preocupaba a la compañía. “Al tener todo alojado en un solo centro de datos, existía un riesgo”, explica Michal.

Para solucionar los problemas de escalabilidad, desempeño y recuperación de desastres de su sistema de imágenes, Zillow decidió pasarse a una infraestructura basada en la nube. “Desde el punto de vista de los costos generales y la facilidad de administración, la nube tenía mucho sentido”, explica Michal. Tras examinar varias tecnologías en la nube, Zillow optó por Amazon Web Services (AWS). “AWS era la empresa que más tiempo llevaba en la nube y la más dominante”, asegura Michal. “Además, varias de las compañías que habíamos comprado ya usaban AWS”.

La compañía migró el alojamiento y distribución de sus imágenes de unas instalaciones de colocación físicas a AWS, con instancias de Amazon Elastic Compute Cloud (Amazon EC2) y Amazon Simple Storage Service (Amazon S3) para el almacenamiento de objetos de imágenes. En la actualidad, Zillow almacena cerca de 100 TB de datos en Amazon S3, incluidos 300 millones de imágenes y más de 1 000 millones de objetos. “El mantenimiento de miles de millones de objetos no resulta sencillo en un sistema de archivos tradicional”, asegura Michal. “Tendríamos que dividir los objetos en numerosos sistemas de archivos, lo que sería una pesadilla a la hora de administrarlos. La escalabilidad de Amazon S3 parecía la tecnología idónea para nosotros”.

Zillow también comenzó a usar AWS Elastic Beanstalk, un servicio para la implementación y el escalado de aplicaciones y servicios web. Los desarrolladores pueden cargar el código a Elastic Beanstalk, que a continuación administra de manera automática la implementación, desde el aprovisionamiento de la capacidad, el equilibrio de carga y el autoescalado hasta la monitorización del estado de la aplicación. La compañía utiliza un entorno de trabajo de Elastic Beanstalk para ejecutar una biblioteca de imágenes Python con código personalizado. “Como procesamos datos de forma aleatoria, ejecutando fuentes que envían mucho trabajo al sistema a la vez, necesitamos escalar nuestro conjunto de convertidores de imágenes”, explica Daud. “AWS Elastic Beanstalk es la manera más sencilla de hacerlo, en lugar de disponer de un conjunto de instancias estáticas o intentar escribir nuestra propia configuración de autoescalado”.

A continuación, la organización trasladó la mayoría de la carga de trabajo de su CDN de Akamai a Amazon CloudFront, un servicio web de entrega de contenido que distribuye el contenido del sitio web de Zillow más cercano a los usuarios. “AWS CloudFront es mucho más económico que Akamai y se integra a la perfección con Amazon S3”, afirma Michal. Zillow también utiliza Amazon CloudWatch para monitorizar algunos de sus recursos en la nube.

Zillow usa un servidor de descargas (DLS) en su centro de datos para administrar las solicitudes de descarga de imágenes provenientes de las fuentes de los listados y utiliza una API REST de Amazon Elastic Beanstalk como servicio front-end en la nube para el DLS. Este servicio toma cada solicitud de descarga de imagen y la coloca en un servicio de cola de mensajes por fuente de Amazon Simple Queue Service (Amazon SQS). “Gracias a SQS, administramos un sistema de colas sin tener que ocuparnos de la infraestructura nosotros”, explica Michal.

Un descargador limitador controla la velocidad y la concurrencia con la que Zillow descarga imágenes para cada fuente, lo que le permite a la empresa aprovecharse de los proveedores de imágenes que admiten descargas rápidas sin avasallar a los proveedores que no las admiten. Si la descarga de la imagen se produce con éxito, Zillow escribe la imagen original en Amazon S3 para usarla en el procesamiento de imágenes.

Para realizar el procesamiento de imágenes, Zillow toma las imágenes originales almacenadas en S3 y las procesa usando varios métodos de calidad de la imagen, generando al mismo tiempo un conjunto estándar de tamaños para cada imagen. Todas las imágenes provienen de Amazon S3 y se almacenan en caché en Amazon CloudFront. La compañía abastece de media 15 000 imágenes por segundo.

Con AWS, Zillow puede ofrecer una experiencia mejor a los compradores y arrendatarios de inmuebles potenciales, agentes inmobiliarios y otros visitantes del sitio. “Al pasarnos a AWS, ya no tenemos que preocuparnos de limpiar la caché ni de problemas de capacidad. Disponemos de la capacidad y el desempeño necesarios para entregar imágenes de los inmuebles de alta calidad, que son muy importantes para la experiencia del usuario de Zillow”, explica Daud. Zillow puede escalar la descarga y el procesamiento de imágenes para abastecer diversos niveles de imágenes de entrada durante todo el día. Y como ahora las descargas de imágenes de cada fuente son independientes, Zillow puede beneficiarse de las fuentes que admiten un elevado ancho de banda y concurrencia, limitando las fuentes que no los admiten. Además, Amazon S3 aporta a la compañía el almacenamiento de objetos casi ilimitado, con lo que se elimina la necesidad de solicitar e instalar más servidores o unidades para incrementar la capacidad.

Al utilizar Amazon CloudFront junto con Amazon S3, Zillow confía más en el desempeño de sus sistema de imágenes. “Disponemos de mucho más ancho de banda que antes, por lo que ya no tenemos que preocuparnos de eso”, asegura Michal. “Y desde luego no tenemos que preocuparnos de que S3 se quede sin capacidad”.

Zillow también ha reducido sus costos operativos al migrar su sistema de procesamiento y entrega de imágenes a AWS. “Gracias a Amazon CloudFront, pagamos menos de la mitad de lo que pagábamos al mes con nuestra CDN”, comenta Michal. “Ya no tenemos que gastar dinero en actualizaciones a dispositivos NAS”.

Al utilizar Amazon S3 y Amazon CloudFront, la compañía ha incrementado la disponibilidad de su sistema de imágenes. “Con S3, los objetos se replican de tres maneras dentro de una región, de modo que, incluso si una zona deja de estar disponible, el tráfico podría seguir enviándose a los usuarios sin que tengamos que realizar tareas de desarrollo”, explica Michal.

La recuperación de desastres también se ha mejorado. “Podemos beneficiarnos de la distribución geográfica de AWS”, asegura Michal. “Esas regiones contienen varias regiones y zonas de disponibilidad de AWS, por lo que no solo podemos generar contenido dinámico más cercano a los usuarios, sino también mejorar nuestra capacidad de recuperación de desastres”.

Zillow ha incrementado la agilidad de su respuesta ante las necesidades de escalado. “Puedo poner en marcha instancias de Amazon EC2 en cualquier momento para realizar un cambio principal en la versión de la aplicación, o crear una nueva distribución de Amazon CloudFront con tan solo unos clics”, asegura Daud. “En general, gracias a AWS podemos avanzar más deprisa”.

La organización también dispone de mejor visibilidad del desempeño del sistema. “Experimentamos varios retrasos en el procesamiento de las imágenes, y las versiones iniciales de nuestras aplicaciones en la nube no mostraban suficientes métricas, por lo que no conseguíamos averiguar qué componente de la canalización había provocado los retrasos”, comenta Michal. “Cuando comenzamos a utilizar Amazon CloudWatch para realizar un seguimiento de las latencias, pudimos observar mucho mejor las causas y tomamos las medidas necesarias para eliminarlas”.

Zillow seguirá buscando oportunidades adicionales para trasladar más servicios a la nube. “Cuando realizamos la primera migración a AWS, CloudFront era relativamente nuevo y pensamos que estábamos asumiendo un riesgo”, explica Michal. “Sin embargo, ha demostrado sus capacidades. En el futuro, para nuevos proyectos y servicios, tendremos en cuenta AWS. Nuestra experiencia ha sido excelente”.

Para obtener más información sobre cómo AWS puede ayudarle a mejorar el escalado y el desempeño de su procesamiento y entrega de imágenes, visite nuestra página de detalles sobre Amazon CloudFront: http://aws.amazon.com/cloudfront/.