Netflix Pushy 平台的演进
Netflix 最近分享了其 WebSocket 消息平台 Pushy 的演进细节,该平台支持推送通知和跨多种设备的设备间通信,是其产品生态系统的关键组成部分。为了确保平台的可扩展性和可靠性,并支持新功能,Netflix 的工程师对 Pushy 生态系统进行了多项改进。
Pushy 的重要性与背景
Pushy 是 Netflix 产品生态系统的核心服务之一,负责向运行在电视、游戏机、移动设备和浏览器等多种设备上的 Netflix 应用程序发送通知消息。该平台已经存在多年,早在 2018 年,Susheel Aroskar 就曾在 QCon New York 上讨论了 Zuul Push 的动机、目标和初始设计。
Pushy 的使用增长与现代化需求
在过去的五年中,Pushy 的并发连接数从数千万增长到数亿,每秒发送的消息量达到 30 万条。为了支持这种增长,Netflix 的工程师 Karthik Yagna、Baskar Odayarkoil 和 Alex Ellis 在最近的博客中讨论了 Pushy 的历史使用增长情况以及平台现代化的需求。
改进措施
为了应对 Pushy 的可扩展性和性能挑战,工程师们从多个方面进行了改进:
- 实例类型优化:切换到性能更高且更具成本效益的实例类型,将每个节点的平均并发连接数从 6 万提升到 20 万,并具备扩展到 40 万的能力。
- 扩展策略:采用基于连接数的指数扩展策略,确保连接在服务器池中的均衡分布。
- 缓存替换:将通知交付流(Push Registry)中的缓存实现从 Dynomite(Netflix 的开源 Redis 封装)替换为内部开发的通用键值数据库服务 KeyValue。
- 消息处理器重构:将基于 Mantis 作业的消息处理器重构为独立的 Spring Boot 服务,消费来自 Apache Kafka 主题的消息,以实现自动水平扩展、金丝雀部署和红/黑部署,并提高可观测性。
新功能与组件
随着 Netflix 通知交付需求的变化,平台引入了新功能和新组件:
- 设备列表服务:提供查找同一账户下注册设备的能力,结合 Push Registry,支持设备间的消息传递。
- 内部协议栈:创建了三层内部协议栈,包括 WebSocket 和 Pushy、设备间协议以及客户端应用协议。设备间协议使用 JSON 传输应用级消息。
进一步优化
为了提高消息平台的性能,工程师们还进行了以下优化:
- 目标设备数据缓存:缓存目标设备数据以加快查找速度。
- WebSocket 连接管理与调优:优化 WebSocket 连接管理和性能调优。
- 客户端切换:切换到 OkHttp 客户端以提升性能。
通过这些改进,Pushy 平台在可扩展性、性能和可靠性方面得到了显著提升,能够更好地支持 Netflix 日益增长的通知交付需求。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。