Zillow viene utilizzato ogni giorno da agenti immobiliari e decine di milioni di utenti che desiderano comprare, vendere o affittare una casa; tramite il sito, possono cercare appartamenti e abitazioni in vendita, scegliere il mutuo più conveniente e consultare informazioni su 110 milioni di case in tutti gli Stati Uniti. Il sito è gestito dal Zillow Group, il cui portfolio comprende alcuni dei più grandi marchi immobiliari online. Oltre a Zillow, lo Zillow Group gestisce anche Trulia, HotPads e StreetEasy.

Zillow elabora più di 3 milioni di nuove immagini al giorno, tra cui foto di abitazioni in vendita, foto profilo di locatari e intermediari e immagini di esempio consultabili nella sezione Digs del sito Zillow. "Quando si verificano picchi di traffico, riceviamo 17.000 richieste di immagini al secondo da clienti che usano sia computer desktop sia dispositivi mobili" spiega Nick Michal, responsabile di progettazione dei sistemi Unix per Zillow Group.

La popolarità del servizio è molto cresciuta, mentre gli agenti hanno cominciato a pubblicare nei propri annunci foto ad alta risoluzione; per questi motivi il datato sistema di gestione delle immagini del sito non era più in grado di soddisfare la domanda. Il sistema si trovava in hosting in un data center; le immagini venivano scaricate da una coda, memorizzate su NAS in formato TIFF piramidale e caricate in una rete per la distribuzione dei contenuti in un servizio Squid locale. "Questi processi erano costosi, e il numero di riscontri nella cache si basava sulla rete di distribuzione. Se i riscontri erano insufficienti, non eravamo in grado di caricare le immagini in modo efficiente. La nostra capacità era sempre al limite", sostiene Michal.

Zillow doveva anche affrontare problemi di prestazioni durante l'elaborazione delle immagini, perché alcune venivano caricate manualmente, mentre altre provenivano da feed in blocco da scaricare. Il volume di nuove immagini provenienti da feed in blocco era difficile da prevedere; inoltre, alcune sorgenti consentivano download molto più rapidi e con un maggiore grado di simultaneità rispetto ad altre. Se il caricamento di un'immagine in cima alla coda risultava lento o problematico, avrebbe fatto ritardare il download delle altre. "Zillow non può permettersi problemi di larghezza di banda, perché se un utente che usa il sito non vede l'immagine che cerca, non guarderà nemmeno l'annuncio", spiega Feroze Daud, sviluppatore software senior presso lo Zillow Group. "Per gli utenti sarebbe frustrante".

Inoltre, lo strumento che utilizzava Zillow per l'elaborazione delle immagini da memorizzare in formato TIFF piramidale stava diventando obsoleto e non era espandibile. "Non era facile, per noi, aggiungere miglioramenti per la qualità delle immagini quali la rimozione dei bordi colorati", prosegue Daud. Anche il disaster recovery rimaneva una questione aperta. "Era rischioso conservare tutto in hosting in un data center", dice Michal.

Per risolvere i problemi di scalabilità, prestazioni e disaster recovery del sistema di gestione delle immagini, Zillow ha deciso di migrare verso un'infrastruttura basata sul cloud. "Dal punto di vista dei costi e della semplicità di gestione, il cloud è la scelta giusta", spiega Michal. Dopo aver preso in esame diverse tecnologie cloud, Zillow ha scelto Amazon Web Services (AWS). "AWS opera nel settore da molto più tempo rispetto alla concorrenza, ed è la società leader", continua Michal. "Senza contare che molte delle aziende che avevamo acquisito già utilizzavano AWS."

L'azienda ha eseguito la migrazione di hosting e distribuzione di immagini da una struttura fisica di proprietà ad AWS utilizzando istanze Amazon Elastic Compute Cloud (Amazon EC2) e Amazon Simple Storage Service (Amazon S3) per lo storage di oggetti. Al momento, Zillow conserva quasi 100 TB di dati in Amazon S3, incluse 300 milioni di immagini e oltre 1 miliardo di oggetti. "I file system tradizionali non sono adatti a conservare un volume di oggetti nell'ordine dei miliardi", spiega Michal. "Dovevamo dividere gli oggetti in diversi file system, sostanzialmente un incubo dal punto di vista della gestione. La scalabilità di Amazon S3 era ideale per la nostra applicazione".

Zillow ha quindi deciso di impiegare AWS Elastic Beanstalk, un servizio che consente di distribuire e ridimensionare le risorse di applicazioni e servizi Web. Gli sviluppatori devono semplicemente caricare il codice ed Elastic Beanstalk gestirà automaticamente l'implementazione, dal provisioning della capacità al bilanciamento del carico, dall'auto scaling al monitoraggio dell'integrità dell'applicazione. Per questo motivo impiega un ambiente di lavoro Elastic Beanstalk che esegua una libreria di imaging di Python con codice personalizzato. "Poiché l'acquisizione dei dati è piuttosto irregolare, con feed che scaricano enormi quantità di lavoro sul sistema tutte in una volta, dobbiamo poter ridimensionare le risorse assegnate ai programmi di conversione delle immagini" spiega Daud. "È molto più semplice usare AWS Elastic Beanstalk piuttosto che mantenere un gran numero di istanze statiche o scrivere direttamente una configurazione per la scalabilità automatica".

Quindi la maggior parte dei carichi di lavoro della rete di distribuzione sono stati trasferiti da Akamai ad Amazon CloudFront, un servizio Web di distribuzione di contenuti che è in grado di avvicinare i contenuti del sito Web di Zillow agli utenti. "AWS CloudFront è molto meno costoso di Akamai e si integra perfettamente con Amazon S3", dice Michal. Zillow utilizza inoltre Amazon CloudWatch per monitorare determinate risorse cloud.

Zillow usa un server di download o DLS nel proprio data center, che consente di gestire le richieste di download delle immagini provenienti dai feed degli annunci; inoltre impiega un'API REST di Amazon Elastic Beanstalk come servizio di front-end nel cloud per il DLS. Questo servizio inoltra le singole richieste di download nel servizio di accodamento di messaggi Amazon Simple Queue Service dividendole per feed. "SQS offre un ottimo sistema di accodamento privo di requisiti infrastrutturali", continua Michal.

Un programma di download con limitazioni controlla la frequenza e il numero massimo di download contemporanei per ogni feed sorgente, consentendo a Zillow di beneficiare dei provider di immagini che supportano i download veloci senza inviare troppe richieste ai provider meno performanti. Se il download di un'immagine va a buon fine, Zillow scrive l'immagine originale in Amazon S3 per poi elaborarla.

Per quanto riguarda l'elaborazione delle immagini, Zillow estrae le immagini memorizzate in S3 e le elabora in diversi modi, generando un set standard di dimensioni per ciascuna immagine. Tutte le immagini vengono prese da Amazon S3 e memorizzate nella cache di Amazon CloudFront. Vengono estratte in media 15.000 immagini al secondo.

Grazie ad AWS, Zillow fornisce una migliore esperienza a compratori e locatari potenziali, agenti immobiliari e visitatori del sito. "Passando ad AWS, non dobbiamo più preoccuparci di pulire la cache o di tenere sotto controllo la capacità. Abbiamo sempre la scalabilità e le prestazioni necessarie per garantire immagini di alta qualità, che è così importante per gli utenti di Zillow", dice Daud. Zillow è in grado di ridimensionare le risorse in modo da adattarsi ai diversi carichi di lavoro che si presentano durante il giorno. Poiché i download di immagini da ciascun feed sorgente sono indipendenti, Zillow può beneficiare delle sorgenti che supportano elevate larghezze di banda e diversi download contemporanei, limitando le richieste alle sorgenti meno performanti. Inoltre, Amazon S3 fornisce storage di oggetti pressoché illimitato, eliminando la necessità di acquistare e installare nuovi server o dischi per aumentare la capacità.

Grazie ad Amazon CloudFront e Amazon S3, le prestazioni del sistema di imaging di Zillow sono completamente affidabili. "La larghezza di banda disponibile è molto maggiore rispetto a prima, quindi non è più una preoccupazione", dice Michal. "E neppure dobbiamo temere che la capacità di S3 si esaurisca".

Zillow ha inoltre ridotto i costi operativi migrando il sistema di elaborazione e distribuzione delle immagini in AWS. "Grazie ad Amazon CloudFront, i nostri costi mensili ammontano alla metà rispetto a quanto pagavamo prima per la rete di distribuzione dei contenuti", spiega Michal. "Non dobbiamo più prevedere investimenti di denaro solo per aggiornare i NAS".

La disponibilità del sistema di gestione delle immagini è aumentata grazie ad Amazon S3 e Amazon CloudFront. "Con S3, disponiamo di oggetti replicati in tre copie all'interno di una regione, così se anche una zona di disponibilità dovesse avere problemi gli utenti non avrebbero alcun problema di traffico, il tutto senza che noi dobbiamo intervenire direttamente", spiega Michal.

Anche il disaster recovery è migliorato. "Possiamo sfruttare al massimo l'opportunità di distribuire i dati in AWS in più aree geografiche", prosegue Michal. "AWS dispone di diverse regioni, e all'interno di queste sono presenti diverse zone di disponibilità; così possiamo non solo generare contenuti dinamici più vicino agli utenti, ma anche migliorare le funzionalità di disaster recovery".

Zillow ora è molto più agile quando si tratta di rispondere alle esigenze di scalabilità. "Posso avviare istanze Amazon EC2 in qualsiasi momento io desideri apportare una modifica alla versione principale dell'applicazione, oppure creare una nuova distribuzione Amazon CloudFront in pochi clic", spiega Daud. "In generale, grazie ad AWS possiamo operare molto più rapidamente".

Zillow adesso dispone anche di una maggiore visibilità sulle prestazioni del sistema. "Abbiamo avuto qualche ritardo nell'elaborazione delle immagini, e la versione iniziale delle nostre app nel cloud non offriva una quantità di parametri sufficienti, perciò non riuscivamo a individuare quale componente provocava il rallentamento", spiega Michal. "Dopo aver iniziato a usare Amazon CloudWatch per monitorare le latenze, avevamo un quadro più chiaro delle cause, perciò le abbiamo eliminate".

Zillow continuerà a cercare altre opportunità per spostare i servizi nel cloud. "Quando abbiamo eseguito la migrazione ad AWS, CloudFront era un servizio relativamente nuovo e credevamo fosse rischioso affidarsi ad esso", conclude Michal. "In realtà, poi, ha dato prova di grande affidabilità. In futuro, quando saremo alla ricerca di nuovi progetti e servizi, prenderemo sempre in esame AWS. La nostra esperienza è stata perfetta".

Per ulteriori informazioni su come AWS può aiutarti a migliorare scalabilità e prestazioni di applicazioni di elaborazione e distribuzione di immagini, visita la pagina dei dettagli di Amazon CloudFront: http://aws.amazon.com/cloudfront/.