Recall.ai:百万美元的WebSocket教训,以及高效IPC的诞生
引言: 一家为Zoom、Google Meet和Microsoft Teams等平台提供会议机器人的公司Recall.ai,最近公开分享了一个令人震惊的案例:他们仅仅因为使用了WebSocket,每年就多支付了超过一百万美元的AWS费用。这个案例不仅揭示了云计算成本优化的重要性,也为实时应用的架构设计提供了宝贵的经验教训。
一、WebSocket的“甜蜜陷阱”:高性能背后的高昂代价
Recall.ai的平台依赖于AWS部署环境中的实时视频处理,最初选择WebSocket作为其进程间通信(IPC)机制。WebSocket以其“像Web API一样快”的特性,以及方便的JS运行时访问和对二进制数据的支持而闻名,尤其其在Chromium中的内置支持更是吸引了Recall.ai团队。 然而,看似完美的解决方案却隐藏着巨大的成本风险。
Recall.ai工程团队负责人Elliot Levin指出,在AWS上每秒以IPC方式传输1TB的视频,即使处理效率不高,也会产生巨额费用。 他们最初的分析将大部分CPU使用归因于视频编码和解码,但最终发现,最大的CPU消耗者居然是接收数据的Python WebSocket客户端和发送数据的Chromium WebSocket实现。 这凸显了WebSocket在高带宽、高吞吐量场景下潜在的效率问题,以及其对服务器资源的巨大消耗。 这并非个例,InfoQ文章中也引用了Momento的生态系统工程师Allen Helton的观点:即使抽象到超高层,使用WebSocket仍然很困难,真正需要的可能是PubSub。
二、寻找替代方案:从TCP/IP到自定义环形缓冲
为了降低成本,Recall.ai团队探索了多种替代方案。他们首先考虑了原始的TCP/IP和Unix Domain Socket。这两种方案都需要在用户空间和内核空间之间复制数据,效率相对较低。 此外,他们也考虑了共享内存,但由于缺乏标准接口,最终放弃了这个方案。
最终,Recall.ai团队决定设计一种自定义的传输方式。他们选择了环形缓冲(ring buffer)作为高层级的传输结构。环形缓冲是一种高效的数据结构,可以实现快速的数据传输和低延迟的通信。 通过自定义实现,他们能够最大限度地减少数据复制,从而显著提高效率并降低成本。
三、技术细节与争议:Mojo与自定义方案的权衡
Recall.ai的解决方案在Hacker News上引发了一些讨论。一些开发者指出,Chromium已经内置了使用共享内存的零拷贝IPC机制——Mojo。 Mojo允许浏览器进程之间进行高效的通信,无需担心平台特定代码的问题。 这引发了关于Recall.ai选择自定义环形缓冲而不是利用现有Mojo机制的疑问。
对此,我们可以理解为,Recall.ai的自定义方案可能更符合其特定的需求和优化目标,或者在当时的技术条件下,Mojo的集成难度较高。 自定义方案也允许Recall.ai对传输层进行更精细的控制,以达到最佳的性能和成本平衡。 这体现了在技术选型中,需要根据实际情况进行权衡,没有绝对完美的方案,只有最合适的方案。
四、成果与启示:成本降低与架构优化的重要性
通过实现和部署自定义的环形缓冲IPC方案,Recall.ai将机器人的CPU使用率降低了最多50%。 这一变化直接导致AWS年度成本降低了超过一百万美元。 这不仅仅是一个简单的成本优化案例,更是一个关于架构设计和技术选型的重要教训。
Duckbill Group首席云经济学家Corey Quinn的评论也值得关注。他指出,虽然单纯为了成本或性能而深入研究应用架构的深层问题在大多数情况下没有太大意义,但在像Recall.ai这样的高带宽、高吞吐量场景下,这样的深入研究是绝对必要的,并且回报巨大。
结论: Recall.ai的案例为我们提供了宝贵的经验:选择合适的IPC机制对于实时应用的性能和成本至关重要。 WebSocket虽然方便易用,但在高带宽、高吞吐量场景下可能带来巨大的成本压力。 在进行技术选型时,需要充分考虑各种方案的优缺点,并根据实际情况进行权衡。 更重要的是,持续关注系统性能和成本,并积极探索优化方案,才能在云计算时代保持竞争力。 Recall.ai的成功,不仅在于他们发现了问题并解决了问题,更在于他们敢于挑战传统,勇于探索新的解决方案,最终实现了百万美元的成本节约。 这为其他开发者提供了宝贵的参考,也提醒我们,在追求高性能的同时,更要关注成本优化,才能构建真正高效、可持续的云原生应用。
参考文献:
- How Recall.ai Saved $1M on AWS by Eliminating WebSockets (https://www.infoq.com/news/2024/11/aws-websockets-costs/)
- (其他相关技术文档和论文,此处需根据实际情况补充)
Views: 0