在当今数字化时代,实时通信和推送通知已经成为许多应用的核心功能。奈飞(Netflix)作为一家全球领先的流媒体平台,一直在不断优化其技术栈,以满足日益增长的用户需求。近日,奈飞分享了其WebSocket平台——Pushy的演进细节,揭示了该平台如何从数千万个并发连接发展到数亿个并发连接,并且每秒发送的消息数经常达到30万条。本文将深入探讨Pushy的演进历程及其背后的技术改进,展示奈飞如何通过一系列创新措施确保其平台的可扩展性和可靠性。
Pushy的演进
Pushy是奈飞内部的一个WebSocket消息投递平台,主要用于向各种设备发送通知消息。在过去五年里,Pushy经历了巨大的增长,从数千万个并发连接增加到了数亿个并发连接。这一增长的背后,是奈飞工程师团队对平台进行的一系列重大改进。他们重新审视了Pushy过去的假设和设计决策,着眼于未来的角色和稳定性。为了应对这一增长,工程师们对通知投递中涉及的许多服务进行了改进,并在考虑可扩展性、性能和可靠性的情况下完全重写了某些服务。
技术改进
可扩展性
为了提高Pushy的可扩展性,奈飞工程师们采用了更高性能且更具成本效益的实例类型。每个节点的平均并发连接数从6万个增加到了20万个,剩余空间也增加到了40万个。此外,Pushy还依赖于基于连接数量的指数级扩展策略,以在服务器池中均衡连接数。这些改进显著提升了平台的可扩展性,使其能够应对更大的并发连接需求。
缓存和数据库
为了进一步优化Pushy,奈飞用内部开发的通用键值数据库服务KeyValue取代了来自奈飞开源Redis包装器Dynomite的通知投递流(Push Registry)中的缓存实现。这一改变不仅提高了系统的性能,还增强了系统的稳定性和可靠性。
消息处理器
基于Mantis作业的消息处理器被重新设计成一个独立的Spring Boot服务,该服务使用Apache Kafka的主题消息。这一设计利用了自动水平扩展、金丝雀和红/黑部署,以及更高的可观测性。这些改进不仅提高了系统的灵活性,还增强了其在高负载下的稳定性和可靠性。
设备到设备的消息传递
随着奈飞通知投递用例的变化,越来越强调从异步投递转向直接(同步)推送和设备到设备的消息投递。为此,奈飞创建了一个内部协议栈,支持许多定制的消息投递用例。该协议栈具有三个不同的层:WebSocket和Pushy、设备到设备的协议和客户端应用程序协议。设备到设备的协议使用JSON在设备之间传输应用程序级消息。这一改进不仅提高了系统的灵活性,还增强了其在不同设备之间的通信能力。
优化措施
缓存目标设备数据
为了缩短查找时间,奈飞在缓存目标设备数据方面进行了优化。这一措施显著提高了系统的响应速度,使得Pushy能够更快速地处理大量并发连接。
WebSocket连接管理
WebSocket连接管理也是优化的关键方面之一。通过调优WebSocket连接,奈飞进一步提高了系统的性能和稳定性。
客户端优化
此外,奈飞还切换到了OkHttp客户端,进一步提升了系统的性能和稳定性。这一改变不仅提高了系统的响应速度,还增强了其在高负载下的表现。
结论
奈飞通过一系列技术改进,成功地将Pushy从数千万个并发连接发展到了数亿个并发连接,并且每秒发送的消息数经常达到30万条。这些改进不仅显著提升了系统的可扩展性和可靠性,还增强了其在不同设备之间的通信能力。Pushy的演进历程展示了奈飞如何通过不断创新和优化,确保其平台能够满足日益增长的用户需求。
参考文献
通过上述分析,我们可以看到奈飞在技术优化方面的不懈努力,以及其对平台演进的深刻洞察。这些改进不仅为奈飞的业务提供了强大的支持,也为其他企业提供了宝贵的借鉴经验。
Views: 0