近日,亚马逊旗下流媒体平台Prime Video在3月22日发布的一篇技术博客震动了科技界。该文详细阐述了他们如何通过将音视频监控服务从分布式微服务架构重构为单体应用程序,从而在显著提升系统规模、弹性和稳定性的同时,实现了高达90%的成本节约。
这篇文章于五一期间被分享至Reddit和Hacker News等平台,迅速引爆了热烈的线上讨论。作为业内备受推崇的微服务架构的“反例”,特别是由亚马逊这样的科技巨头亲自实践,其影响力非同寻常。
随后,DHH在批评完TypeScript后,又发文《即便是亚马逊也无法理解Servless或微服务》,进一步对微服务架构表达了不满,使得这一话题在技术圈的热度持续飙升,成为广受关注的焦点。
对于此事件发酵后,一些中文媒体发布的诸如《微服务是不是个蠢主意?》、《单体回归?亚马逊放弃用于视频监控的微服务》以及《从微服务转为单体架构、成本降低90%,亚马逊内部案例引发轰动》等文章,它们的标题往往带有吸引眼球的倾向,而非深入剖析技术内涵。
部分评论者并未仔细研读原文,仅凭标题便妄下结论。为澄清事实,有必要对Prime Video的原始文章进行解读。
Prime Video技术团队的原始博文内容易懂,技术细节不多,但其核心要点如下:
该系统主要负责监控数千条用户点播视频流,评估其运行质量(如视频损坏、音频不同步)。监控过程涉及视频帧处理,因此最初采用了一个微服务,名为Media Conversion,用于将视频拆分成帧并临时存储于S3。
为加速系统搭建,Prime Video团队采用了Serverless架构,具体是AWS Lambda和AWS Step Functions。一个前端Lambda作为请求网关,Step Function作为监控探测器。一旦发现问题,便发送至SNS。Step Function从S3获取Media Conversion处理后的数据,并将结果汇总至一个后端Lambda,最终存储至S3。
这种架构初看起来简洁高效,完全剥离了服务器管理,利用AWS的Serverless服务迅速构建了一个可行的监控系统。这种便捷的开发模式,理论上是颇具吸引力的。
然而,他们遭遇了一个显著问题:AWS Step Function的扩展性瓶颈。主要体现在两方面:首先,系统需要大量的AWS Step Function并发实例,导致其达到了账户的硬性限制。其次,AWS Step Function按状态转换计费,成本高昂得难以承受。
重点在于,此问题根源是:1)账户对Step Function的使用存在限制;2)Step Function的成本过高。
随后,Prime Video团队着手解决这些问题,采取了以下手段:
他们将Media Conversion与Step Function的逻辑整合到同一个程序中,两者通过内存通信,不再依赖S3进行数据交换。处理结果最终汇聚到一个线程,再写入S3。
新的单体架构获得了分布式部署的能力,仍利用原有的AWS Lambda作为入口调度器。
相比之下,EC2的水平扩展能力几乎不受限制,用户可以根据需求配置CPU和内存资源。考虑到视频转码和监控分析的复杂度,将其整合到一起显然更为合理。这种转变带来了多重优势:
不再受Step Function的约束,技术掌控度更高,自由度更大。
通过摆脱昂贵的Step Function,云成本大幅降低。如果将Lambda替换为Nginx或Spring Gateway,S3替换为MinIO,SNS替换为Kafka,成本还能进一步削减。
通过对原文的分析,我们可以进行深入的独立思考:
无论是AWS的Serverless、微服务还是单体架构,在合适的场景下都各有其优势。如同不同类型的汽车适用于不同的路况,关键在于选择最符合实际需求的技术方案。
Prime Video案例中的业务场景相对简单,本质上是一个转码和分析功能。若要拆分,两个微服务(一个负责转码,一个负责分析)足以,甚至可以合并为流式处理。微服务划分应遵循以下关键原则:边界上下文、单一职责、高内聚、低耦合,并考虑事务一致性及组织架构匹配度。
Prime Video面临的问题并非微服务架构本身的缺陷,而是AWS Step Function的产品限制与高昂费用所导致。这更像是AWS的产品策略问题,而非技术架构的普适性问题。如果Step Function能够无限扩展、性能优越且价格低廉,Prime Video团队又何必转向单体架构?他们可能反而会盛赞Serverless的巨大优势。
亚马逊的Prime Video与AWS是两个独立核算的实体,正如亚马逊电商和AWS本身也是独立的运营单位。亚马逊电商和AWS在服务化及微服务架构的理解与实践经验方面,堪称全球翘楚。早期关于亚马逊和谷歌平台对比的文章,有助于对此有更深层次的认识。
Prime Video的这个案例,实质上是“下云”,即从AWS Serverless环境中撤离。云服务成本较高,不仅体现在费用上,也包括潜在的供应商锁定风险。Prime Video团队的监控系统复杂度不高,重写成本相对较低,这使得他们能够迅速转向更传统的“服务化”+“云计算”分布式架构。否则,他们可能需要像DHH那样,经历一番艰苦的“下云”历程。
最后,如果您在分布式、微服务、云原生以及云计算成本等方面遇到挑战,欢迎联系。我们提供的MegaEase Cloud平台致力于在不牺牲云计算体验的前提下,通过自建高可用基础架构,帮助用户实现至少50%的云计算成本节约。目前,这包括利用开源软件自建基础设施、通过MinIO与Cloudflare免费CDN实现内容分发,以及未来即将推出的与底层IDC合作的廉价GPU计算资源。欢迎体验。
