每天,数以千万的潜在购房者、售房者和租房者以及代理和物业经理都会使用 Zillow 网站来浏览房屋和公寓房源、选择房屋贷款并查找全美 1.1 亿房屋的相关信息。这个热门站点由 Zillow Group 所有,该公司拥有一系列最大的在线房地产和房屋相关品牌。除了 Zillow 之外,Zillow Group 还经营着 TruliaHotPadsStreetEasy

Zillow 每天需要处理 300 多万张新图像,包括房源照片、贷款人和代理的个人资料图片,以及 Zillow Digs 站点上的房屋效果图。“在流量高峰时,我们每秒会接收来自桌面和移动客户端的 17000 个图像请求。”Zillow Group 的 Unix 系统工程经理 Nick Michal 说道。

随着 Zillow 的受欢迎程度不断增加,并且代理开始发布分辨率更高的房源照片,该公司原有的图像系统无法再满足需求。原有的图像系统位于托管数据中心中,图像需从队列中下载,以金字塔 TIFF 格式存储于网络连接存储 (NAS) 设备上,并通过本地 Squid 服务提供给内容分发网络 (CDN)。“这种方式的成本非常高,而且我们需要依赖 CDN 来实现较高的缓存命中率。如果达不到高命中率,我们就不能有效提供图像。我们的容量以前每天都处接近饱和的状态。”Michal 说道。

此外,Zillow 还曾面临着图像处理性能问题,因为一些图像是手动上传的,而另外一些则来自批量上传数据,需要下载。从批量上传数据下载新图像的速度往往不可预测,而某些图像源支持的下载速度比其他源更快,并发性也更高。因此,如果排在队列前面的图像速度较慢或存在问题,那么其他图像的下载就会受阻。“Zillow 不能出现带宽问题,因为如果打开网站后看不到图像,他们就不会再查看房源信息。”Zillow Group 高级软件开发工程师 Feroze Daud 说道,“那会让用户感到沮丧。”

此外,Zillow 用于将图像以金字塔 TIFF 格式进行存储的图像处理工具已经过时,不能轻松扩展。“我们很难提升图像质量,比如消除纯色边框。”Daud 说道。灾难恢复是另外一项严重的问题。“将所有内容都存储在一个数据中心的风险非常高。”Michal 说道。

为应对图像系统在可扩展性、性能和灾难恢复方面面临的挑战,Zillow 决定采用云端基础设施。“从总体成本和易管理性角度看来,云是一种非常合理的方案。”Michal 说道。对各种云技术进行评估之后,Zillow 选择了 Amazon Web Services (AWS)。“AWS 进军云领域的时间最久,也一直处于主导地位。”Michal 说道,“此外,我们之前收购的许多公司都在使用 AWS。”

该公司将其图像托管和分发系统从物理主机托管设施迁移到了 AWS,同时将 Amazon Elastic Compute Cloud (Amazon EC2) 实例和 Amazon Simple Storage Service (Amazon S3) 用于图像对象存储。目前,Zillow 在 Amazon S3 中存储了将近 100TB 数据,其中包括 3 亿张图像以及超过 10 亿个对象。“在传统的文件系统上维护数十亿对象的效果不是很好。”Michal 说道,“我们需要跨多个文件系统拆分这些对象,在管理上,这是一个噩梦。而 Amazon S3 具有较高的可扩展性,似乎就是适合我们的技术。”

此外,Zillow 还开始使用 AWS Elastic Beanstalk,这项服务可用于部署和扩展 Web 应用程序及服务。开发人员可以将代码上传至 Elastic Beanstalk,之后,该服务便会自动处理从容量预置、负载均衡、自动扩展到应用程序运行状况监控的所有部署工作。该公司正在使用 Elastic Beanstalk 工作线程环境通过自定义代码来运行 Python Imaging Library。“由于我们会以随意方式接收数据,并且处理的上传数据会一次性为系统带来大量工作,因此我们需要扩展图像转换器。”Daud 说道,“使用 AWS Elastic Beanstalk 是实现这一点的最简单的方法,我们无需部署一堆静态实例,也无需编写自己的自动扩展配置。”

然后,Zillow 将大部分 CDN 工作负载从 Akamai 迁移到了 Amazon CloudFront – 这是一项内容分发 Web 服务,用于分发距离用户更近的 Zillow 网站内容。“与 Akamai 相比,AWS CloudFront 的价格十分低廉,并且能很好地与 Amazon S3 集成。”Michal 说道。Zillow 还在使用 Amazon CloudWatch 来监控某些云资源。

Zillow 在数据中心内使用下载服务器 (DLS) 来管理房源上传数据发出的图像下载请求,并将 Amazon Elastic Beanstalk REST API 用作 DLS 在云中的前端服务。该服务会接受每个图像下载请求,并将其置于每个上传数据的 Amazon Simple Queue Service (Amazon SQS) 消息队列服务中。“使用 SQS 后,我们拥有了一个队列系统,同时无需自行支持基础设施。”Michal 说道。

一个限制性下载程序会控制 Zillow 为每个上传数据源下载图像的速度和并发性,这样一来,该公司可以充分利用支持快速下载的图像提供商,同时不会给不支持快速下载的提供商带来过多负担。如果图像下载成功,Zillow 会将原始图像写入 Amazon S3,以便进行图像处理。

在图像处理过程中,Zillow 会提取存储在 S3 中的原始图像,通过各种图像质量处理方法来处理这些图像,同时针对每张图像生成一系列标准尺寸。所有图像都由 Amazon S3 提供,并缓存在 Amazon CloudFront 中。该公司平均每秒可以提供 15000 张图像。

借助 AWS,Zillow 可以为潜在购房者和租房者、房地产代理及其他站点访问者营造更出色的体验。“迁移到 AWS 之后,我们不必再担心缓存刷新或容量的问题。我们拥有了提供高质量房地产图像所需的可扩展性和性能,这对于 Zillow 用户体验来说至关重要。”Daud 说道。Zillow 可以扩展图像下载和处理能力,可以应对一天中不断变化的传入图像量。同时,由于各上传数据源的图像现在都独立下载,因此 Zillow 可以充分利用支持高带宽和并发性的源,并限制从不支持高带宽和并发性的源的下载。此外,Amazon S3 为该公司提供了接近无限的对象存储空间,让他们无需通过订购或安装更多服务器或驱动器来增加容量。

将 Amazon CloudFront 与 Amazon S3 配合使用之后,Zillow 对其图像系统的性能更有信心。“我们拥有了大大多于以往的带宽,因此我们甚至无需再考虑这一问题。”Michal 说道,“我们绝对不担心 S3 是否会容量不足。”

Zillow 将图像处理和投放系统迁移至 AWS 后,其运维成本也得到降低。“使用 Amazon CloudFront 后,我们每个月为 CDN 花费的成本不到以前的一半。”Michal 说道,“我们不再需要投入资金来整体升级到 NAS 设备。”

该公司利用 Amazon S3 和 Amazon CloudFront 提高了图像系统的可用性。“借助 S3,我们在一个区域内实现对象的三向复制,因此,即使一个可用区发生故障,我们也可以向用户提供流量,这个过程不需要进行任何开发工作。”Michal 说道。

灾难恢复能力也得到了增强。“我们肯定能够利用 AWS 的地理分布优势。”Michal 说道,“AWS 有多个区域,这些区域中又有大量可用区,因此,我们不仅能够在距离用户更近的位置生成动态内容,还可以提高我们的灾难恢复能力。”

Zillow 现在可以更灵活地满足可扩展性方面的需求。“如果我想进行重大应用程序版本变更,可以随时启动 Amazon EC2 实例,或者只需单击几下就可以创建一个新的 Amazon CloudFront。”Daud 说道,“总体来说,借助 AWS,我们能够更快速地发展。”

此外,该组织还可以更好地了解系统性能。“我们在图像处理方面存在延迟,而我们一开始使用的云应用程序版本无法提供足够多的指标,因此,我们没法弄清是线路中的哪个组件导致了延迟。”Michal 说道,“在我们开始使用 Amazon CloudWatch 来跟踪延迟之后,我们更清楚地了解了原因,并采取相应措施消除了延迟。”

Zillow 将继续寻找其他机会,将服务迁移到云中。“在我们首次迁移到 AWS 时,CloudFront 相对还比较新,那时我们认为存在风险。”Michal 说道,“不过,事实证明它是很有效的。今后,对于新的项目和服务,我们还会考虑使用 AWS。我们感觉受益匪浅。”

要详细了解 AWS 如何帮助您提升图像处理与投放系统的扩展能力和性能,请访问我们的 Amazon CloudFront 详情页面:http://aws.amazon.com/cloudfront/