单体架构与微服务

一、单体架构

1.什么是单体架构

单体架构(Monolithic Architecture)是一种将所有功能打包在一个容器中运行的设计风格,一个实例中集成了一个系统的所有功能。通过负载均衡软件/设备实现多实例调用。每个实例中都有完整的一套项目代码

2.单体架构的优点

  1. 初期开发应用很简单
  2. 易于对应用程序进行大规模修改
  3. 测试简单
  4. 部署简单
  5. 横向扩展简单

这些优点本质上都是因为单体架构前期开发代码量少,易于维护,随着代码量逐渐增多,项目复杂,体量庞大,这些优点都将不复存在

3.单体架构的缺点

当项目发展到特别巨大时,上边的优点都变成了缺点:

  1. 项目代码结构难以梳理,开发节奏变缓
  2. 难以进行大规模修改
  3. 测试需要涉及的东西太多,甚至需要手动测试
  4. 在开发环境中,项目的重新编译启动需要耗费大量时间
  5. 从代码提交到实际部署的周期很长,而且容易出现问题(牵一发而动全身)
  6. 可能需要长期依赖某个已经过时的技术栈

二、SOA的演变

SOA(Service-Oriented Architecture)是一种分布式服务架构的常见方式:提供一种被各个服务单元/系统彼此认可的协议进行数据通讯,进而实现跨服务单元/系统交互的能力。

早期的SOA多以基于SOAP (Simple Object Access Protocol)协议的Webservice实现,因其通过WSDL (Web Service Description Language)实现了严格服务间通讯格式约束,所以它非常适用于对稳定性要求高、不易变、防御式的场景, 这种方式在当下的银行、电信系统中还有很大市场。但SOAP的优势也为其带来了:笨重、不灵活、修改困难、通讯效率低等问题。

SOA在一定程度上解决了单体架构的问题,但是非常不灵活,所有模块之间的通信有严格的约束,对重量级通信协议强依赖

img

三、微服务兴起

1.什么是微服务

什么是微服务?| AWS

微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成。这些服务由各个小型独立团队负责。微服务架构使应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上市时间。

2.微服务的优点

  1. 使大型复杂应用可以持续交付部署

大型项目被拆分成了很多的小服务,当需要进行更新部署时,只需要更新已修改的的服务

  1. 每个服务相对较小并容易维护
  2. 服务可以独立部署、独立扩展
  3. 可以实现团队自治
  4. 容易实验和采纳新技术

开发新服务时,可以自由地选择适合这个服务的任何语言和框架。

  1. 更好的容错性

微服务架构可以实现更好的故障隔离。某个服务的内存泄漏不会对其他服务造成影响。

3.微服务的缺点

  1. 服务的拆分和定义很难

如果服务没有拆分好,可能诞生一个分布式单体应用(很多核心功能都集成在了一个服务中,没有做到很好的解耦)

  1. 分布式系统更复杂,开发测试部署更难

这是相对于单体架构而言的,并且还需要解决远程服务不可用或出现高延迟等情况

  1. 部署多服务的功能需要进行很多的协调
  2. 开发者需要考虑什么时候使用微服务

总结

设计者通过使用微服务架构将一个大的单体项目合理拆分成多个小的“单体项目”,每个小的单体项目就重新拥有了单体架构的优点,在项目变得越来越大的过程中,也可以创建新的微服务,方便扩展。服务之间使用API进行通信。服务与服务之间互相隔离,不会相互影响。小步快跑,快速迭代,这里也体现了“双向门”的思想,可以起一个很小的服务,投入市场,看看受不受欢迎。如果非常受欢迎,就可以快速上线,不受欢迎也可以很容易地下架这个服务。