Ежедневно десятки миллионов потенциальных покупателей жилья, продавцов и арендаторов, а также агентов по недвижимости и управляющих посещают веб-сайт Zillow, чтобы просмотреть объявления, найти выгодные предложения по ипотеке и ознакомиться с подробной информацией о 110 миллионах домов по всей территории США. Владельцем этой популярной площадки является Zillow Group, которая размещает в Интернете данные об объектах недвижимости от имени крупнейших брендов в этой области. Помимо Zillow, Zillow Group управляет такими площадками, как Trulia, HotPads и StreetEasy.

Zillow ежедневно обрабатывает более 3 миллионов новых изображений, в число которых входят фотографии объектов недвижимости в объявлениях, фотографии в профилях для кредиторов и агентов, а также изображения, сгенерированные на сайте для создания проектов домов Zillow Digs. «В пиковые часы мы каждую секунду получаем 17 000 запросов изображений с компьютеров и мобильных устройств клиентов», – рассказывает Ник Михал, технический директор Zillow Group по Unix-системам.

По мере роста популярности Zillow агенты стали добавлять в свои объявления фотографии с более высоким разрешением, и предыдущая система обработки изображений уже не могла справиться с такой нагрузкой. Система работала на базе размещенных центров обработки данных, загрузка изображений выполнялась в виде одной очереди, хранились они в сетевом хранилище данных (NAS) в формате пирамидального TIFF и поставлялись в сеть доставки контента (CDN) посредством запуска локального сервиса Squid. «Этот способ дорого стоил, мы полагались на нашу сеть доставки контента, чтобы обеспечить высокую частоту попаданий в кэш. При отсутствии попадания в кэш мы не могли обеспечить эффективную работу с изображениями. Система каждый день работала на грани своих возможностей», – рассказывает Михал.

У Zillow также возникали проблемы с производительностью при обработке изображений, потому что некоторые из них загружались вручную, а другие – из объемных лент объявлений для загрузки. Скорость загрузки новых изображений из таких лент зачастую было невозможно спрогнозировать, из одних источников изображения загружались намного быстрее, из других – медленнее. Как следствие, если в начале очереди оказывалось изображение, которое загружалось на малой скорости или с ошибками, это тормозило обработку остальных изображений. «Для Zillow проблемы с пропускной способностью неприемлемы. Если пользователи приходят на сайт, а в объявлениях нет изображений, их просто не будут открывать, – говорит Фероз Дауд, старший инженер по разработке программного обеспечения в Zillow Group. – Такие объявления раздражают пользователей».

Кроме того, инструмент, который Zillow использовала для обработки изображений, чтобы хранить их в формате пирамидального TIFF, устарел и не имел потенциала к расширению. «Нам было сложно внедрять функции для улучшения качества обработки изображений, например удаление цветных рамок», – рассказывает Дауд. Еще одной серьезной проблемой было аварийное восстановление. «Когда все размещено в одном центре обработки данных, это серьезный риск», – считает Михал.

Чтобы решить проблемы в работе системы обработки изображений, повысить производительность, а также решить вопрос с аварийным восстановлением, сайт Zillow решено было перенести в облачную инфраструктуру. «Исходя из общей стоимости и простоты в управлении, облако представлялось отличным решением», – говорит Михал. Оценив различные облачные технологии, компания Zillow отдала предпочтение Amazon Web Services (AWS). «AWS раньше всех начала свою деятельность и занимала доминирующую позицию в сфере облачных сервисов, – объясняет Михал. – К тому же некоторые из приобретенных нами компаний уже использовали AWS».

Компания перенесла хостинг изображений и их распространение из реального колокационного объекта в облако AWS, используя инстансы Amazon Elastic Compute Cloud (Amazon EC2) и Amazon Simple Storage Service (Amazon S3) для хранения графических объектов. В настоящее время объем данных, которые Zillow хранит на Amazon S3, составляет около 100 ТБ, включая 300 миллионов изображений и более миллиарда объектов. «Обслуживать объекты, число которых выражается в миллиардах, крайне затруднительно в рамках традиционной файловой системы, – говорит Михал. – Нам пришлось бы разделить эти объекты на несколько файловых систем – кошмарное решение с точки зрения управления. И тут нас очень выручили технологии масштабирования Amazon S3».

Zillow также начали использовать AWS Elastic Beanstalk, сервис для развертывания и масштабирования интернет-приложений и сервисов. Разработчик может загрузить свой код, и Elastic Beanstalk автоматически выполнит развертывание: выделит ресурсы, займется балансировкой нагрузки, автоматическим масштабированием и мониторингом работоспособности приложения. Компания использует рабочую среду Elastic Beanstalk для запуска Python Imaging Library со специальным кодом. «Поскольку мы поглощаем данные бессистемно, работая с лентами, которые могут сразу передать огромный пакет информации, наш набор инструментов для преобразования изображений должен быть масштабируемым, – говорит Дауд. – С помощью AWS Elastic Beanstalk сделать это намного проще, чем когда запускаешь несколько постоянно работающих инстансов или пытаешься написать собственную конфигурацию для автоматического масштабирования».

Затем компания перенесла основную часть рабочей нагрузки сети доставки контента (CDN) с Akamai на Amazon CloudFront, веб-сервис доставки контента, который организует распределение контента сайта Zillow как можно ближе к конечным пользователям. «AWS CloudFront значительно дешевле, чем Akamai, и отлично интегрирован с Amazon S3», – говорит Михал. Zillow также использует Amazon CloudWatch для мониторинга работы отдельных облачных ресурсов.

Zillow продолжает использовать сервер загрузки (DLS) в собственном центре обработки данных для управления запросами на загрузку из лент объявлений, а в качестве облачного интерфейса для сервера DLS используется API REST сервиса Amazon Elastic Beanstalk. Этот сервис обрабатывает каждый запрос на загрузку изображения и помещает его в очередь сервиса Amazon Simple Queue Service (Amazon SQS), где каждой ленте объявлений соответствует отдельная очередь. «С SQS мы получили систему очередей без необходимости поддерживать эту инфраструктуру самостоятельно», – говорит Михал.

Загрузчик изображений с заданной системой ограничений управляет скоростью и параллельностью загрузки данных на сайт Zillow из каждой ленты-источника, что позволяет компании использовать преимущества быстрой загрузки изображений от одних поставщиков и не допускать подавления других поставщиков, которые не предоставляют такой возможности. Если загрузка прошла успешно, Zillow записывает исходное изображение на сервер Amazon S3 для дальнейшей обработки.

При обработке изображений Zillow обращается к исходным файлам в хранилище S3 и обрабатывает их с помощью различных методов улучшения качества изображения, параллельно создавая для каждого изображения набор стандартных размеров. Все изображения доставляются пользователям из Amazon S3 и кэшируются в Amazon CloudFront. В среднем компания выдает пользователям около 15 000 изображений в секунду.

С помощью AWS Zillow повышает качество обслуживания покупателей жилья и арендаторов, агентов по недвижимости и других посетителей сайта. «После перехода на AWS нам больше не приходится беспокоиться об очистке кэша или нехватке ресурсов. Мы получили нужный уровень масштабируемости и производительности, чтобы обеспечить пользователям сайта Zillow столь необходимую возможность просмотра высококачественных изображений объектов недвижимости», – заключает Дауд. Zillow теперь может в течение дня масштабировать ресурсы для загрузки и обработки изображений в зависимости от уровня текущей нагрузки. Поскольку изображения каждой ленты объявлений теперь загружаются независимо друг от друга, Zillow может использовать преимущества источников с высокой пропускной способностью и поддержкой параллельных процессов и сокращать ресурсы для работы с источниками, которые не обладают такими характеристиками. Кроме того, Amazon S3 предоставляет компании практически неограниченное по объему объектное хранилище, избавляя от необходимости покупать и устанавливать дополнительные серверы или жесткие диски для расширения ресурсов.

Используя Amazon CloudFront наряду с Amazon S3, Zillow может не беспокоиться по поводу эффективности показа изображений. «Наша полоса пропускания теперь гораздо шире, чем раньше, поэтому мы можем о ней и не думать, – говорит Михал. – И уж точно не стоит беспокоиться о том, что закончится место в хранилище S3».

Кроме этого, за счет переноса своей системы обработки и доставки изображений в AWS Zillow снизила расходы на эксплуатацию. «С Amazon CloudFront наши расходы в месяц не достигают и половины той суммы, которую мы платили за прежнюю систему доставки, – делится Михал. – И нам больше не приходится тратить деньги на апгрейд оборудования сетевых хранилищ».

За счет использования Amazon S3 и Amazon CloudFront доступность системы обработки и доставки изображений компании значительно выросла. «При помощи S3 наши объекты реплицируются тремя способами в рамках одного региона, поэтому даже при отказе одной зоны доступности запросы пользователей все равно обрабатываются без дополнительных усилий по разработке с нашей стороны», – объясняет Михал.

Аварийное восстановление также удалось улучшить. «Мы определенно извлекаем выгоду из распределенной географии AWS, – говорит Михал. – В рамках AWS существует целый ряд регионов и зон доступности внутри регионов, поэтому мы не только генерируем динамический контент ближе к пользователям, но и получаем улучшенные возможности аварийного восстановления».

Zillow теперь может гибко реагировать на изменение потребностей в ресурсах. «Я могу запустить инстансы Amazon EC2 в любой момент, если нужно провести обновление приложения до новой основной версии. Новая база раздачи Amazon CloudFront тоже создается с помощью всего нескольких щелчков мышью, – говорит Дауд. – Благодаря AWS мы можем развиваться гораздо быстрее».

Кроме прочего, компания теперь может наглядно контролировать производительность системы. «У нас были некоторые задержки при обработке изображений, а первоначальные версии наших облачных приложений не выдавали достаточного количества метрик производительности, и мы не могли понять, какой компонент конвейера вызывает задержку, – говорит Михал. – Мы начали использовать Amazon CloudWatch для отслеживания задержек и получили гораздо более четкое представление об их причинах, а также смогли принять меры для их устранения».

Zillow продолжит поиск дополнительных возможностей для переноса своих сервисов в облачную среду. «Когда мы начали миграцию на платформу AWS, CloudFront был еще новым сервисом, и мы понимали, что рискуем, – говорит Михал. – Тем не менее этот риск себя оправдал. Мы обязательно будем рассматривать возможность использования AWS в своих новых проектах и сервисах. Полученные результаты просто великолепны».

Подробнее о том, как AWS может помочь улучшить производительность и повысить масштабируемость систем обработки и доставки изображений, см. на странице сведений об Amazon CloudFront: http://aws.amazon.com/cloudfront/.