Todos os dias, dezenas de milhões de possíveis compradores, vendedores e locatários de imóveis, além de agentes e gerentes de propriedade, usam o site da Zillow para buscar listas de casas e apartamentos, procurar por hipotecas e encontrar informações sobre 110 milhões de casas nos EUA. O famoso site pertence ao Zillow Group, que hospeda um portfólio das maiores marcas imobiliárias ou relacionadas ao mercado imobiliário on-line. Além da Zillow, o Zillow Group opera o Trulia, o HotPads e o StreetEasy.

A Zillow processa mais de 3 milhões de novas imagens por dia, inclusive fotos de listas, fotos de perfis de financiadoras e agentes e imagens de projetos imobiliários no site Zillow Digs. "Nós recebemos 17.000 solicitações de imagem por segundo durante os picos de tráfego de clientes móveis e de desktop", diz Nick Michal, gerente de engenharia de sistemas Unix do Zillow Group.

Com o crescimento da popularidade da Zillow, os agentes começaram a publicar fotos com maior resolução em suas listas, e o sistema de imagens antigo da empresa não conseguiu acompanhar a demanda. O sistema residia em datacenters hospedados, com imagens baixadas de uma fila, armazenadas em um dispositivo de armazenamento anexado à rede (NAS) no formato TIFF em pirâmide e distribuídas para uma rede de entrega de conteúdo (CDN) de um serviço Squid local. "Fazer as coisas dessa maneira era dispendioso, e nós contamos com a nossa CDN para obter uma taxa de acerto de cache alta. Se essa taxa não acontecesse, não poderíamos distribuir imagens de modo eficaz. Nós estávamos executando perto da nossa capacidade máxima todos os dias", disse Michal.

A Zillow também estava enfrentando problemas de desempenho do processamento de imagens, pois algumas delas eram carregadas manualmente e outras vinham de feeds em alto volume para serem baixadas. A taxa de novas imagens originada de feeds em alto volume era com frequência imprevisível, e alguns recursos de imagem permitiam um download muito mais rápido e com maior simultaneidade que outras origens. Como resultado, uma imagem lenta ou problemática na frente da fila atrasaria o download de outras imagens. "Nós não podemos ter problemas de largura de banda na Zillow, pois se os usuários acessarem o site e uma imagem não estiver lá, eles não olharão a lista", diz Feroze Daud, engenheiro sênior de desenvolvimento de software do Zillow Group. "Isso seria frustrante para os usuários."

Além disso, a ferramenta que a Zillow estava usando para processar imagens para armazenamento no formato TIFF em pirâmide estava tornando-se obsoleta e não expandia facilmente. "Não foi fácil realizarmos melhorias de qualidade de imagem, como a remoção de bordas de cor uniforme", comenta Daud. A recuperação de desastres foi outra grande preocupação. "Havia um risco em ter tudo hospedado em um só datacenter", disse Michal.

Para solucionar os desafios de escalabilidade, desempenho e recuperação de desastres do sistema de imagens, a Zillow decidiu migrar para uma infraestrutura baseada na nuvem. "Sob uma perspectiva de custos gerais e facilidade de gerenciamento, a nuvem fazia muito sentido", disse Michal. Após avaliar várias tecnologias de nuvem, a Zillow optou pela Amazon Web Services (AWS). De acordo com Michal, "A AWS estava no mercado há mais tempo e dominava o ambiente de nuvem". "Além disso, várias empresas que havíamos comprado já estavam usando a AWS".

A empresa migrou sua hospedagem e distribuição de imagens de uma instalação de colocação física para a AWS, usando instâncias do Amazon Elastic Compute Cloud (Amazon EC2) e o Amazon Simple Storage Service (Amazon S3) para armazenamento de objetos de imagem. No momento, a Zillow armazena cerca de 100 TB de dados no Amazon S3, inclusive 300 milhões de imagens e mais de 1 bilhão de objetos. "Manter uma contagem de objetos na casa dos bilhões não funciona tão bem em um sistema de arquivos tradicional", fala Michal. "Nós teríamos que dividir esses objetos entre vários sistemas de arquivos, e o gerenciamento disso seria um pesadelo. A escalabilidade do Amazon S3 parecia ser a tecnologia certa para nós".

A Zillow também começou a usar o AWS Elastic Beanstalk, um serviço para implantar e escalar aplicativos e serviços da web. Os desenvolvedores podem carregar código no Elastic Beanstalk, que se encarrega automaticamente da implantação, abrangendo do provisionamento de capacidade, do balanceamento de carga e da escalabilidade automática, até o monitoramento da saúde do aplicativo. A empresa está usando um ambiente de operadores do Elastic Beanstalk para executar a Python Imaging Library com código personalizado. "Como consumimos dados de modo aleatório, executando feeds que descarregam um monte de trabalho no sistema de uma só vez, é necessário aumentar a escala vertical do nosso conjunto de conversores de imagem", declara Daud. "O AWS Elastic Beanstalk é a maneira mais simples de fazermos isso, em vez de termos várias instâncias estáticas ou tentarmos escrever nossa própria configuração de escalabilidade automática."

A empresa, então, migrou grande parte da sua carga de trabalho da CDN do Akamai para o Amazon CloudFront, um serviço da web de entrega de conteúdo que distribui o conteúdo do site da Zillow mais próximo aos usuários. "O AWS CloudFront é consideravelmente menos dispendioso do que o Akamai, além de integrar-se bem ao Amazon S3", comenta Michal. A Zillow também está usando o Amazon CloudWatch para monitorar alguns de seus recursos na nuvem.

A Zillow usa um servidor de download (DLS) em seu datacenter para gerenciar solicitações de download de imagens recebidas de feeds de listas, e usa uma API REST do Amazon Elastic Beanstalk como um serviço de front-end na nuvem para o DLS. O serviço pega todas as solicitações de download de imagem e as insere em um serviço de enfileiramento de mensagens por feed do Amazon Simple Queue Service (Amazon SQS). "Ao usar o SQS, nós obtemos um sistema de enfileiramento sem que seja necessário sustentarmos a infraestrutura", diz Michal.

Um downloader acelerado controla a taxa e a simultaneidade com que a Zillow baixa imagens para cada origem de feed, permitindo que a empresa utilize provedores de imagem que sustentam o download rápido, sem sobrecarregar os provedores que não têm essa capacidade. Se o download de imagem for bem-sucedido, a Zillow grava a imagem original no Amazon S3, que será usada no processamento de imagens.

Para o processamento de imagens, a Zillow obtém as imagens originais armazenadas no S3 e as processa por meio de vários métodos de qualidade de imagens, enquanto gera um conjunto padrão de tamanhos para cada imagem. Todas as imagens são distribuídas para fora do Amazon S3 e armazenadas em cache no Amazon CloudFront. A empresa distribui uma média de até 15.000 imagens por segundo.

Ao usar a AWS, a Zillow pode proporcionar uma melhor experiência para possíveis compradores e locatários de imóveis, agentes imobiliários e outros visitantes do site. "Após a migração para a AWS, não nos preocupamos mais com a liberação do cache ou os problemas de capacidade. Nós temos a escalabilidade e o desempenho necessários para disponibilizar imagens do setor imobiliário de alta qualidade, o que é muito importante para a experiência de usuário da Zillow", declara Daud. A Zillow pode escalar o download e o processamento de imagens para administrar os níveis variáveis das imagens recebidas durante o dia. E, como os downloads de imagem de cada origem de feed agora são independentes, a Zillow pode utilizar as origens que sustentam alta largura de banda e simultaneidade, enquanto também reduz o fluxo para origens que não têm essa capacidade. Além disso, o Amazon S3 disponibiliza para a empresa um armazenamento de objetos praticamente ilimitado, eliminando a necessidade de solicitar e instalar mais servidores ou unidades para aumentar a capacidade.

Ao usar o Amazon CloudFront junto com o Amazon S3, a Zillow tornou-se mais confiante no desempenho do seu sistema de imagens. "Nós temos muito mais largura de banda do que antes, por isso, não precisamos mais nem pensar sobre isso", compartilha Michal. "E, definitivamente, não nos preocupamos se a capacidade do S3 vai acabar."

A Zillow também reduziu custos operacionais ao migrar seu sistema de processamento e entrega de imagens para a AWS. "Usando o Amazon CloudFront, nós pagamos menos do que a metade do valor mensal que pagávamos antes pela nossa CDN", diz Michal. "Não precisamos mais gastar dinheiro com atualizações de migração em bloco para dispositivos NAS."

A empresa aumentou a disponibilidade do seu sistema de imagens usando o Amazon S3 e o Amazon CloudFront. "Com o S3, nós temos objetos replicados de três maneiras dentro de uma região, portanto, mesmo que uma região fique inativa, o tráfego ainda poderá ser distribuído para usuários sem esforços de desenvolvimento da nossa parte", diz Michal.

A recuperação de desastres também melhorou. "Nós, definitivamente, podemos lucrar com a distribuição geográfica da AWS", comenta Michal. "Existem várias regiões e zonas de disponibilidade da AWS nessas regiões, por isso, nós podemos não apenas gerar conteúdo dinâmico mais perto dos usuários, como também melhorar os recursos de recuperação de desastres."

Agora, a Zillow é mais ágil em se tratando da resposta a necessidades de escalabilidade. "É possível inicializar instâncias do Amazon EC2 a qualquer momento que eu desejar alterar uma versão principal de aplicativo ou criar uma nova distribuição do Amazon CloudFront com apenas alguns cliques", diz Daud. "De modo geral, nós podemos operar mais rápido graças à AWS."

A empresa também tem uma melhor visibilidade sobre o desempenho do sistema. "Nós tivemos alguns atrasos no processamento de imagens, e as versões iniciais dos nossos aplicativos na nuvem não expunham métricas suficientes, então, não conseguíamos descobrir qual componente do pipeline estava provocando o atraso", conta Michal. "Após começarmos a usar o Amazon CloudWatch para monitorar latências, conseguimos enxergar muito melhor quais eram as causas e tomamos as medidas apropriadas para eliminá-las."

A Zillow continuará a procurar por outras oportunidades de migração de serviços para a nuvem. "Logo quando migramos para a AWS, o CloudFront ainda era relativamente novo, e nós achamos que estávamos correndo um risco", diz Michal. "No entanto, ele comprovou sua eficiência. Futuramente, para novos projetos e serviços, nós consideraremos a AWS. A nossa experiência tem sido excelente."

Para saber mais sobre como a AWS pode ajudá-lo a aumentar a escala e o desempenho para o processamento e a entrega de imagens, acesse nossa página de detalhes do Amazon CloudFront: http://aws.amazon.com/cloudfront/.