微服务架构介绍,我们讲一下软件常见的架构方式,以及什么是微服务架构,微服务架构的原则,
那我们先来看第一个知识点,软件架构方式当中的,单体架构,那么什么是单体架构呢,其实单体架构我们
也称之为单体系统,单体应用,就是把我们系统当中的功能模块,耦合在一个应用中的架构方式,称之为单体
架构,单体架构也称之为单体系统或者单体应用,然后就是一种把系统中,所有的功能,还有这个模块,耦合在
一个应用中的架构方式,我们称之为单体架构,那么单体架构他有哪些特点呢,单体架构特点,其实单体架构的
特点呢,我们来看一下,只要我们是单体架构去架构的项目,都会打包成一个独立的单元,就是我们的项目最终
会导成一个唯一的jar包,或者是war包,这是他的第一个特点,那第二个特点是什么呢,它会以一个进程的方式,
来运行,这是单体架构的第二个特点,我们来分析一下他的特点,其实第一个我们很好理解,在我们所学的课程当中,
只要我们没有学面向服务的方式,我们所说的SOA架构,没有学这种架构方式之前,所有的项目采用的是单体架构,
单体架构最终会导成一个jar或者war来运行,所以第一个很好理解,第二个会以一个进程方式来运行,这个什么意思呢,
就是我们导成的jar或者是war,在我们的系统当中去运行时,都是以一个进行的方式来运行的,比如我们导成一个jar包,
jar当中的class,最终要依赖于虚拟机,来运行的,所以这个时候我们肯定要启动虚拟机,其实虚拟机是操作当中的
一个进程,在这个进程当中呢,来运行我们的class,那么对于war包也是如此,我们的war包最终要部署到tomcat当中,
或者我们的容器当中来运行,那么容器也是以一个进程在操作系统当中来运行,然后在改进程当中,来运行我们的WEB
项目,所以这是单体架构的一个特点,那接下来我们通过画一个图,来表示单体架构的一个方式
这个图我已经画好了我们来看一下,这个是我们整个webapp,然后在我的项目当中,包含了有表现层,应用层,
数据层,以及这个数据库,我们在表现层,应用层,数据层之间呢,去做代码的调用,然后就会来操作我们的数据库,
这是一个典型的单体架构,其实你会发现所谓的单体架构,就是我们讲过的MVC架构,其实MVC架构就是单体架构的
一个方式
单体架构的优点和缺点,第一个优点是什么呢,项目易于管理,其实我们整个单体项目,
我们在做开发的时候呢,团队的人数并不是很多,项目结构也并不是很复杂,所以项目在管理上呢,
会更容易一些,第二个就是部署简单,我们项目开发完毕,都要去部署的,由于项目本身是单一结构的,
项目部署起来是非常的容易的,把我们项目所生成的,导成war包,放入到tomcat所指定的目录里,去运行,
相比我们分布式架构呢,容易的多,这是单体架构的一个优点,这个是优点,我们再来看单体架构的缺点,
如果我们的项目比较的简单,功能比较单一,或者需求变更并不会很频繁,其实这个时候单体架构是一个很好地选择,
但是如果我们的项目比较的庞大,功能比较复杂,或者项目迭代的次数比较的频繁,更新的次数比较的频繁,这个时候
单体架构的缺点也就体现出来了,那我们来看一下单体架构的项目有哪些缺点呢,我们接下来从6个维度来说单体架构
的缺点,第一就是测试成本高,其实这个比较容易理解,由于我们所有的功能都在一个项目当中,这个时候如果我们的
项目要去迭代了,需求变更的现象了,我的功能要做改变,由于是一个整体,一旦我们的代码发生改变以后,对于其他的
部分呢,我们也要做一个重新的测试,因为我们不能保证不会有其他的影响,所以我们整个测试的过程,要把所有的
进行一个测试,所以这个时候就会导致我们测试的成本过高,这是大体架构的第一个缺点,测试成本高,第二个是什么呢,
可伸缩性差,我们来看一下什么是可伸缩性差,其实单体架构项目,由于是一个但进程的形式来运行的,所以他很具备
局限性,水平扩展是非常不容易的,比如我们现在想对整个项目做水平扩展,那么我们是无法根据某一个功能,功能的
模块去做扩展的,比如说我们的电商系统,包含了入库管理,商品管理,还有订单管理,比如说在这些模块当中,商品模块
访问量会增大,商品模块进行部署,去做水平扩展,那么这个时候单体架构项目是无法做到的,我们只能对整个系统
做集群部署,所以他的可伸缩性是比较差的,这是他的第二个缺点,第三个缺点是什么呢,可靠性差,可靠性差主要体现在哪儿呢,
比如我们某段代码出现了bug,比如像内存溢出了,这个时候就会导致整个系统宕机,受影响的也是我们整个系统,所以说就会
出现某个功能,一旦出现问题了,导致我们整个系统不可用了,所以这也是单体架构的一个缺点,可靠性比较差,第四个
是什么呢,就是系统迭代困难,由于我们所有的功能都在一个系统里面,会导致我们迭代相当的困难,比如我们一些
互联网项目,基本上每个月都有一个正常的迭代,毕竟会导致代码分支过多,其实分支过多,有经验的知道,分支过多
在合并代码的时候,这是一个非常痛苦的事,所以这也是单体架构的另一个缺点,迭代困难,我们再来看,还有什么缺点呢,
跨语言程度弱,由于我们现在系统的体系,越来越庞大,需求越来越复杂,这个时候我们紧靠一个JAVA语言,对于整个开发
工作可能会力不从心,这个时候我们可能还会依赖其他的语言,对项目做支持,那么如果是单体架构的项目呢,由于用的是
统一的技术架构,因为你的项目用JAVA,你只能用JAVA,因为你是一个项目,统一到一个标准当中,所以他的技术栈也
比较统一,那么像这种开发方式呢,我们管理起开看似比较简单,这个时候我们想引入其他的语言的时候,就变得非常的难了,
因为他们都是耦合到一起的,所以单体跨语言也是比较差的,我们再来看最后一个维度,团队协作难,这是什么意思呢,
整个系统我们都是以一个团队来开发的,如果系统变得非常庞大,就是单体系统变得非常庞大的时候,这个时候每个人都要
学习大量的代码,和相关知识,那么我们整个团队之间,沟通和协作就变得非常的频繁,他不像分布式架构,分布式就是
每个团队都是开发一部分,那么团队和团队之间,他们协作和沟通,不像单体项目沟通那么频繁的,所以他的团队协作还是
比较难的,以上就用六个维度来说了单体架构的一个缺点,如果我们项目结构比价简单,需求变更不是很频繁,其实单体架构还是
比较方便的,但是我们现在系统随便叫出来一个,功能或者业务都是比较复杂的,所以这个时候我们如果还是做单体架构的一个
方式,其实这些缺点慢慢都会体现出来的,讲一下软件架构的最基本的方式,单体架构的一个技术特点