从单体架构到微服务的演变之路

单体架构

1.描述:

  • 一个包含了应用所有功能的应用程序,我们通常称之为 单体架构 。这是一种传统的架构风格,比如经典三层架构(UI,BLL,DAL)就是一个单体架构

2.示例图:

3.单体架构的特点:

  • 所有功能都集中在一个项目中。
  • 所有的功能打成一个war包部署到服务器。
  • 应用与数据库分开部署
  • 通过集群来提高服务器性能
  • 技术栈受到限制

war包是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中

4.单体架构的优点

  • 单体架构简单,前期开发成本低,周期短,小型项目首选

5.单体架构的缺点

  • 全部功能集中在一个项目中,随着项目的变大,变的不易开发,扩展,维护
  • 提高服务器性能只能扩展集群节点,成本太高

垂直架构

1.描述

  • 访问量逐渐增大,单体架构单加集群节点带来服务器性能越来越小时,我们通常将应用拆成互不相干的几个应用,这就称之为 垂直架构

2.示例图

3.垂直架构的特点

  • 以单体架构规模的项目为单位进行垂直划分项目,即将一个大项目拆分成一个一个单体结构项目。
  • 项目与项目之间的存在数据冗余,耦合性较大,比如上图中三个项目都存在客户信息。
  • 项目之间的接口多为数据同步功能,如:数据库之间的数据库,通过网络接口进行数据库同步。

4.垂直架构的优点

  • 项目架构简单,前期开发成本低,周期短,小型项目的首选。
  • 通过垂直拆分,原来的单体项目不至于无限扩大。
  • 不同的项目可采用不同的技术。

5.垂直架构的缺点

  • 复杂应用的开发维护成本变高,部署效率逐渐降低。因为随着业务功能的不断膨胀,代码全量编译和部署一次所需的时间非常长。
  • 团队协作效率差,部分公共功能重复开发,代码重复率居高不下。
  • 系统可靠性变差。垂直架构将所有的应用模块都部署到一个进程中,如果某个应用接口发生故障,例如内存泄漏,会导致整个节点宕机。

SOA架构

1.描述

  • SOA是 Service-Oriented Architecture 英文的缩写,也就是 面向服务的架构 。

2.示例图

3.SOA架构的特点

  • 基于SOA的架构思想将重复公用的功能抽取为组件,以服务的方式给各各系统提供服务。
  • 各个项目(系统)与服务之间采用webservice、rpc等方式进行通信。
  • ESB(企业服务总线)作为项目与服务之间通信的桥梁。

4.SOA架构的优点

  • 将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。
  • 可以针对不同服务的特点制定集群及优化方案。
  • 采用ESB减少系统中的接口耦合。

5.SOA架构的缺点

  • 系统与服务的界限模糊,不利于开发及维护。
  • 虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。
  • 抽取的服务的粒度过大,系统与服务之间耦合性高。

微服务架构

1.描述

  • 微服务架构 风格的开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API轻量的机制来相互通信。

2.示例图

3.微服务架构的特点

  • 将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。
  • 微服务遵循单一原则(一个服务做一件事)。
  • 微服务之间采用RESTful等轻量协议传输。

4.微服务架构的优点

  • 服务拆分粒度更细,有利于资源重复利用,提高开发效率。
  • 可以更加精准的制定每个服务的优化方案,提高系统可维护性。
  • 微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB更轻量。
  • 适用于互联网时代,产品迭代周期更短。
  • 单个微服务启动较快
  • 技术栈不受限

5.微服务架构的缺点

  • 微服务过多,服务治理成本高,不利于系统维护。
  • 分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。

总结:

  • 随着互联网行业的发展,架构的进化是必然的,当然,微服务并不是终点,以后将会有更多的架构涌现出来,而目地都是为了更好的解决所面临的问题。
原文地址:https://www.cnblogs.com/hhzblogs/p/10620849.html