Chaque jour, des dizaines de millions d'acheteurs, de vendeurs et de locataires potentiels, outre les agents et gestionnaires immobiliers, utilisent le site Web Zillow pour parcourir des listes de maisons et d'appartements, comparer des prêts immobiliers et rechercher des informations sur 110 millions de logements aux États-Unis. Ce site populaire appartient à Zillow Group dont le portefeuille comprend les plus grandes marques immobilières en ligne. Outre Zillow, Zillow Group exploite les sites Trulia, HotPads et StreetEasy.

Zillow traite plus de 3 millions de nouvelles images chaque jour, notamment des photos de liste, des images de profil pour les prêteurs et les agents, et des images de projet de rénovation sur le site Zillow Digs. « Nous recevons 17 000 demandes d'images par seconde pendant les heures de pointe transmises par des clients de bureau et mobiles », explique Nick Michal, directeur de l'ingénierie des systèmes Unix de Zillow Group.

Alors que Zillow gagnait en popularité et que les agents commençaient à publier des photos d'une résolution supérieure pour accompagner leurs listes, le système de traitement d'images de l'entreprise ne parvenait pas à répondre à la demande. Le système était installé dans des datacenters hébergés et les images étaient téléchargées depuis une file d'attente, stockées dans un périphérique NAS (Network Attached Storage) au format TIFF pyramidal, et transférées vers un réseau de diffusion de contenu (CDN) depuis un service Squid local. « Cette configuration nous coûtait cher et nous comptions sur notre CDN pour profiter d'un taux de succès de cache élevé. Si ce taux n'était pas atteint, nous ne pouvions pas diffuser efficacement les images. Nous fonctionnons presque à pleine capacité tous les jours », précise Michal.

Zillow devait également faire face à des problèmes de performances en matière de traitement d'images, car certaines images étaient chargées manuellement, tandis que d'autres provenaient de flux en masse à télécharger. Le taux de nouvelles images provenant des flux en masse était souvent imprévisible et certaines sources d'images offraient un téléchargement plus rapide avec plus d'accès simultanés que d'autres. Ainsi, une image lente ou problématique située au début de la file d'attente retardait le téléchargement d'autres images. « Nous ne pouvons pas nous permettre de rencontrer des problèmes de bande passante sur Zillow, car si les utilisateurs accèdent au site et qu'une image est absente, ils ne consulteront pas la liste », indique Feroze Daud, ingénieur en chef du développement logiciel, Zillow Group. « Cela serait frustrant pour les utilisateurs. »

De plus, l'outil que Zillow utilisait pour le traitement d'images à des fins de stockage au format TIFF pyramidal était obsolète et difficilement extensible. « Il n'a pas été facile pour nous de mettre en place des améliorations de la qualité d'image comme la suppression des bordures en couleur unie », explique Daud. La reprise après sinistre était une autre préoccupation majeure. « Toutes nos ressources étant hébergées dans un seul datacenter, cela n'était pas sans risque », indique Michal.

Pour résoudre les problèmes d'évolutivité, de performances et de reprise après sinistre de son système de traitement d'images, Zillow a décidé de passer à une infrastructure basée sur le cloud. « Etant donné son coût global et sa gestion simplifiée, le cloud, semblait une évidence », précise Michal. Après avoir étudié différentes technologies de cloud, Zillow a opté pour Amazon Web Services (AWS). « AWS avait le plus d'expérience et dominait l'espace de cloud », indique Michal. « De plus, un certain nombre d'entreprises dont nous avions fait l'acquisition utilisaient déjà AWS. »

L'entreprise a migré son système d'hébergement et de diffusion d'images d'un site de colocalisation physique à AWS, à l'aide d'instances Amazon Elastic Compute Cloud (Amazon EC2) et d'Amazon Simple Storage Service (Amazon S3) pour le stockage des objets images. Zillow stocke actuellement près de 100 To de données dans Amazon S3, notamment 300 millions d'images et plus d'un milliard d'objets. « Un système de fichiers traditionnel n'est pas très efficace pour ce qui est de gérer un milliard d'objets », explique Michal. « Il nous aurait fallu répartir ces objets entre plusieurs systèmes de fichiers, ce qui aurait été un cauchemar en matière de gestion. L'évolutivité d'Amazon S3 nous semblait être la technologie la plus appropriée. »

Zillow a également commencé à utiliser AWS Elastic Beanstalk, un service de déploiement et de dimensionnement des applications et services Web. Il suffit aux développeurs de charger leur code, et Elastic Beanstalk effectue automatiquement les étapes du déploiement que sont le dimensionnement des capacités, l'équilibrage de la charge, le dimensionnement automatique et la surveillance de l'état de l'application. L'entreprise utilise un environnement de travail Elastic Beanstalk pour exécuter une bibliothèque de traitement d'images Python avec un code personnalisé. « Parce que nous intégrons des données de façon aléatoire, en exécutant simultanément des flux qui transfèrent énormément de tâches dans le système, nous devons procéder à la mise à l'échelle supérieure de notre suite de convertisseurs d'images », explique Daud. « AWS Elastic Beanstalk est le moyen le plus simple d'y parvenir, plutôt que de disposer d'un groupe d'instances statiques ou de tenter d'écrire notre propre configuration de dimensionnement automatique. »

L'organisation a ensuite transféré la majeure partie de la charge de travail de son CDN d'Akamai à Amazon CloudFront, un service Web de diffusion de contenu qui diffuse le contenu du site Web Zillow au plus près de l'utilisateur. « AWS CloudFront est beaucoup moins cher qu'Akamai et s'intègre parfaitement à Amazon S3 », indique Michal. Zillow utilise également Amazon CloudWatch pour surveiller certaines de ses ressources de cloud.

Zillow utilise un serveur de téléchargement (DLS) dans son datacenter pour gérer les demandes de téléchargement d'image provenant de flux de liste, et utilise également une API REST Amazon Elastic Beanstalk comme service frontal dans le cloud pour le DLS. Ce service transfère chaque demande de téléchargement d'image dans un service de file d'attente de messagerie par flux Amazon Simple Queue Service (Amazon SQS). « Grâce à SQS, nous profitons d'un système de file d'attente sans avoir à prendre en charge l'infrastructure nous-mêmes », précise Michal.

Un gestionnaire de téléchargement limité contrôle la vitesse et la simultanéité des téléchargements d'images sur le site Zillow pour chaque source de flux, ce qui permet à l'entreprise de profiter de fournisseurs d'images qui prennent en charge des vitesses de téléchargement rapides sans surcharger les fournisseurs dont ce n'est pas le cas. Si le téléchargement d'image réussit, Zillow écrit l'image d'origine dans Amazon S3 ; celle-ci sera ensuite utilisée lors du traitement.

Lors du traitement des images, Zillow utilise les images d'origine stockées dans S3 et les traite en utilisant plusieurs méthodes de qualité d'image tout en générant un ensemble standard de tailles pour chaque image. Toutes les images sont diffusées depuis Amazon S3 et mises en cache dans Amazon CloudFront. L'entreprise diffuse en moyenne 15 000 images par seconde.

Grâce à AWS, Zillow peut offrir une meilleure expérience aux acheteurs et locataires potentiels, ainsi qu'aux agents immobiliers et autres visiteurs du site. « Depuis que nous avons migré vers AWS, nous n'avons plus à nous préoccuper des vidages de cache ou des problèmes de capacité. Nous disposons de l'évolutivité et des performances dont nous avons besoin pour diffuser des images immobilières de haute qualité, ce qui est très important pour l'expérience des utilisateurs sur le site Zillow », indique Daud. Zillow peut mettre à l'échelle le téléchargement et le traitement d'images pour gérer différents niveaux d'images entrantes tout au long de la journée. De plus, les téléchargements d'images de chaque source de flux étant désormais indépendants, Zillow peut profiter de sources qui prennent en charge une bande passante et une simultanéité élevées tout en limitant les sources dont ce n'est pas le cas. En outre, Amazon S3 offre un stockage d'objets quasi illimité à l'entreprise qui n'a donc plus besoin d'installer d'autres serveurs ou disques pour augmenter la capacité.

L'utilisation combinée d'Amazon CloudFront et d'Amazon S3 permet à Zillow d'avoir davantage confiance dans les performances de son système de traitement d'images. « Nous disposons de beaucoup plus de bande passante qu'auparavant ; nous n'avons même plus à y penser », explique Michal. « Et nous sommes sûrs de ne jamais manquer de capacité avec S3. »

Zillow a également réduit ses coûts d'exploitation en migrant son système de traitement et de diffusion d'images vers AWS. « Grâce à Amazon CloudFront, nous payons moins de la moitié de la somme mensuelle que nous payions auparavant pour notre CDN », indique Michal. « Nous n'avons pas à dépenser de l'argent pour procéder à des mises à niveau lourdes vers des périphériques NAS. »

L'entreprise a amélioré la disponibilité de son système de traitement d'images grâce à Amazon S3 et Amazon CloudFront. « Avec S3, les objets sont répliqués de trois manières différentes au sein d'une même région. Ainsi, même si une zone de disponibilité est défaillante, le trafic peut toujours parvenir aux utilisateurs sans effort de développement de notre côté », explique Michal.

La reprise après sinistre s'est également améliorée. « Nous pouvons profiter de la répartition géographique d'AWS », indique Michal. « Ces régions regroupent un certain nombre de régions et de zones de disponibilité AWS. Nous pouvons donc générer un contenu dynamique au plus près de l'utilisateur, tout en améliorant nos capacités de reprise après sinistre. »

Zillow répond désormais de manière plus flexible à ses besoins en matière d'évolutivité. « Je peux lancer des instances Amazon EC2 chaque fois que je souhaite procéder à un changement de version majeur au niveau de l'application et je peux créer une nouvelle distribution Amazon CloudFront en quelques clics », explique Daud. « Dans l'ensemble, nous pouvons avancer plus vite grâce à AWS. »

L'organisation bénéficie également d'une meilleure visibilité sur les performances du système. « Notre processus de traitement d'images connaissait quelques retards et les versions initiales de nos applications cloud n'exposaient pas suffisamment de métriques ; nous ne savions donc pas quel composant du pipeline était responsable du retard », indique Michal. « Lorsque nous avons commencé à utiliser Amazon CloudWatch pour suivre les latences, nous avons pu nous faire une idée plus précise des causes des retards et avons pris les mesures appropriées pour les éliminer. »

Zillow est toujours à la recherche d'occasions de migrer ses services vers le cloud. « Lorsque nous avons migré pour la première fois vers AWS, CloudFront était encore relativement nouveau et nous pensions prendre un risque », explique Michal. « Cependant, le service a depuis fait ses preuves. Dans le futur, pour les nouveaux projets et services, nous envisageons de faire appel à AWS. Cette expérience a été très enrichissante. »

Pour découvrir comment AWS peut vous aider à améliorer la mise à l'échelle et les performances de votre système de traitement et de diffusion d'images, consultez la page de présentation d'Amazon CloudFront : http://aws.amazon.com/cloudfront/.