微服务架构的演变过程

1,391 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情


集中式架构(单体应用)

  • 当网站流量比较小的时候,只需要一个应用,将所有的功能模块都部署到一起,以减少部署节点和开发成本。

  • 集中式架构图

  • 优点:

    • 1.系统开发速度快
    • 2.维护成本低
    • 3.使用于并发能力要求低的系统
  • 缺点:

    • 1.代码耦合度高,开发修复困难
    • 2.无法针对不同的模块进行优化
    • 3.无法进行水平扩展
    • 4.单点容错率低,并发能力弱

垂直拆分构架

  • 当访问量逐渐增大的时候,单一应用无法满足需求,为了应对更高的并发和业务需求,需要对系统进行拆分:

  • 架构图:

  • 优点:

    • 1.系统拆分之后实现了流量分担,解决了高并发的问题
    • 2.可以针对不同的模块进行优化
    • 3.方便水平扩展,实现负载均衡,容错率提高
    • 4.系统之间都是独立的
  • 缺点:

    • 1.服务之间相互调用,如果某一个服务的端口或IP地址发生了改变,系统的调用得手动的调整,提高了维护难度。

    • 2.搭建集群之后,实现负载均衡比较复杂

分布式架构

当垂直应用越来越多,应用之间的交互会变的比较复杂,将核心业务抽取出来,作为独立的服务,形成一个服务中心,使前段应用能够更快速的响应多变的市场需求。

优点:

将基础服务进行了封装,方便系统之间进行调用,提高了代码复用和开发效率

缺点:

1.代码耦合度比较高,维护比较困难

2.系统之间调用错综复杂,实现集群之后负载均衡比较困难

SOA面向服务的架构

  • SOA(service oriented architecture)面向服务的架构:它是一种设计方法,其中包含多个服务,服务跟服务之间都是独立的,通常一个服务是以独立的形式存在于系统的进程中的。服务之间通过相互依赖提供一些列的功能。

  • 架构图:

  • ESB:简单来说ESB就是一根管道,用来连接各个服务节点,为了集成不同的系统,不同协议的服务,ESB要实现消息的转发解释和路由的功能,让不同的服务进行互通。

  • 缺点:

    • 每个供应商提供的ESB产品本身有偏差,自身实现起来比较复杂;应用服务多了之后,ESB要去集成所有服务的协议,数据转换和运维部署将变的比较困难,所有服务都是通过一根管道进行通信,直接降低了通信速度。

微服务架构

  • 概念:微服务架构就是使用一套小服务来开发单体应用的方式或途径,每个服务都是基于单一业务能力构建,运行在自己的进程中,并且使用轻量级的机制进行通信,通常就是HTTP接口的API,一般都是rest接口规范,能够通过自动化部署机制来自动部署环境。这些服务可以使用不同的编程语言,不同的数据库存储 技术,并保持最低限度的集中式管理。

  • 架构图:

  • 网关:是一个独立的服务,是系统的唯一入口,没每个客户端提供了一个定制API。核心所有的客户端都是通过统一的网关来介入微服务的,在网关处理所有的非业务功能,具备身份验证,监控,负载均衡,缓存,请求分片管理,静态响应等等。

  • 特点:

    • 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责

    • 微:微服务拆分粒度小,例如:一个用户管理可以作为一个服务,一个登录可以作为一个服务,每个服务虽然小,但是“五脏俱全”

    • 面向服务:每个服务都需要对外暴露统一风格的API接口。不需要关心服务的技术实现,做到与平台跟语言无关,也不限定用具体的实现技术。

    • 自治:服务之间互相独立,互不干扰

    • 团队独立:每个服务都是一个独立的开发团队,人数不能过多。

    • 技术独立:因为是面向服务的,所以各自可以采用不同的技术,提供统一的接口调用

    • 前后端独立:采用全后端分离开发,提供同一个Restful风格接口调用,不需要专门的为PC、移动端开发不同的接口。

    • 数据库独立:每个微服务都有自己的数据库

    • 环境独立:每个微服务都有自己的部署环境,可以采用不同的技术部署。