单体架构 ->分布式架构 ->SOA架构 ->微服务架构

1.单体架构

就是把所有的功能模块打到一个包里面然后再部署,采用了单体架构的项目被称之为单体应用。

优点:

开发起来简单,测试起来简单,部署起来也比较简单。

缺点:

第一就是项目复杂度高,代码耦合度高,不利于维护。修改一处代码,可能会影响一大片的功能无法正常使用。

第二就是单体架构可靠性差,可能因为某个功能模块的严重BUG(死循环、内存溢出),导致整个系统的不可用。

第三就是单体应用只能作为一个整体进行扩展,无法根据某个业务模块的需要进行伸缩。比如说项目中有的模块是计算密集型的,它需要强劲的CPU;有的模块则是IO密集型的,需要更大的内存。如果任何一个模块存在性能问题,那么都需要考虑多部署几个完整的实例集群,才能保证整个系统的性能可以支撑用户的使用。

2.分布式架构

就是将一个大系统按照不同的功能模块进行垂直拆分,拆分成一个一个的子系统,每个子系统都是独立的,系统之间通过网络交互来完成用户的业务处理,而且每个子系统可分布式部署,这种架构称为分布式架构。

优点:

首先就是一个大系统拆分成了一个个比较简单的小系统,每个小系统的功能也就变得简单起来了,开发起来也简单,开发周期也变短了。

每个子系统可以根据自己的需要灵活的进行拓展。

缺点:

因为系统间相互独立,会有很多重复开发工作,影响开发效率。

3.SOA架构

在分布式架构的思想的基础上,将重复的功能抽取出来作为一个一个的服务,子系统再去通过ESB企业总线调用这些公共的服务。

优点:

将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率。

可以针对不同服务的特点按需进行伸缩。

缺点:

系统与服务之间耦合性高。

4.微服务架构:

微服务的核心思想就是分而治之,也就是说将传统的单体应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务只提供单个业务功能的服务,比如说订单微服务就只实现订单相关的业务,会员微服务就只实现会员相关的业务,服务之间进行协作来完成用户的业务处理,每个微服务都运行在自己的进程里并且拥有自己独立的数据库。

优点:

首先服务拆分粒度更细,有利于资源重复利用,提高开发效率。

然后微服务是松耦合的,无论是在开发阶段或部署阶段都是独立的。

第三就是可以更加精准的制定每个服务的优化方案,按需进行伸缩。

缺点:

首先是微服务会增加开发人员的开发复杂度,因为要在开发过程中要处理分布式系统的复杂性。

再者服务间通信成本上升,不同的服务可能会部署在不同的机器上,通过网络进行通信成本上升。

然后是微服务有可能会出现数据一致性问题,也就是说出现数据不一致的情况,这块可以通过分布式事务来解决。

再然后就是微服务太多的话,服务治理成本会变高,不利于系统维护。

最后就是微服务使得测试和调试都变得困难了一些。