前段时间,来自亚马逊 Prime Video 团队的一个案例研究在开发者社区中掀起了轩然大波。大体是这样一件事,作为一个流媒体平台,Prime Video每天都会向客户提供成千上万的直播流。为了确保客户无缝接收内容,Prime Video需要构建一个监控工具来识别客户所查看的每个流中的质量问题,这提出了极高的可扩展性要求。对此,Prime Video团队优先考虑了微服务架构。由于微服务能够将单体应用分解为多个模块,这不仅能解决工具独立开发和部署的问题,还能为应用提供更高的可用性、可靠性以及技术多样性。最终,Prime Video的服务由三个部分组成,媒体转换器将音视频流发送到检测器的音视频缓冲区;缺陷检测器执行算法,并在发现缺陷时发送实时通知;第三个组件则提供控制服务流程的编排。当更多流加入到服务中时,成本过高问题开始逐渐显现。由于AWS Step按照函数状态转换向用户收费,当需要处理大量流的时候,大规模运行基础设施的开销会变得非常昂贵,所有构建模块的总成本过高,导致Prime Video团队无法大规模接受最初的解决方案。最终,Prime Video团队重构了基础设施,从微服务迁移到了单体架构,据他们的数据,基础设施成本降低90%。这件事情也让我们更加的注意到,分布式架构相比单体服务架构同样存在缺点。比如Prime Video 团队遇到问题:分布式架构无法像单体架构那样共享变量,从而导致底层服务处理更多相同的请求进而产生成本飙升的问题。这样的困境在爱奇艺海外架构中同样存在,特别明显的是在策略引擎的调用关系上。