技术 | Netflix AWS 应用深度解析


(suibiantell) #1

相信很多朋友都对很多 Netflix 的电视剧耳熟能详了。作为全球最大的网路流视频点播服务网站,Netflix 早在2010年底就将把它的计算平台迁移到了 AWS 云服务上面。也许就是因为这样的战略性转变,使得 Netflix 能更专注地将更多的资源投入到内容制作上,在接下来的几年里出品了不少如《纸牌屋》(House of Cards)、《毒枭》(Nacros)、《王冠》(The Crown) 等优秀的原创剧集。今天这篇文章就来聊聊 Netflix 如何应用 AWS 云计算平台打造一个能服务全球近9千万用户的视频平台。

首先我们来看看一些数字

  • Netflix 的视频服务在高峰时段占据了高达37%的 Internet 流量。相比之下,YouTube 仅占到 15.6%,网页浏览约 6%, Facebook约 2.7%, Amazon Instant Video 约2.0%, Hulu 约1.9%

  • 在 AWS 上共利用超过10万个 EC2 Instances 的80万CPU Cores,且在此基础上有约 20% 的波动

  • 在每个服务区域上的 AWS Elastic Load Balancing 的流量超过 50Gbps

  • 在 S3 上存储和管理超过15亿个对象的 60 PB 的数据。其中每天要丢弃超过 400TB 的过期数据以及新增 600TB 的数据

Netflix 的技术栈在 A 360 Degree View of the Entire Netflix Stack 一文中已经有详细介绍,StackShare 的图表展示了 Netflix 技术栈,其中应用到的主要 AWS 组件包括:EC2、S3、RDS、DynamoDB、ELB、CloudTrail等等。

虽然大家都说迁移到 AWS 云计算平台是大势所趋和未来的方向,但究竟有哪些具体原因使得 Netflix 将所有的计算平台迁移到 AWS 呢?

  • 迁移到 AWS 平台的运行成本的大幅度降低。自从 AWS 服务2006年上线以来,其成本已经降低到了最初的近1/60, 越来越接近运行自己的计算平台的成本。这无疑大大鼓励越来越多的用户迁移到云平台,而越来越多的用户反过来带来规模经济效应使得 AWS 能以更便宜的边际成本提供服务,也就随着 AWS 的市场份额扩大进一步降低价格。

    ![](data:image/svg+xml;utf8,)

Source: Don’t let the “cloud cost war” stop your next Reserved Instance purchase

  • 业界内部的精细分工更符合经济效率的原则。虽然 Netflix 的有实力打造自己的计算数据中心,但是这样并不能将其所有精力集中在开发高质量的视频产品上。因此最有效的办法就是将计算平台打造和维护交给更专业的 AWS 去做。

  • 用户增长和需求的不确定且难以预测。如果像 Netflix 这样规模的一个公司需要建立自己的数据中心,往往需要提前1-2年对数据中心的规模做出较为精确的预测增长来购买硬件以避免额外的开销。但是这样带来的问题就是:如果需求的增长不能达到预期,那么额外的计算资源就是一种浪费;反过来,如果需求的增长远远超出预期,那么就很难在短时间内来扩展现有的计算资源来满足需求。对于 Netflix 提供的视频订阅服务来说,要精确预测用户的未来需求不是一件容易的事情,比如因为某一个热播的剧集订阅用户在一个月内大幅度增加。如果因为数据中心扩容的限制导致了服务质量的降低,则会严重伤害到整体用户体验的。因此 AWS 这种极具弹性计算资源正好使得 Netflix 能快速灵活地扩展或减少系统资源来满足波动和难以预测的需求。

将现有的计算平台从私有的数据中心的迁移到 AWS 平台并不是易事,尤其当运用的规模达到一定程度时,各种意想不到的问题都会接踵而至,那么我们从 Netflix 都能学到什么经验呢?

私有的数据中心和 AWS 有着截然不同的特性,而这些特性会影响到技术栈的任何一层,以至于部分或者整个技术栈都得重新设计和实现。私有的数据中心最大的优势就是硬件的稳定性和一致性。例如在数据中心,硬件的故障率很低,这样就是使得运行在上面的软件设计可以不用考虑太多容错性而专注于性能优化。而且因为数据中心是私有的,没有来自于其他人对计算资源的竞争,因此在软件的构架设计上也比较容易规划。但是一旦转移到 AWS,情况就截然不同了,因为 AWS 的计算资源是由很多客户竞争共享的,计算资源、网络资源的性能都随着整体的需求不断波动甚至出现故障。这样也对整个技术栈的设计带来了不小的挑战,对于 Netflix 这样规模的一个系统来说,最为重要的就是系统的容错性。

Netflix 的工程师在 Lessons Netflix Learned from the AWS Outage 一文中描述了的,一旦 AWS 故障发生,Netflix 也不能幸免,而一个区域性的错误就有可能导致整个系统雪崩式的灾难发生。在实际构建大规模的 AWS 应用中,资源的不稳定性和故障必须放到首要因素来考虑,例如如果发生了区域性的故障,如何将请求在其他可用的资源上进行平衡,如何分布冗余的数据使得灾难性的后果不会发生都是一个云计算平台工程师必须考虑的问题。

最后,Netflix 在 AWS 的大量投入也促成了许多十分实用和优秀的 AWS 工具的产生。在上一篇《玩转 AWS 的必备工具》中我们已经提到了 Netflix 的 ICE,这是一个专门针对 AWS 的资源使用量和成本监控的开源工具。和 AWS 提供的 CloudWatch 不同,ICE 侧重于从一个顶层管理者的角度对一个企业组织内部的众多团队使用 AWS 资源的状况和开销进行细粒度的分析和把握,以实现资源分配最优化的目的。

Eureka 是 Netflix 发布的另外一个开源项目,用于提供服务注册 (Service Registry/Discovery) 和负载平衡 (Load Balancing) 服务,类似 ZookeeperDoozerConsul。Eureka 包含用 Java 实现的一个服务器端和一个客户端。Netflix 在 AWS 的每一个 Availability Zone 里都运行一个 Eureka 服务器,这些服务器通过非同步的协议来复制它们之间的状态来实现高可用性和高容错性。服务的注册和发现是通过客户端来完成的,客户端通过定期和服务器通信在服务器端更新其状态。如果 Eureka 中的某个服务器下线了,剩下的几个服务器仍然可以在自己的 availbility zone 中正常工作知道离线的服务器重新恢复正常重新加入到原来的服务器组里。

Chaos Monkey 是一个用于测试系统稳定和可靠性的模拟工具。在 CS211 AWS云平台工程师训练营课程中我们将会学习到如何应用 AWS 的 Autoscaling group 和 spot instance 来大幅度降低计算资源运行成本,但同时系统需要处理廉价计算资源的不稳定性带来的可靠性问题。而 Chaos Monkey 就是用于模拟在这样的环境下各种应用是如何处理运行时错误的。Chaos Monkey 可被配置用于在特定的时间按照特定的概率来异常地终止某个运行的服务来模拟实际运行中的故障情况,然后用户便可以通过系统行为来发现系统中的被错误影响的主要部分以及检验和设计在某种错误情况下系统的容错能力。

Netflix 的另一个开源项目:Security Monkey 是一个 AWS 安全监控和分析系统。想象一下如果需要部署一个由多个 AWS 账户组成、跨越多个 availability zones,且非封闭面向整个 internent 的系统,系统的安全配置是至关重要的。虽然 AWS 提供了一系列高质量的安全组件,例如 Security Group, IAM Roles,S3 Bucket Policty,来帮助用户实现其安全性的要求,但是这些对于用户来说,要正确地配置这些安全的组件却不是一件容易的事情。有可能一个小小的配置更改就可能导致灾难性的安全隐患且十分不容易被察觉。Security Monkey 就是用来检测这些安全配置的更改,以及验证这些安全部署是否和整体的安全策略兼容的系统工具。简单的来说,Security Monkey 由三部分组成:监控服务 Watcher、通知服务 Notifier、和审核服务 Auditor。监控服务负责实时监控是否有新的安全配置更新被部署到到系统中,一旦监测到有安全配置的改变,通知服务会发送相应的通知给系统管理员或者安全审计员。而审核服务则定期用一系列的安全策略规则来测试系统,如果发现系统中有违反当前安全策略的配置,则立即通知负责安全的系统管理员。

本文作者:Dun

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

------------------------这里是分割线----------------------

本周AWS相关公开课:设计实现12亿纽约出租车行驶数据AWS处理平台

  • 美西时间1月20日 07pm

  • 美东时间1月20日 10pm

  • 北京时间1月21日 11am

免费报名链接:Welcome! You are invited to join a webinar: CS211 AWS Data Processing Infrastructure免费第一节课. After registering, you will receive a confirmation email about joining the event.