理解单体架构的一种方式,是观察这个术语在建筑领域的本意。在实体建筑设计中,“单体架构”指从巨型岩层中开凿而成的结构。其核心词“单体”的关联含义在于:它由完整岩体构成,形成完全均匀的建筑结构。多个相连的建筑可能均源自同一岩层,它们全都共享着相同的岩石基座。
这个类比可以很好地应用于软件工程的讨论。在这个背景下,单体架构执行不同的业务功能(即“建造不同的建筑”),这些功能各不相同,但共享同一个代码库(或岩石基底)。
几十年来,单体架构作为传统的软件模型一直主导着软件开发。然而,现在任何关于单体架构的讨论都必须考虑其重要替代方案:微服务,而微服务的使用正在日益增加。
在单体软件中,应用程序所需的所有代码都集中保存在一个位置。这为开发人员提供了额外的简化优势,因为系统仅接受一种格式的通信。系统无需承担从不同服务翻译通信的负担。这使得诸如 DevOps 等开发流程更易于执行。
单体应用程序通常包含以下组件:
在使用单体架构时,我们可以看到,其表面上的优势(高度稳定性)也可能被视为一种劣势:
微服务提供的主要业务优势之一在于,系统可以轻松更新,以反映应用程序的新部分,而不会影响整个应用程序。这可以节省大量的时间和人力成本。
微服务架构的一个紧密替代方案是事件驱动架构 (EDA),有时会与微服务结合使用。在 EDA 中,状态变化以事件的形式表示,并在系统中进行调度。EDA 提供松散耦合和实时处理,使其成为一个具有吸引力的选择。
微服务天生适合持续增长,并能够适应技术变革。它们带来的主要优势包括:
微服务的出现使软件开发演变成了微服务架构与传统单体架构之间的“双雄争霸”。
乍一看,微服务似乎是更优的架构,因为它是后期发展起来的。然而,这种假设显得目光短浅。仍然有许多计算场景从单体架构模型的简洁性中获益。
此外,这两种软件架构各有优劣,组织在选择其中一种系统之前,应认真评估两者,并考虑其预期的应用程序开发需求。
在具体对比方面,单体架构与微服务在多个关键方面存在差异:
了解何时使用某种架构风格至关重要,同时也要根据实际需求选择最合适的系统。以下是单体系统的最佳使用场景:
微服务适用于许多项目,包括最复杂的应用程序:
完全托管的单租户服务,用于开发和交付 Java 应用程序。
使用开发运维软件和工具,在多种设备和环境中构建、部署和管理云原生应用程序。
云应用程序开发意味着一次构建、快速迭代和随处部署。
1. Retail e-commerce sales worldwide from 2014 to 2027, Statista, May 2024