什么是单体应用?

单体应用将多个功能的用户界面和数据访问层整合到一个应用中。通常,单体应用以单个代码库的形式存在,由组织内的多个团队进行修改,并作为包含这些团队维护的所有功能的单个单元进行部署。

由于组件之间紧密集成,因此单体应用通常更易开发和部署。然而,随着应用范围和性能需求的增加,单体应用可能会变得难以维护和扩展。

单体应用架构的示例

对于规模较小、复杂程度较低、不需要快速扩展或日常维护的应用而言,单体系统可能是不错的选择。以下是一些通常采用单体基础设施的应用示例(尽管其新功能可能基于更容器化的基础设施)。

  • 电子商务平台:单体应用常见于电子商务领域,因为基础设施(创建网店、订单处理、支付处理和客户服务)一旦建立,就很少需要对架构进行更新。
  • 内容管理系统 (CMS):通过单体应用 (WordPress) 实现。CMS 应用部署后,会包含以网页形式进行内容管理所需的所有功能。
  • 银行系统:许多金融系统都以单体应用形式进行构建,由于入口点有限,因此更加安全。此外,在部署时,代码库包含消费者期望从网银体验中获得的所有功能:管理金融交易、支付处理和跟踪。
单体架构的优势

虽然单体架构的某些方面已经过时,但仍有许多用途和积极属性。

单体架构的一些优势包括:

  • 简单性:与微服务架构等更复杂的架构相比,集中式架构使单体更易于开发、部署和维护。
  • 测试更快:通过将每个组件集成到一个程序,可快速对单体应用进行整体测试。与由多个较小组件(如微服务)组成的架构不同,单体架构无需对复杂的通信协议或多个代码库进行额外测试。
  • 安全性:由于不良行为者的入口点更少,单体通常更容易确保安全。在一个应用中执行安全协议也比管理多个安全配置更容易。
  • 成本:作为单个单元进行部署,单体系统可消除与部署和保护额外通信协议、构建更多连接基础设施以及雇佣具备更多专业技能和经过培训的员工相关的额外成本。
单体架构的劣势

单体架构的单一性固然有其优点,但也会导致一些问题。

单体架构的一些劣势包括:

  • 复杂性攀升:随着时间的推移,应用的增长和功能的增加会导致单体架构变得更大、更复杂。这种无序扩展会增加更新的风险,因为更新可能会危及保证整个程序顺利运行的单一代码库。
  • 缺乏可扩展性:当应用的某个功能或区域需要横向扩展时,整个大型应用(包括不需要额外资源的子系统)都必须进行扩展。与微服务相比,这可能导致扩展速度变慢,因为部署需要更长时间,也可能导致成本增加,因为每个实例的运行都需要更多的硬件。
  • 弹性:在单体架构中,所有应用组件都紧密相连,并从中央代码库中运行。因此,如果其中一个组件出现故障,整个应用都可能瘫痪。
  • 全面重新部署:由于单一代码库代表整个应用,每当一个组件发生变化或更新时,单体都需要全面重新部署。
  • 技术堆栈:由于开发人员必须确保所使用的任何工具或语言都能与单体相匹配,因此选择会受到限制。此外,许多单体应用的编写方式与云计算和容器化等更新、更高效的技术并不完全兼容。
  • 开发速度减慢:当多个开发团队在一个大型代码库上工作时,需要格外小心,以确保界面和域边界得到重视和维护。有时,代码会引入复杂的耦合,使得跨团队依赖关系会减慢新功能的开发速度或关键问题的修复速度。
什么是微服务架构?

与单体架构形成鲜明对比的是微服务架构。微服务是一种软件架构方法,使用小型组件构建大型复杂应用。这些组件可以各自执行单一功能(如身份验证、通知或支付处理),也可以在单体中作为组合共同工作。“微服务”(或“服务”)也可以指小型组件本身。

单体应用紧密耦合(这表示其组件相互连接),而微服务应用分布式应用(这表示其组件可以独立行动)。随着应用变得更大、更复杂,许多组织都在探索从单体应用迁移到微服务应用,或者以微服务的形式整合新的应用。

NGINX 很荣幸能为探索单体和微服务的用户提供以下免费的教育资源