单体架构

微服务架构介绍,我们讲一下软件常见的架构方式,以及什么是微服务架构,微服务架构的原则,

那我们先来看第一个知识点,软件架构方式当中的,单体架构,那么什么是单体架构呢,其实单体架构我们

也称之为单体系统,单体应用,就是把我们系统当中的功能模块,耦合在一个应用中的架构方式,称之为单体

架构,单体架构也称之为单体系统或者单体应用,然后就是一种把系统中,所有的功能,还有这个模块,耦合在

一个应用中的架构方式,我们称之为单体架构,那么单体架构他有哪些特点呢,单体架构特点,其实单体架构的

特点呢,我们来看一下,只要我们是单体架构去架构的项目,都会打包成一个独立的单元,就是我们的项目最终

会导成一个唯一的jar包,或者是war包,这是他的第一个特点,那第二个特点是什么呢,它会以一个进程的方式,

来运行,这是单体架构的第二个特点,我们来分析一下他的特点,其实第一个我们很好理解,在我们所学的课程当中,

只要我们没有学面向服务的方式,我们所说的SOA架构,没有学这种架构方式之前,所有的项目采用的是单体架构,

单体架构最终会导成一个jar或者war来运行,所以第一个很好理解,第二个会以一个进程方式来运行,这个什么意思呢,

就是我们导成的jar或者是war,在我们的系统当中去运行时,都是以一个进行的方式来运行的,比如我们导成一个jar包,

jar当中的class,最终要依赖于虚拟机,来运行的,所以这个时候我们肯定要启动虚拟机,其实虚拟机是操作当中的

一个进程,在这个进程当中呢,来运行我们的class,那么对于war包也是如此,我们的war包最终要部署到tomcat当中,

或者我们的容器当中来运行,那么容器也是以一个进程在操作系统当中来运行,然后在改进程当中,来运行我们的WEB

项目,所以这是单体架构的一个特点,那接下来我们通过画一个图,来表示单体架构的一个方式

单体架构_第1张图片

这个图我已经画好了我们来看一下,这个是我们整个webapp,然后在我的项目当中,包含了有表现层,应用层,

数据层,以及这个数据库,我们在表现层,应用层,数据层之间呢,去做代码的调用,然后就会来操作我们的数据库,

这是一个典型的单体架构,其实你会发现所谓的单体架构,就是我们讲过的MVC架构,其实MVC架构就是单体架构的

一个方式

单体架构_第2张图片

单体架构的优点和缺点,第一个优点是什么呢,项目易于管理,其实我们整个单体项目,

我们在做开发的时候呢,团队的人数并不是很多,项目结构也并不是很复杂,所以项目在管理上呢,

会更容易一些,第二个就是部署简单,我们项目开发完毕,都要去部署的,由于项目本身是单一结构的,

项目部署起来是非常的容易的,把我们项目所生成的,导成war包,放入到tomcat所指定的目录里,去运行,

相比我们分布式架构呢,容易的多,这是单体架构的一个优点,这个是优点,我们再来看单体架构的缺点,

如果我们的项目比较的简单,功能比较单一,或者需求变更并不会很频繁,其实这个时候单体架构是一个很好地选择,

但是如果我们的项目比较的庞大,功能比较复杂,或者项目迭代的次数比较的频繁,更新的次数比较的频繁,这个时候

单体架构的缺点也就体现出来了,那我们来看一下单体架构的项目有哪些缺点呢,我们接下来从6个维度来说单体架构

的缺点,第一就是测试成本高,其实这个比较容易理解,由于我们所有的功能都在一个项目当中,这个时候如果我们的

项目要去迭代了,需求变更的现象了,我的功能要做改变,由于是一个整体,一旦我们的代码发生改变以后,对于其他的

部分呢,我们也要做一个重新的测试,因为我们不能保证不会有其他的影响,所以我们整个测试的过程,要把所有的

进行一个测试,所以这个时候就会导致我们测试的成本过高,这是大体架构的第一个缺点,测试成本高,第二个是什么呢,

可伸缩性差,我们来看一下什么是可伸缩性差,其实单体架构项目,由于是一个但进程的形式来运行的,所以他很具备

局限性,水平扩展是非常不容易的,比如我们现在想对整个项目做水平扩展,那么我们是无法根据某一个功能,功能的

模块去做扩展的,比如说我们的电商系统,包含了入库管理,商品管理,还有订单管理,比如说在这些模块当中,商品模块

访问量会增大,商品模块进行部署,去做水平扩展,那么这个时候单体架构项目是无法做到的,我们只能对整个系统

做集群部署,所以他的可伸缩性是比较差的,这是他的第二个缺点,第三个缺点是什么呢,可靠性差,可靠性差主要体现在哪儿呢,

比如我们某段代码出现了bug,比如像内存溢出了,这个时候就会导致整个系统宕机,受影响的也是我们整个系统,所以说就会

出现某个功能,一旦出现问题了,导致我们整个系统不可用了,所以这也是单体架构的一个缺点,可靠性比较差,第四个

是什么呢,就是系统迭代困难,由于我们所有的功能都在一个系统里面,会导致我们迭代相当的困难,比如我们一些

互联网项目,基本上每个月都有一个正常的迭代,毕竟会导致代码分支过多,其实分支过多,有经验的知道,分支过多

在合并代码的时候,这是一个非常痛苦的事,所以这也是单体架构的另一个缺点,迭代困难,我们再来看,还有什么缺点呢,

跨语言程度弱,由于我们现在系统的体系,越来越庞大,需求越来越复杂,这个时候我们紧靠一个JAVA语言,对于整个开发

工作可能会力不从心,这个时候我们可能还会依赖其他的语言,对项目做支持,那么如果是单体架构的项目呢,由于用的是

统一的技术架构,因为你的项目用JAVA,你只能用JAVA,因为你是一个项目,统一到一个标准当中,所以他的技术栈也

比较统一,那么像这种开发方式呢,我们管理起开看似比较简单,这个时候我们想引入其他的语言的时候,就变得非常的难了,

因为他们都是耦合到一起的,所以单体跨语言也是比较差的,我们再来看最后一个维度,团队协作难,这是什么意思呢,

整个系统我们都是以一个团队来开发的,如果系统变得非常庞大,就是单体系统变得非常庞大的时候,这个时候每个人都要

学习大量的代码,和相关知识,那么我们整个团队之间,沟通和协作就变得非常的频繁,他不像分布式架构,分布式就是

每个团队都是开发一部分,那么团队和团队之间,他们协作和沟通,不像单体项目沟通那么频繁的,所以他的团队协作还是

比较难的,以上就用六个维度来说了单体架构的一个缺点,如果我们项目结构比价简单,需求变更不是很频繁,其实单体架构还是

比较方便的,但是我们现在系统随便叫出来一个,功能或者业务都是比较复杂的,所以这个时候我们如果还是做单体架构的一个

方式,其实这些缺点慢慢都会体现出来的,讲一下软件架构的最基本的方式,单体架构的一个技术特点

单体架构_第3张图片

 

你可能感兴趣的:(单体架构)