定义
单体应用程序或单体架构可能是您以前听说过的一个术语,因为它可能是开发企业应用程序最流行的模式。如果系统的所有不同组件都封装到一个单元中,例如,如果用户界面、多个域和基础设施服务组合到一个可部署单元中,我们将其称为单体应用程序。
单体架构是软件程序的一种传统模式,它是作为一个统一的单元构建的,自成一体,独立于其他应用程序。单体 "一词通常被归结为庞大而冰冷的东西,这与软件设计中的单体架构的真实情况相差无几。单体架构是一个单一的大型计算网络,它只有一个代码库,将所有业务关注点结合在一起。 要对这种应用程序进行更改,需要通过访问代码库、构建和部署服务端接口的更新版本来更新整个堆栈。这就使得更新既受限制又耗时。
优点
- 便于开发:当使用一个代码库构建应用程序时,所有代码和关注点都存在于一个地方,您无需过多担心分布式系统中远程过程调用可能带来的故障
- 容易部署:一个可执行文件或目录使部署更容易。它们部署起来很简单。只有一个可部署的,并且它的要求应该很好理解。
- 性能:在中心化代码库中
- 便于测试:
- 便于调试:当所有代码都位于一个位置,可以更轻松地跟踪请求并发现问题
不足
随着应用程序复杂性和/或规模的增长,这些缺点往往会出现:
- 应用程序的启动时间可能会长达数分钟。这很快就会增加工程师在开发过程中浪费的大量时间。
- 扩展应用程序开始变得困难。除了启动时间慢(可能会影响客户)之外,单体应用通常只能在一维进行扩展。由于应用程序涵盖了许多不同的用例,因此可以花费大量时间来优化配置以涵盖所有这些用例。这可能导致单体在资源方面(例如 CPU)变得非常昂贵。
- 持续部署变得缓慢。即使您对特定部分进行了小的代码更改,也必须部署整个应用程序。随着应用程序复杂性的增加,这会变得越来越慢。部署时间超过一个小时的情况并非闻所未闻。
- 对特定技术堆栈的长期承诺是必要的。如果您的整体应用程序是用 PHP 编写的,您必须继续使用 PHP,即使新的应用程序需求更适合新技术,或者如果您聘请了不同语言的专家,您也必须坚持使用 PHP。迁移到新语言将需要重写整个系统(或者如果您决定迁移到微服务,则需要重写部分系统。我们将在下一章中更多地讨论微服务)。
- 改变变得困难。随着交付压力和开始开发的障碍越来越高,系统的模块化常常会变得模糊