企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
一个归档包(比如 war 包)包含的所有功能的应用程序。在项目中我们通常将需求分为三个主要部分:数据库、服务端处理、前端展现。在业务发展初期,由于所有的业务逻辑在一个应用中,开发、测试、部署都还比较容易且方便。这种通常称为单体应用。这也就是现在称之为单体应用架构的方法论。 尽管该应用已经进行了模块化,但由于 UI 和若干业务模块最终都被打包在同一个 War 包中,改 war 包包含了整个系统所有的业务功能,这样的应用系统成为单体应用。 相信很多项目都是从单体应用开始的。单体应用比较容易部署、测试,在项目初期,单体应用可以很好地稳定运行。然而,一般项目都会随着需求而不断的变化以及增加,越来越多的人加入到项目的开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。 因此,我们可以从中看出单体应用会面临的一些问题: * 复杂性高 在大型单体应用中一般会包含的模块非常多、模块的边界也非常模糊、依赖关系不清晰、代码质量参差不齐、混乱地堆砌在一起,这些将导致整个项目非常复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个 Bug 都会带来隐藏的缺陷。 * 技术债务 随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并且越积越多。 * 部署频率低 随着代码的增多,构建和部署的时间成本也会上升。一般修复或者新增功能都可能需要重新部署整个应用。这种全量部署的方式耗时长、影响范围大、风险高,使得单体应用项目上线部署的频率较低。 * 可靠性差 某个应用 Bug 可能会导致整个应用的崩溃。 * 扩展能力受限 单体应用只能作为一个整体进行扩展,无法根据业务模块的需要进行伸缩。例如,应用中有的模块是计算密集型的,它需要强劲的 CPU;有的模块则是 IO 密集型的,需要更大的内存。由于这些模块部署在一起,不得不在硬件的选择上作出妥协。 * 阻碍技术创新 单体应用往往使用统一的技术平台或方案解决所有的问题,团队中的每个成员都必须使用相同的开发语言和框架,要想引入新框架或新技术平台会非常困难。