Spring Cloud 的组件

17 Mar 2025 | 4 分钟阅读

以下是 Spring Cloud 的组件:

  • 配置
  • 服务发现
  • 断路器
  • 路由和消息传递
  • API 网关
  • 追踪
  • CI 管道和测试

配置

Spring Cloud 配置组件为分布式系统中的外部化配置提供服务器端和客户端支持。我们可以使用配置服务器来管理所有环境中的应用程序的外部属性。Spring Cloud 配置服务器可以使用 Git、SVN(Apache Subversion)、文件系统和 Vault 来存储配置。配置客户端(微服务应用程序)从服务器启动时检索配置客户端。

Spring Cloud Components

服务发现

服务发现是在网络上自动检测设备和服务。换句话说,服务发现是应用程序和微服务在分布式环境中连接的方式。服务发现的实现包括:

  • 维护地址全局视图的中央服务器
  • 连接到中央服务器的客户端可以更新和检索地址。

有两种发现模式:客户端发现服务器端发现

  • 客户端发现:在客户端发现中,客户端负责确定可用服务的网络位置。客户端使用负载平衡算法来选择可用服务之一并发出请求。Netflix OSS 是客户端发现模式的一个例子。
  • 服务器端发现:在服务器端发现中,客户端通过负载均衡器向服务发出 HTTP 请求。负载均衡器联系服务注册表并将每个请求路由到可用的服务实例。类似于客户端发现,服务实例在服务注册表中注册和注销。AWS ELB(弹性负载均衡器)是服务器端发现的一个例子。ELB 均衡来自互联网的外部流量。
Spring Cloud Components

在上图中,生产者是将消息发送到消息代理(服务注册表)的软件。消费者也是接收消息并处理它的软件。

断路器

Netflix 创建了一个名为 Hystrix 的库。它实现了断路器模式。断路器计算何时打开和关闭电路以及在失败时做什么。当所有服务在某个时刻都失败时,断路器会优雅地处理这些故障。断路器有三种状态:OPEN(打开)、CLOSED(关闭)HALF-OPEN(半开)状态。

Spring Cloud Components

CLOSED 状态:如果断路器处于 CLOSED 状态,则所有调用都通过并传递到供应商微服务。它响应,没有任何延迟。

Spring Cloud Components

OPEN 状态:断路器返回错误,无需执行该函数即可调用。

Spring Cloud Components

HALF-OPEN 状态:当函数执行超时时,断路器变为 HALF-OPEN 状态。它测试潜在问题是否仍然存在。它是一种监控反馈机制。它对供应商微服务进行试调用,以检查它是否已恢复。如果对供应商的调用超时,则电路保持在 OPEN 状态。如果调用返回成功,则电路切换到 CLOSED 状态。断路器在 HALF-OPEN 状态期间向服务返回带有错误的外部调用。

Spring Cloud Components

路由和消息传递

云应用程序由许多微服务组成,因此通信将至关重要。Spring Cloud 通过消息传递或 HTTP 请求支持通信。路由使用 Netflix RibbonOpen Feign,而消息传递使用 Kafka 或 Rabbit MQ。

Spring Cloud Components

API 网关

API 网关允许我们路由 API 请求(外部或内部)以连接服务。它还提供一个用于在 Spring MVC 之上构建 API 网关的库。其目标是为它们提供横向关注点,例如安全监控

API 网关的特性

  • 基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.0 构建
  • 能够匹配任何请求属性的路由
  • 谓词和过滤器特定于路由
  • Hystrix 断路器集成
  • Spring Cloud 发现客户端集成
  • 易于编写谓词和过滤器
  • 请求速率限制
  • 路径重写
Spring Cloud Components

追踪

Spring Cloud 的另一个功能是分布式跟踪。跟踪是获取来自应用程序的数据的单个请求。跟踪会导致对各种微服务发出指数级数量的请求。

我们可以在项目中添加 Spring Cloud Sleuth 库以启用跟踪。Sleuth 负责记录时间,用于延迟分析。我们可以将此时间导出到 Zipkin。

Zipkin 是一个分布式跟踪工具,专门为分析微服务架构中的延迟问题而设计。它公开用于收集输入数据的 HTTP 端点。如果我们需要在我们的项目中添加跟踪,我们应该添加 spring-cloud-starter-zipkin 依赖项。

在微服务中,输入流量很大,所以我们不能只收集一定量的数据。为此,Spring Cloud Sleuth 提供了一种采样策略。采样策略允许我们分析有多少输入流量被发送到 Zipkin。要启用此功能,我们必须添加 spring-cloud-sleuth-stream 依赖项。

CI 管道和测试

Spring Cloud 管道是针对 Jenkins 和 Concourse 的一个有主见的(自以为是)的管道,它会自动为应用程序创建管道。构建、测试和部署各种服务对于拥有成功的云原生应用程序至关重要。

Jenkins 管道提供了一组用于将简单和更高级的交付管道建模为代码的工具。管道的定义被写入一个名为 Jenkinsfile 的文本文件中。

管道有两种语法:Declarative(声明式)Scripted(脚本式)管道。这些语法分为两部分:步骤和阶段。步骤是管道的基本部分,因为它们告诉 Jenkins 服务器要做什么。阶段是管道的主要部分。阶段逻辑上将几个步骤组合在一起,这些步骤显示在管道的结果屏幕上。