奈飞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数据库(记住这是一个推和拉的混合通信模式)。

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

详细点击标题。