Zillow 案例研究
2015 年
每天,数以千万的潜在购房者、售房者和租房者以及代理和物业经理都会使用 Zillow 网站来浏览房屋和公寓房源、选择房屋贷款并查找全美 1.1 亿房屋的相关信息。这个热门站点由 Zillow Group 所有,该公司拥有一系列最大的在线房地产和房屋相关品牌。除了 Zillow 之外,Zillow Group 还经营着 Trulia、HotPads 和 StreetEasy。
迁移到 AWS 之后,我们不必再担心缓存刷新或容量的问题。我们拥有了提供高质量房地产图像所需的可扩展性和性能,这对于 Zillow 用户体验来说至关重要。”
Feroze Daud
Zillow Group 高级软件开发工程师
挑战
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 说道。
为什么选择 Amazon Web Services
为应对图像系统在可扩展性、性能和灾难恢复方面面临的挑战,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 是实现这一点最简单的方法,我们无需部署一堆静态实例,也无需编写自己的 auto-scaling 配置。”
然后,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。我们感觉受益匪浅。”
关于 Zillow
每天,数以千万的潜在购房者、售房者和租房者以及代理和物业经理都会使用 Zillow 网站来浏览房屋和公寓房源、选择房屋贷款并查找全美 1.1 亿房屋的相关信息。
AWS 的优势
- 每月节省超过 50% 的成本
- 提高了可用性和可扩展性
- 更好地了解系统性能
使用的 AWS 服务
Amazon EC2
Amazon Elastic Compute Cloud (Amazon EC2) 是一种 Web 服务,可以在云中提供安全并且可应需调整的计算容量。该服务旨在让开发人员能够更轻松地进行 Web 规模的云计算。
Amazon S3
Amazon Simple Storage Service (Amazon S3) 是一种对象存储服务,提供行业领先的可扩展性、数据可用性、安全性和性能。
了解更多 »
Elastic Beanstalk
AWS Elastic Beanstalk 是一项易于使用的服务,用于在熟悉的服务器(例如 Apache 、Nginx、Passenger 和 IIS )上部署和扩展使用 Java、.NET、PHP、Node.js、Python、Ruby、Go 和 Docker 开发的 Web 应用程序和服务。
了解更多 »
Amazon CloudFront
Amazon CloudFront 是一项快速内容分发网络 (CDN) 服务,可以安全地以低延迟和高传输速度向全球客户分发数据、视频、应用程序和 API,全部都在开发人员友好的环境中完成。
了解更多 »
Amazon CloudWatch
Amazon CloudWatch 是一种面向开发运营工程师、开发人员、站点可靠性工程师 (SRE) 和 IT 经理的监控和可观测性服务。
了解更多 »
Amazon SQS
Amazon Simple Queue Service (SQS) 是一种完全托管的消息队列服务,可让您解耦和扩展微服务、分布式系统和无服务器应用程序。
了解更多 »
开始使用
不同行业和规模的公司都在使用 AWS,将其日常业务运营进行转型。联系我们的专家,立即踏上您的 AWS Cloud 之旅。