Spring Cloud最全详解(万字图文总结)

Spring Cloud最全详解(万字图文总结)-mikechen

Spring Cloud是什么?

SpringCloud 是一套完整的微服务解决方案,基于Spring框架SpringBoot框架,为开发人员提供了一套完整的微服务解决方案。

 

Spring Cloud核心组件

微服务的核心要素在于服务注册与发现、路由、熔断、降级、负载均衡、分布式配置,所以Spring Cloud提供相关的组件。

如下图所示:

Spring Cloud最全详解(万字图文总结)-mikechen

Spring Cloud提供了一系列的组件实现微服务架构,包括Eureka(服务注册与发现)、Ribbon(客户端负载均衡)、Hystrix(容错和熔断)、Feign(声明式HTTP客户端)等等。

下面我就来一一来详解具体的组件@mikechen

 

Spring Cloud Zuul网关

第一步:请求统一通过API网关Zuul来访问内部服务,处理所有进出微服务系统的请求和流量。

ZuulSpring Cloud中的微服务网关,是Spring Cloud组件之一,用于实现动态路由、请求过滤和请求转发等功能。

Spring Cloud最全详解(万字图文总结)-mikechen

Zuul作为边缘服务网关,具有路由、负载均衡、认证、授权、监控等功能,它接收来自客户端的请求,并将其路由到适当的后端微服务。

Zuul还可以执行身份验证和授权,确保只有授权的请求能够访问特定的微服务。

Zuul 本质就是一系列的filter过滤器,Zuul工作原理:就是基于ZuulFilter的链式调用请求机制。

Zuul 作为一个API网关,通过路由配置和请求过滤器实现请求的动态路由、请求过滤和请求转发等功能。

它能够集中管理和保护后端的服务,并提供负载均衡和动态路由的能力,以便更好地控制和管理微服务架构中的请求流量。

 

Spring Cloud Eureka

网关接收到请求后,从注册中心Eureka获取可用服务。

Eureka 作为 Spring Cloud框架的注册中心,与之对应的是 Dubbo 框架的Zookeeper

Spring Cloud的注册中心通过Eureka实现,它提供了服务注册和发现的功能。

如下图所示:

Spring Cloud最全详解(万字图文总结)-mikechen

Eureka提供了服务注册和发现的功能,每个微服务都可以将自己的信息注册到Eureka服务器,并提供一个唯一的标识符。

其他微服务提供者将自己的实例信息注册到Eureka服务器上,包括:主机地址、端口号等。

而服务消费者从Eureka服务器上获取可用的服务实例列表,并通过负载均衡策略选择其中的一台实例进行调用。

 

Spring Cloud Ribbon

Ribbon主要作用是提供客户端的软件负载均衡算法,它与Spring Cloud集成,提供了在服务之间进行负载均衡的能力。

客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,在客户端就进行负载均衡算法分配。

如下图所示:

Spring Cloud最全详解(万字图文总结)-mikechen

Ribbon提供了多种负载均衡策略,包括:

  • 随机策略(Random);
  • 轮询策略(Round Robin);
  • 权重策略(Weighted);
  • 最少连接策略(Least Connection)等。

Ribbon与Eureka服务发现组件无缝集成,它可以通过查询Eureka服务器获取可用的服务实例列表,并根据负载均衡策略选择合适的实例进行请求。

 

Spring Cloud Feign

Feign是一个声明式的、基于接口的HTTP客户端工具,微服务之间通过Feign进行通信处理业务。

Feign提供了一种简单的方式来定义和使用HTTP客户端接口,使得微服务之间的通信更加简洁和直观。

如下所示:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

@FeignClient(name = "userService")
public interface UserServiceFeignClient {

    @GetMapping("/users")
    List<User> getUsers();
}

Spring Cloud Feign与其他Spring Cloud组件无缝集成,特别是与Eureka和Ribbon集成得非常好。

 

Spring Cloud Hystrix

Hystrix负责处理服务超时熔断

Hystrix是SpringCloud的一个核心组件,提供了容错机制和故障保护功能,以增加系统的稳定性和弹性。

Hystrix实现了熔断器模式,当远程服务发生故障或超时时,可以防止连锁故障并降低系统的崩溃风险。

首先,我们需要了解为什么需要熔断器这种模式。

比如在分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个别的服务。

如下图所示:

Spring Cloud最全详解(万字图文总结)-mikechen

如果各个服务正常运行,那大家齐乐融融,但是如果其中一个服务Service C崩坏掉会出现什么样的情况呢?

很有可能就会出现,下图的拖挂别的服务场景。

Spring Cloud最全详解(万字图文总结)-mikechen

ServiceB依赖于ServiceC,由于ServiceC访问量比较大,由于ServiceC挂了,很可能ServiceB也会被拖累挂。

最终一个服务失败,导致整条链路的服务都失败的情形,为造成大面积的服务雪崩效应。

所以就需要Hystrix 断路器,实现熔断,来隔离故障的服务。

除此之外,Hystrix提供了丰富的监控和指标收集功能,可以实时监控服务调用的健康状态和性能指标。

 

Spring Cloud Config

Spring Cloud Config是一个用于集中管理和动态配置分布式系统的配置管理工具。

Spring Cloud Config提供了一个集中化的配置服务器,允许应用程序在不重新部署的情况下获取配置信息。

Spring Cloud Config支持多环境的配置管理,可以为不同的环境,比如:开发、测试、生产创建不同的配置文件,并根据应用程序所在的环境自动加载相应的配置。

除此之外,Spring Cloud Config支持配置文件的动态刷新,这意味着应用程序可以在运行时获取最新的配置信息,而无需重新启动或重新部署。

 

Spring Cloud Sleuth

Sleuth是一个分布式跟踪系统的组件,它可以与Zipkin等跟踪工具集成,实现对请求的跟踪和监控。

随着微服务架构的流行,服务按照不同的维度进行拆分,在复杂的微服务架构系统中,会形成一个复杂的分布式服务调用链路,如下图所示:

Spring Cloud最全详解(万字图文总结)-mikechen

面对复杂的调用链路就带来一系列问题:

  • 如何快速发现问题?
  • 如何判断故障影响范围?
  • 如何梳理服务依赖以及依赖的合理性?
  • 如何分析链路性能问题以及实时容量规划?

而链路追踪的出现正是为了解决这种问题,它可以在复杂的服务调用中定位问题。

 

Spring Cloud Turbine

Spring Cloud Turbine是Spring Cloud提供的一个组件,用于将Hystrix的监控数据聚合和展示。

Spring Cloud Turbine可以集中收集来自多个服务实例的Hystrix监控数据,并通过可视化界面进行展示和监控。

Spring Cloud Turbine提供了一个可视化监控界面,用于展示聚合的Hystrix监控数据。开发人员可以通过访问该界面,查看汇总的监控数据,并进行性能分析、故障排查等操作。

 

Spring Cloud原理架构

Spring Cloud原理架构,如下图所示:

Spring Cloud最全详解(万字图文总结)-mikechen
通过这张图,可以比较清楚的了解到Spring Cloud组件,以及运行机制:

第一步:请求统一通过API网关Zuul来访问内部服务;

第二步:网关接收到请求后,从注册中心Eureka获取可用服务;

第三步:由Ribbon进行均衡负载后,分发到后端具体实例;

第四步:微服务之间通过Feign进行通信处理业务;

第五步:Hystrix负责处理服务超时熔断;

第六步:Turbine监控服务间的调用和熔断相关指标。

以上就是Spring Cloud详解,更多Spring Cloud请查看:Spring Cloud Alibaba详解(史上最全组件文档教程)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法