亚马逊的首席技术官在最近的一篇文章中表示,单体架构并没有过时。相反,他认为可演进的软件架构在不断变化的技术环境中扮演着越来越重要的角色。他强调,关键是要以开放的心态重新审视自己的架构,并根据业务需求和团队能力选择合适的架构模式。
构建可演进的软件系统是一种策略,而非信仰。必须以开放的心态重新审视你的架构。
软件架构与桥梁和房屋的架构有很大不同。在桥梁建成之后,改变其建造方式是困难的,甚至是不能改变的。但是,软件却截然不同。当我们运行软件时,我们可能会获得一些在设计时未曾预料到的关于工作负载的认识。如果我们在一开始就意识到这一点,并选择了一个可演进的架构,我们就可以在不影响客户体验的情况下更换组件。
我的经验法则是:每当业务增长一个数量级,就应该重新审视架构,以确定它是否仍能支持下一个数量级的增长。
一个很好的例子可以从 Prime Video 工程团队撰写的两篇颇有深度的博客中找到。第一篇文章阐述了周四晚间橄榄球比赛直播是如何以分布式工作流架构为基础构建的。第二篇则是一篇最近的文章,详细探讨了他们的流媒体监控工具的架构,以及他们的经验和分析如何促使他们将其设计成一个单体架构。
并不存在一种适用于所有情况的解决方案。我们总是鼓励我们的工程师寻找最佳解决方案,而不强求遵循特定的架构风格。如果你雇佣了最优秀的工程师,你应该相信他们有能力作出最佳决策。