浅析在线影视点播巨头Netflix的信息处理架构

所属分类: 网站运营 / 建站经验 阅读数: 118
收藏 0 赞 0 分享

Netflix是一家在线影片租赁提供商,该公司连续五次被评为顾客最满意的网站,在过去的7年中,Netflix流媒体服务从偶尔有数千用户在线观看发展到了数百万用户平均每月观看超过20亿个小时的规模。Netflix之所以能够如此成功,离不开对用户行为数据的收集与分析,那么Netflix会收集哪些数据,这些数据会用来做什么,其处理架构又是什么呢?

事实上,当用户开始在Netflix的网站上观看电影或者电视节目的时候,Netflix的数据系统会创建一个“观看会话(view)”,描述该会话的所有事件信息都会被收集起来。该观看会话数据架构能够应对从用户体验到数据分析的诸多场景,其中最主要的场景有三个:

用户看了哪些视频?系统需要知道每一个用户的所有观看历史,以便于为用户推荐相关的视频内容,同时在页面上的“最近观看”一栏中显示观看历史。用户所看的内容对于用户兴趣的衡量,产品和内容的决定非常重要。
用户从哪里离开了视频?对于每一个电影或者电视节目,Netflix会记录每一个用户都看到了哪里,从哪个时间点离开的。这使得Netflix的用户能够在同一个或者另一个设备上继续观看视频。
当前帐户现在还在观看哪些视频?家庭成员间的帐户共享使得任何人可以在任何时候观看自己喜欢的视频,但是这也意味着当帐户同时在线数超限的时候,必须要有人放弃观看。针对这种场景,Netflix的观看会话数据系统会收集每一个会话的周期性信号以便于决定某个成员是否还在观看相关视频。
这些场景的实现离不开强大而稳定的数据处理系统,Netflix目前的系统架构由早期的单数据库应用程序演变而来,当时的主要需求是能够低延迟地为用户提供视频服务,同时还能够处理来自于数百万Netflix流设备的快速增长的数据集。在过去3年多的时间里,Netflix一直在不断地改进该架构,现在这套系统每天能够处理千亿左右的事件。

当前的架构图如下:
20163294218587.jpg (618×347)

整个架构最主要的接口是观看会话服务,它分为有状态层和无状态层两部分。有状态层在内存中存有所有活动视图的最新数据。通过对用户帐户ID进行mod N的模运算,数据被简单地划分为N个有状态的节点。当有状态的节点上线的时候,系统会通过一个位置选择流程决定哪部分数据属于它们。所有的持久化数据都存储在Cassandra中,在Cassandra之上有一个Memcached用来保证低延迟的读取路径,但是采用这种方式会话数据有可能会过时,同时如果一个有状态的节点出现了错误,那么1/n的浏览数据将不能读写。无状态层的引入正是为了解决这一问题,它提升了系统的可用性,当有状态的节点无法访问的时候,该层会将过时的数据反馈给用户。

但是即使是做了诸多改进,以上架构依然存在一些缺陷:

虽然有状态层使用一个简单的、服从热点分布的分片技术,但是Cassandra层并不服从这些热点;同时,如果将其从一个AWS Region移动到多个AWS Region上运行,那么必须定制一种机制来实现分布在不同Region上的状态层之间的状态通信,极大地增加了系统的复杂性。
对于观看会话服务,它封装了会话数据的收集、处理和提供功能,随着系统的演变,功能的增多,该服务的责任也越来越多,增加了运维的难度。
虽然Memcached提供了非常好的吞吐量和延迟特性,但是使用一种能够为一等数据类型和操作(例如append)提供原生支持的技术能够更好地满足相关需求。
为了扩展系统满足下一个数量级的需要,Netflix正在重新思考自己的基础架构,新系统在设计时考虑的主要设计原则包括:

可用性比一致性更重要。
微服务。对于有状态架构中柔和在一起的组件,根据它们的主要目的分离成单独的服务——或收集、处理或提供数据。将状态管理功能托管到持久化层,让应用程序层无状态,同时组件之间通过事件队列解耦。
混合持久化。使用多种持久化技术,利用每一种方案的优势。使用Cassandra实现高容量、低延迟的写。使用Redis实现高容量、低延迟的读。
遵循以上原则的新架构实现如下:
20163294244829.png (502×309)

当然,这个架构图也仅仅是Netflix目前的设计图,至于实现到何种程度了,我们还未可知。Netflix表示对关键系统进行重新架构以使其能够扩展到下一个数量级是一项非常困难的工作,需要长时间的开发、测试和验证,同时迁移也不是那么容易。但是以这些架构原则为指导,Netflix相信他们正在构建的下一代系统能够满足自己大规模、快速增长的需要。

更多精彩内容其他人还在看

医疗行业怎么做好网站建设?建站注意事项及经验

踏足互联网,医疗行业可以将自身优势资源整合到网站中去,为大家提供病理知识、在线咨询或者预约就诊服务等。那么如何做好医疗行业的网站建设呢?本期为大家分享一些在建站过程中需要注意的东西和建站经验,希望能给大家带来帮助
收藏 0 赞 0 分享

企业应该怎么策划自己的网站?规划网站注意事项总结

网站建设虽然是一个比较复杂的过程,包括网站策划、网页设计、程序开发、上传网页、发布网站等,那么企业应该怎么策划自己的网站?下面为大家介绍规划网站注意事项,来看看吧
收藏 0 赞 0 分享

大众点评网站的支付系统构建经验分享

大众点评网站的服务器端在迭代的同时保持了很好的扩展性和可用性,这里我们来看一下大众点评网站的支付系统构建经验分享,主要以大众点评的支付渠道网关系统为核心.
收藏 0 赞 0 分享

网易蜂巢的容器运维管理服务使用指南

网易蜂巢提供对Docker容器的警报和性能监控服务,通过图形化面板操作十分简洁,这里前提假设服务器端已经架设在容器中,那么接下来就让我们来看网易蜂巢的容器运维管理服务使用指南
收藏 0 赞 0 分享

为什么认为自助建站不适合SEO?自助建站工具搭建出来的网站对SEO的支持如何?

最近有一个做SEO优化朋友询问为什么自助建站做出来的网站排名很难做上去?自助建站工具搭建出来的网站真的适合SEO吗?本文将提供相关内容供大家了解,希望对大家有所帮助和启发
收藏 0 赞 0 分享

支持支付宝的高性价比美国VPS主机Pzea的购买及使用评测

Pzea一直是低价位VPS的人气之选,在美国三个大城市分别建有机房,且构建于KVM虚拟机之上,性能较为出众,接下来就为大家来分享一下这个支持支付宝的高性价比美国VPS主机Pzea的购买及使用评测
收藏 0 赞 0 分享

网站页面一定需要HTML静态化吗 实战说明静态化的必要性

很多刚开始运营网站的伙伴们都要知道网站内的页面需要进行URL优化吗?如设置静态化等,对此,本文就为大家解析一下网站静态化的必要性,有兴趣的朋友们可以了解下哦
收藏 0 赞 0 分享

移动端界面设计之尺寸基础知识学习

这篇文章主要为大家详细介绍了移动端界面设计之尺寸基础知识,通俗易懂的学习教程帮助大家了解关于移动端设计尺寸的相关知识,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

如何提高用户体验?优秀的用户体验需要遵守的十大准则

自己的网站做的很漂亮却依然没有排名,这是为什么呢?这个时候,你应该考虑你是否关注到用户体验?而如何提高用户体验又是你要考虑的问题了,本文将提供优秀的用户体验需要遵守的十大准则供大家了解,希望对大家有所帮助和启发
收藏 0 赞 0 分享

DoubleClick Ad Exchange Seller(adx) 为您的广告代码生成异步代码的方法

这篇文章主要介绍了DoubleClick Ad Exchange Seller(adx) 为您的广告代码生成异步代码的方法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多