架构的发展是从单体架构,(垂直架构)分布式架构,SOA架构,再到微服务架构
image.png

开发架构体系发展

单体式架构

image.png
未做任何拆分的Javaweb程序
应用流量较小,一个应用将所有的功能代码部署在一起
减少开发,部署和维护的成本

  • 随着用户量增大,功能增加,耦合严重不易开发和维护
  • 单点容错率低
  • 无法针对不同模块进行针对性优化和水平扩展

    垂直应用架构

    系统拆分,实现流量分担,提高容错率
    系统之间相互独立,无法相互调用,会有重复的开发任务

分布式架构

在垂直架构 的基础上开发
抽取公共的模块,提高代码复用率

但是系统之间耦合性变得更高,调用关系更加复杂,难以维护
image.png
按照业务进行垂直划分,每一个业务都是单体应用,通过API调用

SOA架构

服务越来越多的时候,就需要一个调度中心对集群进行管理
image.png
SOA是一种面向服务的架构,其应用程序的不同组件通过网络上的通信协议向其他组件提供服务或者消费服务,所以是分布式架构的一种
使用了治理中心解决了服务间调用的关系,保证了协议的协调
但是服务间会有依赖关系,一旦一个环节出错会影响较大(服务雪崩)
服务关系复杂,部署,运维困难

微服务(Micro Service)

微服务是一种SOA架构的进一步发展,更加彻底的对服务进行拆分
提高效率,每个服务与服务之间互不影响,
每一个服务都需要单独的进行部署
服务员子拆分,独立打包,部署和升级,保证每一个服务清晰的任务划分,利于扩展
其有着如下定义:
SpringCloud架构体系 - 图5
目前微服务做好的解决方案是SpringCloud和Dubbo

SpringCloud架构

依赖于SpringBoot,快速开发,持续交付和容易部署,组件众多

技术体系


SpringCloud架构体系 - 图6


Eureka

分为eureka-server和eureka-client,基于REST的服务发现组件


SpringCloud架构体系 - 图7


Ribbon

是一个用作负载均衡的组件


SpringCloud架构体系 - 图8


Feign

是一个声明式的Web Service客户端,是一个轻量级的http框架


SpringCloud架构体系 - 图9


Hystrix

提供了熔断器功能,能够阻止分布式系统中出现联动故障


SpringCloud架构体系 - 图10


Zuul

致力于网关解决方案的开源组件


SpringCloud架构体系 - 图11


Spring Gateway

Spring Cloud Gateway 旨在为微服务架构提供简单、 有效且统一的 API 路由管理方式。


SpringCloud架构体系 - 图12


Spring Config

提供外部配置支持


SpringCloud架构体系 - 图13


Bus

消息总线


SpringCloud架构体系 - 图14


OAuth2.0

标准的授权协议


SpringCloud架构体系 - 图15


Sleuth

springcloud为分布式提供的链路追踪的解决方案


SpringCloud架构体系 - 图16


常见微服务架构

Dubbo架构

Dubbo+Zookeeper+SpringBoot
配套的通信方式为RPC
注册中心使用Zookeeper/Redis
配置中心使用diamond

但是这一套架构对于容错降级和熔断,链路追踪等方面都需要自行实现处理,过于复杂

Springcloud

Springcloud 全家桶(Netflix)
配套使用restful作为通信方式
使用eureka/consul 作为注册中心
配置中心为config
断路器hystrix
网关zuul
分布式追踪系统 sleuth+zipkin

但是Netflix现在已经代码闭源,对于新的开发不再推荐使用该架构

SpringCloudAlibaba

一站式解决方案
springCloudAlibaba 作为新的微服务架构,在其中你都能找到对应Netflix的组件
其使用Nacos作为注册和配置中心
断路器使用Sentinel
链路追踪使用Skywalking
使用restful作为通信方式

微服务架构实现对比

image.png