5

奈飞Netflix如何同步数以亿计的设备?

 2 years ago
source link: https://www.jdon.com/59947
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

奈飞Netflix如何同步数以亿计的设备?


Netflix 是一种在线视频流媒体服务,以疯狂的规模运行,2.2 亿活跃用户从多个设备访问他们的 Netflix 帐户,因此 Netflix工程师必须确保用户登录的所有不同客户端都是同步的。
为所有用户在所有这些设备之间进行同步,需要 Netflix 的后端与所有各种客户端(iOS、Android、智能电视、网络浏览器、Roku 等)之间进行大量通信,峰值时,每秒可以处理大约 150,000 个事件。

Netflix如何为所有 2 亿用户保持用户设备同步?

  • Netflix 的快速事件通知系统 (RENO) 及其解决的问题
  • RENO 背后的设计决策
  • RENO的架构

RENO 
Netflix 构建了他们的快速事件通知系统 RENO,有几个关键的设计决策

  1. 单一事件源——RENO 必须跟踪的所有各种事件(查看活动、推荐等)都来自不同的内部系统。为了简化这一点,工程师使用了一个事件管理引擎作为间接级别。这个事件管理引擎层是 RENO 的单一事件源。来自各种后端服务的所有事件都进入事件管理引擎,然后再传递给 RENO。
  2. 事件优先级 - 如果一个用户改变了他们的设置,与其他事件相比,该事件变化应该有非常高的优先级。因此,RENO处理的每个事件类型都有一个分配给它的优先级,然后RENO按该事件优先级进行分片。这样,Netflix可以根据事件的优先级,对系统配置和扩展策略进行不同的调整。
  3. 混合通信模式--RENO必须支持移动设备、智能电视、浏览器等。虽然移动设备几乎总是连接到互联网并可到达,但智能电视只有在使用时才会在线。因此,RENO必须依靠混合推送和拉动的通信模式,服务器试图用推送的方式立即向所有设备发送所有通知。设备将在应用生命周期的不同阶段从后端拉动。单纯使用拉动是行不通的,因为它使移动应用程序过于健谈,而单纯使用推送在设备关闭时是行不通的。
  4. 有针对性的交付 - RENO支持设备特定的通知交付。如果某个通知只需要发送到移动应用程序,RENO可以只向这些设备发送。这大大限制了传出的流量足迹。
  5. 管理高RPS - 在高峰期,RENO每秒提供150,000个事件。这种高负载会给下游服务带来压力。Netflix通过在发送事件前增加各种闸门检查来处理这种高负载。一些gate检查:
    • 旧设备 - 许多事件都是时间敏感的,因此如果事件超过其陈旧阈值,RENO 将不会发送事件
    • 在线设备 - RENO 使用Zuul跟踪当前在线的设备。它只会在设备在线时将事件推送到设备。
    • 重复 - RENO 检查任何重复的传入事件并纠正它。
有一个事件触发器:事件触发来自各种后台服务,处理诸如电影推荐、档案变化、观看活动等。
每当有任何变化,就会产生一个事件。这些事件被送到事件管理引擎。

事件管理引擎作为一个中介层,是RENO的单一的事件来源。
从那里,事件被传递到亚马逊SQS队列。这些队列是根据事件优先级分片的。

AWS实例集群将订阅各种队列,然后处理这些队列的事件。它们将为所有设备生成可操作的通知。

然后,这些通知被发送到Netflix的外发消息系统。这个系统负责向所有各种设备发送。
这些通知也将被发送到Cassandra数据库。当设备需要拉取通知时,他们可以使用Cassandra数据库(记住这是一个推和拉的混合通信模式)。

由于按事件优先级进行分片,并可向处理集群层添加更多的机器,它是可以横向扩展的。

详细点击标题。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK