上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.3.1 单体式架构概述
单体式架构又称为单应用架构或单体架构,也就是系统所有的功能,前端页面也好,后端服务也好,所有的功能模块都在同一个工程上开发,最终将所有模块、所有功能都打包在一起,放在一个进程上运行。例如,很多企业的Java Web项目就是将应用程序打成WAR包,然后部署在一个Web容器中运行。
总结起来就是8个字:一包在手,天下我有。现在回想一下在1.2.1节中SOA的例子,如果换单体式架构又会是什么样的呢?在单应用模式下,它的架构如图1.5所示。
图1.5 单体式架构
由图1.5可见,所有的功能都在一个WAR包内,部署在Web容器(通常是TOMCAT)中运行,在资源允许的情况下,可以任意地水平扩展多个Web容器,客户端(通常是浏览器)通过代理服务器(通常是Nginx)定义一些负载策略,反向代理集群的节点,达到负载均衡的目的。
这样的模式问题是显而易见的,系统中没有明确的边界和职责划分,所有代码都杂糅在一起,随着系统越做越大,代码量越来越多,重复的代码随处可见,模块之间调用逻辑杂乱无章,代码质量越来越难以管理,最终导致无论任何人也无法在这套系统上添加任何功能,这套系统让人闻风色变,都不愿意在其中修改任何逻辑。
单体式架构模式是笔者接触最早的模式,虽然现在看来,其设计有些不可思议,但不得不承认,单体式架构是在微服务之前最流行、运用最广泛的模式。直到今天,仍然有很多公司和项目在采用这种模式。
然而,任何软件系统都没有经久不衰的解决方案,也没有一开始就很完美的设计,就像人们打游戏,没有万能的装备组合,也没有一开始就很完美的打法,都是随着经验的不断积累,随着对游戏理解的不断加深,才发明了各种装备组合,各种团战战术。软件设计的发展和创造往往也是同样的思路。