什么是单体应用?
单体应用将多项功能的用户界面层和数据访问层整合到一个应用中。通常,单体应用采用单一代码库,由组织内的多个团队共同修改,并作为一个整体部署,其中包含这些团队维护的所有功能。
单体应用的各个组件紧密集成,因此开发和部署通常更为容易。但是,随着应用范围扩大和性能需求提高,单体应用可能会变得难以维护和扩展。
单体应用架构示例
对于无需快速扩展或定期维护的较小型、复杂度较低的应用,单体系统可能较为适合。以下是一些通常采用单体架构的应用示例(但其较新的功能可能基于更为容器化的基础设施)。
- 电子商务平台:单体应用在电子商务领域较为常见,因为基础设施搭建完成后(包括构建在线商店、订单处理、支付处理和客户服务),架构几乎不需要更新。
- 内容管理系统(CMS):本词汇表条目正是通过单体应用(WordPress)创建的。CMS应用部署后,包含以网页形式管理内容所需的全部功能。
- 银行系统:许多金融系统采用单体应用架构,因为入口点有限,有助于提高安全性。此外,部署后,代码库包含消费者期望在线银行服务具备的全部功能,包括管理金融交易、处理付款和跟踪交易。
单体架构的优势
尽管单体架构的某些方面已经过时,但它仍适用于许多场景,并具有诸多优势。
单体架构的一些优势包括:
- 简单:与更复杂的架构(如微服务架构)相比,集中式架构使单体应用更易于开发、部署和维护。
- 测试更快:通过将所有组件集成到一个程序中,可以快速对单体应用进行整体测试。与由多个较小组件组成的架构(例如微服务)不同,无需针对复杂的通信协议或多个代码存储库进行额外测试。
- 安全性:由于恶意行为者可利用的入口点较少,单体应用通常更易于保护。与管理多个安全配置相比,在单个应用中实施安全协议也更容易。
- 成本:单体架构以单一单元的形式部署,可省去部署和保护额外通信协议、构建更多互联基础设施,以及聘用具备更专业技能并接受过专门培训的员工所产生的额外成本。
单体架构的缺点
虽然单体架构的一体化特性有其优势,但也可能引发一些问题。
单体架构的一些缺点包括:
- 复杂性逐渐增加:随着时间推移,应用不断扩展并增加功能,可能导致单体架构日益庞大和复杂。这种无序扩张会增加更新损害单一代码库的风险,而整个程序的顺畅运行都依赖于该代码库。
- 缺乏可扩展性:当应用的某项功能或某个部分需要横向扩展时,必须扩展整个大型应用,包括不需要额外资源的子系统。由于部署耗时更长,扩展速度可能会变慢;同时,与微服务相比,每个实例需要更高的硬件配置才能运行,因此成本也可能增加。
- 韧性:在单体架构中,所有应用组件都紧密耦合,并基于一个集中式代码库运行。因此,如果其中一个组件发生故障,整个应用都可能停机。
- 完整重新部署 :由于整个应用由单一代码库构成,单体应用中的任何一个组件发生更改或更新时,都需要完整重新部署。
- 技术栈:由于开发人员必须确保所使用的任何工具或语言都与单体架构兼容,因此可选范围有限。此外,许多单体应用的编写方式无法完全兼容云计算和容器化等更新、更高效的技术。
- 开发速度较慢:当多个开发团队共同处理一个大型代码库时,必须格外谨慎,确保接口和领域边界得到遵循和维护。有时,代码可能会引入复杂的耦合关系,导致跨团队依赖拖慢新功能开发或关键问题修复。
什么是微服务架构?
与单体架构相对的是微服务架构。微服务是一种软件架构方法,使用小型组件构建大型复杂应用。每个组件可以执行单一功能(例如身份验证、通知或支付处理),也可以组合成模块,在单体应用中运行。“微服务”(简称“服务”)也用于指代这些小型组件本身。
单体应用采用紧耦合架构(即各组件相互连接),而微服务应用则采用分布式架构(即各组件可以独立运行)。随着应用规模扩大、复杂性增加,许多组织正在探索从单体架构迁移,或采用微服务架构构建新应用。
NGINX为探索单体架构和微服务的用户提供以下免费学习资源

