单体架构图

一、优点

1. 应用开发很简单

只需要构建一个单独的应用程序就行了

2. 易于对程序进行大规模更改

3.测试相对简单直观

4. 部署简单

只需要一个WAR包即可

5. 横向扩展简单

只需要部署多份即可使用负载均衡进行调度

二、缺点

1. 随时间推移,程序会越来越复杂

程序越来越复杂后,任何一个开发的人都很难理解它的全部,导致修复软件中的问题和为其正确地添加新功能变得困难且耗时。

2. 开发速度缓慢

构建这类单体程序时间长,包括编译、构建、运行、测试。

3. 从代码提交到实际部署的周期很长,且容易出问题

代码一处更改,可能需要改动多次,牵一发而动全身,耗时耗力。

4. 难以扩展

比如:A模块中的数据量很大,需要存储在数据库中,那么需要服务器内存必须很大;B模块需要进行图形计算能力,那么需要较高的CPU计算能力

将这个单体程序部署到服务器上,就需要综合各模块对服务器进行选型

5. 缺乏可靠性,容易频繁出现系统故障和宕机,很难交付

单体程序缺乏故障隔离,所有模块都是在同一个进程中运行,一个模块的代码错误,比如内存泄漏就有可能导致程序的所有实例崩溃。

6. 需要长期依赖某个可能已经过时的技术栈

单体程序使用了某个过时的框架后,就需要一直使用下去,如果想要尝试一些新框架,做不到。