最近这几天,来自 Prime Video 团队发表了一篇亚马逊案例研究,这在开发者社区中引发了热烈讨论,人们觉得有点儿让人惊讶又让人觉得好笑。
这主要归功于 Prime Video 团队非常坦诚地评估了如何通过从微服务架构迁移到单体架构来节省资金,并避免使用某此昂贵的云服务,例如 AWS Step Functions 和Lambda 无服务器函数。
要求监控工具识别“客户查看的每个流”中的质量问题,但这需要具有高度可扩展性,因为存在“数千个并发流”。该团队最初创建了一个解决方案,其中包含由 AWS Step Functions 编排的分布式组件,AWS Step Functions 是一种基于状态机和任务的无服务器编排服务。
事实证明,Step Functions 是造成瓶颈的原因之一。
“我们的服务对字符流的每一秒运行进行多次状态转换,因此很快就达到了帐户限制。除此之外,AWS Step Functions 会按状态转换向用户收费,”该报告称。用于临时存储捕获的视频帧的“对 S3 存储桶的大量第 1 层调用”也存在一些“成本问题”。
“我们意识到分布式方法并没有在我们的特定用例中带来很多好处,因此将所有组件打包到一个进程中,”该论文继续说道,这样便消除了对 S3 的需求。“我们还实现了在单个实例中控制组件的编排。” 该解决方案现在运行在 EC2(弹性计算云)和 ECS(弹性容器服务)上,具有“一个轻量级的编排层来分发客户请求”。
这篇论文最后结论是:“微服务和无服务器组件是可以应对大规模负载的工具,但是否要在单体架构 上使用它们,必须要视具体情况而定。将微服务转移到一个单体上,可以将我们的基础设施成本降低 90% 以上,它还明显提高了服务的扩展能力。” 这篇文章还提到通过 EC2 存储计划降低成本,这表明即使是内部 AWS 客户也可以根据与其他人类似的模型进行计费。
“我被这篇文章惊得有点目瞪口呆,” Hacker News 上的网友评论说。因为在很多其他地方,AWS 经常将微服务与无服务器架构的优势吹捧为“现代化”应用程序的最佳部署方式。
比如,在可靠性下,AWS“架构完善的框架”建议:
“使用面向服务的架构 (SOA) 或微服务架构构建高度可扩展,并且具有可靠的工作负载。面向服务的体系结构 (SOA) 是通过服务接口使软件组件可重用的实践。微服务架构进一步使组件更小、更简单。”
在这份用于现代化 .NET 应用程序的“AWS 规范指南”文档中,亚马逊列举了诸多微服务的优势,包括更快的创新、高可用性和可靠性、更高的敏捷性和按需可扩展性、现代 CI/CD(持续集成和部署)管道,以及强大的模块边界;尽管它也将“操作复杂性”列为了缺点。
不过,这篇新论文似乎证实了开发人员之间的一些怀疑。一是 AWS 推荐的解决方案可能不是最具成本效益的,因为它们总是涉及使用多种昂贵的云服务。
另一个是微服务相对于单体应用程序的优点经常被夸大。
Ruby on Rails 的创建者,同时也是减少云服务使用的倡导者 David Heinemeier Hansson评论亚马逊案例研究时说,它“确实总结了一段时间以来,席卷科技行业的微服务热潮:IN理论。现在,所有这些理论的真实结果终于出现了,很明显,在实践中,微服务可能是最大的警铃,因为它不必要地使你的系统更加复杂化。而无服务器只会让情况变得更加糟。”
Hansson 的说法提到说,“在几乎所有情况下,让一个连贯的团队和应用程序中用网络调用和服务分区,来代替方法调用和模块分离是非常疯狂的做法。”
2020 年,顾问兼《构建微服务》和《从单体到微服务》等书籍的作者山姆·纽曼在一次开发者大会上也曾强调表示:
“微服务不应成为架构的默认选择”,他在文章点评中还增加了对软件架构师的建议。
他说:“你做过一些价值链分析吗?你看过瓶颈在哪里吗?你试过模块化吗?微服务应该是最后的实施手段。”
Newman 在 Twitter 上针对这篇 AWS 论文指出:“这篇文章实际上更多地是在谈论功能与长期运行的 VM 的定价模型,而不是其它东西。这仍然是一个完全合乎逻辑的架构驱动因素,但从这个案例研究中学到的知识可能因此具有更窄的适用范围。”
他补充道,“人们不公开谈论重新涉足微服务的原因是,这可能会被其它一些人视为‘自己做错了’。但是,当情况发生变化时改变主意,是完全理智的。”
这篇论文对于 AWS 来说,也未必是个坏消息。一方面,这确实违背了云巨头倾向于其描述架构的最佳实践;但另一方面,它是对如何通过简化架构降低成本的令人耳目一新的诚实看法,也是一个让架构师们愿意改变轨道的案例研究。与许多促销案例研究不同,这个案不仅对 AWS 客户,还有众多云端用户来说都很有价值。
作者:场长
参考:
https://thenewstack.io/return-of-the-monolith-amazon-dumps-microservices-for-video-monitoring/
https://thestack.technology/amazon-prime-video-microservices-monolith/
本文为 @ 场长 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。