# SpringCloud 简介

Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具,它为基于 JVM 的云应用开发中的配置管理、服务发现、断路由、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

pring Cloud 中包含了 spring-cloud-config、spring-cloud-bus 等近 20 个子项目

Spring Cloud 本身并不是一个拿来即可用的框架,他是一套微服务规范,共有两代实现

  • Spring Cloud Netflix 是 Spring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成
  • Spring Cloud Alibaba 是 Spring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成

这里介绍的 Spring Cloud 特指 Spring Cloud 的第一代实现

# Spring Cloud 常用组件

Spring Cloud 组件 描述
Spring Cloud Netflix Eureka Spring Cloud Netflix 中的服务治理组件,包含服务注册中心、服务注册与发现机制的实现。
Spring Cloud Netflix Ribbon Spring Cloud Netflix 中的服务调用和客户端负载均衡组件。
Spring Cloud Netflix Hystrix 人称 “豪猪哥”,Spring Cloud Netflix 的容错管理组件,为服务中出现的延迟和故障提供强大的容错能力。
Spring Cloud Netflix Feign 基于 Ribbon 和 Hystrix 的声明式服务调用组件。
Spring Cloud Netflix Zuul Spring Cloud Netflix 中的网关组件,提供了智能路由、访问过滤等功能。
Spring Cloud Gateway 一个基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关框架,它使用 Filter 链的方式提供了网关的基本功能,例如安全、监控 / 指标和限流等。
Spring Cloud Config Spring Cloud 的配置管理工具,支持使用 Git 存储配置内容,实现应用配置的外部化存储,并支持在客户端对配置进行刷新、加密、解密等操作。
Spring Cloud Bus Spring Cloud 的事件和消息总线,主要用于在集群中传播事件或状态变化,以触发后续的处理,例如动态刷新配置。
Spring Cloud Stream Spring Cloud 的消息中间件组件,它集成了 Apache Kafka 和 RabbitMQ 等消息中间件,并通过定义绑定器作为中间层,完美地实现了应用程序与消息中间件之间的隔离。通过向应用程序暴露统一的 Channel 通道,使得应用程序不需要再考虑各种不同的消息中间件实现,就能轻松地发送和接收消息。
Spring Cloud Sleuth Spring Cloud 分布式链路跟踪组件,能够完美的整合 Twitter 的 Zipkin。

# Spring Cloud Erueka

# Eureka 注册中心

Eureka 采用 C/S 架构,它包括两大组件:

  1. EurekaServer:服务端,注册中心

当微服务启动时,会将自己注册到 Eureka Server,Eureka Server 维护一个可用服务列表,存储所有注册到其中的可用的服务信息,这些信息可以在 Eureka Server 的管理界面中看到

  • 记录服务信息
  • 心跳监控
  1. EurkaClient:客户端
    • Provider:服务提供者。
      • 注册自己的信息到 EurekaServer。
      • 每隔 30 秒内想 EurekaServer 发送心跳
    • consumer:服务消费者。
      • 根据服务名称从 EurekaServer 中拉去服务列表。
      • 基于服务列表做负载均衡,选中一个微服务后发起远程调用。

注:“心跳” 指的是一段定时发送的自定义信息,让对方知道自己 “存活”,以确保连接的有效性。大部分 CS 架构的应用程序都采用了心跳机制,服务端和客户端都可以发心跳。通常情况下是客户端向服务器端发送心跳包,服务端用于判断客户端是否在线。

# Eureka 服务注册与发现

图 1:Eureka 原理图

三个角色:

  • 服务注册中心 (Register Server): 它是一个 Erueka Server,用于提供服务注册和发现功能。
  • 服务提供者 (Provider Service): 它是一个 Erueka Client,用于提供服务,它将自己提供的服务注册到服务注册中心,以供服务消费者发现。
  • 服务消费者 (Consumer Service): 他是一个 Erueka Client,用于服务消费,它可以从服务注册中心获取服务列表,调用所需的服务。

Eureka 实现服务注册与发现的流程如下:

  1. 搭建一个 Eureka Server 作为服务注册中心;
  2. 服务提供者 Eureka Client 启动时,会把当前服务器的信息以服务名(spring.application.name)的方式注册到服务注册中心;
  3. 服务消费者 Eureka Client 启动时,也会向服务注册中心注册;
  4. 服务消费者还会获取一份可用服务列表,该列表中包含了所有注册到服务注册中心的服务信息(包括服务提供者和自身的信息);
  5. 在获得了可用服务列表后,服务消费者通过 HTTP 或消息中间件远程调用服务提供者提供的服务。

服务注册中心(Eureka Server)所扮演的角色十分重要,它是服务提供者和服务消费者之间的桥梁。服务提供者只有将自己的服务注册到服务注册中心才可能被服务消费者调用,而服务消费者也只有通过服务注册中心获取可用服务列表后,才能调用所需的服务。