SpringCloud微服务

1.1 EureKa 注册中心

@EnableEurekaClient 提供者–消费者 建立连接后 EureKa崩溃仍可访问

高可用 运行多个注册中心 轮巡解决 可避免 崩溃

设置密码 保证安全 提供者 消费者 需要携带用户名密码

1.2 Ribbon 框架自带的负载均衡

轮巡解决 大访问量

1.3 Feign

一种声明式、模板化的HTTP客户端,可用于调用HTTP API实现微服务之间的远程服务调用。它的特点是使用少量的配置定义服务客户端接口,可以实现简单和可重用的RPC调用

简化HTTP 请求 避免拼接冗长字符串

自带负载均衡

1.3.1 Hystrix

断路器 快速失败防止浪费CPU 可通过仪表盘查看服务信息

1.4 Zuul

网关 配置路由 配置过滤器 优先级配置 请求拦截

1.5 配置中心

​ git配置

1.6 Sleuth

​ 服务链路追踪 日志 微服务监控

1.7 Sidecar

​ 跨平台服务调用

汇总

Spring Cloud 是一组框架和工具,旨在帮助开发者使用 Spring 构建分布式系统。它是构建微服务架构的一个强大平台,提供了许多常用的基础设施支持,特别是在云环境中。Spring Cloud 与 Spring Boot 配合使用,能够简化微服务的开发过程,并且为服务发现、负载均衡、断路器、分布式配置等提供了开箱即用的解决方案。

以下是 Spring Cloud 的一些关键特性和组件:

1. 服务发现 (Eureka)

  • Eureka 是 Spring Cloud 提供的服务发现和注册中心。它允许服务自动注册到 Eureka 服务器中,并使其他服务能够发现并与它们进行通信。Eureka 采用客户端注册方式,服务会定期向 Eureka Server 注册其信息,并在失效时注销。
  • Eureka Client: 服务端需要通过 @EnableEurekaClient 注解来启用 Eureka 客户端功能。
  • Eureka Server: 作为服务的注册中心,Eureka Server 负责管理所有服务的注册信息。

2. 负载均衡 (Ribbon)

  • Ribbon 是客户端负载均衡器,能够通过集成在客户端的算法进行请求的负载均衡。它与 Eureka 紧密集成,在服务发现时可以选择合适的服务实例来进行请求转发。
  • 自动负载均衡: 通过使用 @LoadBalanced 注解,Spring Cloud 可以让你的 RestTemplate 客户端自动进行负载均衡。

3. 断路器 (Hystrix)

  • Hystrix 是一个用于处理分布式系统中服务间通信故障的工具。它提供了一种方式来隔离服务,防止级联失败,并在服务不可用时提供回退机制。
  • Hystrix Dashboard: 监控 Hystrix 的运行状态和健康度。
  • Hystrix Command: 通过注解和编程方式实现服务调用时的容错控制。

4. API 网关 (Zuul / Spring Cloud Gateway)

  • Zuul 是一个路由网关服务器,它提供动态路由、监控、过滤等功能,可以作为微服务的入口。所有外部请求都会通过 Zuul 路由到合适的微服务。
  • Spring Cloud Gateway: 作为 Zuul 的替代品,提供更高效的路由功能,并且可以支持更多的现代特性,如 WebFlux 支持、更简洁的配置和更强的过滤功能。

5. 配置中心 (Spring Cloud Config)

  • Spring Cloud Config 提供了一个集中的配置服务器,允许微服务从配置服务器获取配置,并支持动态刷新配置。配置可以保存在 Git 或 SVN 中。
  • Config Server: 用于读取存储在远程 Git 仓库或本地文件系统的配置,并提供给客户端应用。

6. 消息总线 (Spring Cloud Bus)

  • Spring Cloud Bus 用于在多个服务之间传播配置变更或事件。通过消息总线,配置变更可以实时通知到所有服务,避免重新启动服务来刷新配置。

7. 分布式跟踪 (Sleuth / Zipkin)

  • Spring Cloud Sleuth 为 Spring 应用提供分布式跟踪功能,能够跟踪请求在多个服务中的传递过程。它通过生成全局唯一的跟踪 ID 来帮助开发者追踪请求。
  • Zipkin 是一个分布式追踪系统,用于收集和分析服务调用链的数据,以帮助开发者识别性能瓶颈和问题。

8. 集成监控 (Spring Boot Actuator + Prometheus / Micrometer)

  • Spring Boot Actuator 提供了对微服务运行时状态的监控,包括应用健康检查、度量、环境信息等。
  • Micrometer 是 Spring 的度量库,能够与多个监控系统(如 Prometheus、Graphite、Datadog)集成。

9. 容错管理 (Resilience4j)

  • Resilience4j 是一个轻量级的容错库,能够帮助开发者实现断路器、重试、限流等容错策略,作为 Hystrix 的替代品。

10. Spring Cloud Kubernetes

  • Spring Cloud Kubernetes 提供了与 Kubernetes 的集成支持,允许 Spring Cloud 应用与 Kubernetes 的服务发现、配置管理等功能结合使用。

Spring Cloud 生态系统简要图

1
2
3
4
5
6
7
8
9
+------------------+     +-----------------+
| Spring Cloud |<--->| Service A |
| Eureka | +-----------------+
| Config | +-----------------+
+------------------+ | Service B |
+-----------------+
+-----------------+
| Service C |
+-----------------+

示例:Spring Cloud 微服务配置

假设你正在开发一个基于 Spring Cloud 的应用,下面是一些常见配置示例。

1. Eureka Server 配置

1
2
3
4
5
6
7
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}

2. Eureka Client 配置

1
2
3
4
5
6
7
@EnableEurekaClient
@SpringBootApplication
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
}

3. Zuul 网关配置

1
2
3
4
5
6
7
@EnableZuulProxy
@SpringBootApplication
public class ZuulGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulGatewayApplication.class, args);
}
}

4. Spring Cloud Config 配置

  • 配置文件(application.yml)
1
2
3
4
spring:
cloud:
config:
uri: http://localhost:8888

5. Hystrix 配置

1
2
3
4
5
6
7
@EnableCircuitBreaker
@SpringBootApplication
public class HystrixExampleApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixExampleApplication.class, args);
}
}

Spring Cloud 使用场景

Spring Cloud 适合构建微服务架构,特别是在以下场景下表现尤为出色:

  1. 分布式系统:多个服务之间需要高效地通信,Spring Cloud 提供的工具能够帮助你实现服务发现、负载均衡、断路器等。
  2. 多租户应用:配置中心、消息总线等可以帮助实现多租户环境中的配置共享与管理。
  3. 微服务治理:通过断路器、负载均衡、服务注册和发现来确保微服务的可靠性。
  4. 容错和监控:通过 Hystrix、Sleuth 和 Actuator 提供的监控和容错功能,提升系统的稳定性和可维护性。

总结

Spring Cloud 为开发者提供了一个全面的微服务开发工具集,涵盖了从服务注册、服务发现、负载均衡、配置管理到容错机制等多个方面的功能。它与 Spring Boot 深度集成,极大地简化了分布式系统的开发、部署和运维。