一、优点
1. 应用开发很简单
只需要构建一个单独的应用程序就行了
2. 易于对程序进行大规模更改
3.测试相对简单直观
4. 部署简单
只需要一个WAR包即可
5. 横向扩展简单
只需要部署多份即可使用负载均衡进行调度
二、缺点
1. 随时间推移,程序会越来越复杂
程序越来越复杂后,任何一个开发的人都很难理解它的全部,导致修复软件中的问题和为其正确地添加新功能变得困难且耗时。
2. 开发速度缓慢
构建这类单体程序时间长,包括编译、构建、运行、测试。
3. 从代码提交到实际部署的周期很长,且容易出问题
代码一处更改,可能需要改动多次,牵一发而动全身,耗时耗力。
4. 难以扩展
比如:A模块中的数据量很大,需要存储在数据库中,那么需要服务器内存必须很大;B模块需要进行图形计算能力,那么需要较高的CPU计算能力
将这个单体程序部署到服务器上,就需要综合各模块对服务器进行选型
5. 缺乏可靠性,容易频繁出现系统故障和宕机,很难交付
单体程序缺乏故障隔离,所有模块都是在同一个进程中运行,一个模块的代码错误,比如内存泄漏就有可能导致程序的所有实例崩溃。
6. 需要长期依赖某个可能已经过时的技术栈
单体程序使用了某个过时的框架后,就需要一直使用下去,如果想要尝试一些新框架,做不到。
# 架构
# 单体程序