本文概述
包含以下组件:
- 组态
- 服务发现
- 断路器
- 路由和消息传递
- 网关API
- 追踪
- CI管道和测试
组态
Spring Cloud配置组件为分布式系统中的外部化配置提供服务器端和客户端支持。我们可以使用config服务器为所有环境中的应用程序管理外部属性。 Spring Cloud配置服务器可以使用Git, SVN(Apache Subversion), 文件系统和Vault来存储配置。配置客户端(微服务应用程序)在启动时会从服务器检索配置客户端。
服务发现
服务发现是通过网络自动检测设备和服务。换句话说, 服务发现是应用程序和微服务在分布式环境中的连接方式。服务发现实现包括:
- 维护地址全局视图的中央服务器。
- 连接到中央服务器的客户端可以更新和检索地址。
有两种发现模式:客户端发现和服务器端发现。
- 客户端发现:在客户端发现中, 客户端负责确定可用服务的网络位置。客户端使用负载平衡算法来选择可用服务之一并发出请求。 Netflix OSS是客户端发现模式的一个示例。
- 服务器端发现:在服务器端发现中, 客户端通过负载平衡器向服务发出HTTP请求。负载平衡器联系服务注册表, 并将每个请求路由到可用的服务实例。与客户端发现类似, 服务实例通过服务注册表注册和注销。 AWS ELB(弹性负载平衡器)是服务器端发现的示例。 ELB平衡了Internet的外部流量。
在上图中, 生产者是一种将消息发送到消息代理(服务注册表)的软件。使用者也是一种接收消息并对其进行处理的软件。
断路器
Netflix创建了一个名为Hystrix的图书馆。它实现了断路器模式。断路器计算何时打开和闭合电路, 以及在发生故障时应采取的措施。当所有服务都在某个时刻失败时, 断路器会优雅地处理这些失败。断路器具有三种状态:断开, 闭合和半断开状态。
CLOSED状态:如果断路器处于CLOSED状态, 并且所有呼叫都转到供应商微服务。它响应没有任何延迟。
断开状态:断路器不执行功能就返回错误呼叫。
半开状态:功能执行超时时, 电路变为半开状态。它测试基本问题是否仍然存在。它是一种监视和反馈机制。它会尝试致电供应商微服务以检查其是否已恢复。如果对供应商的呼叫超时, 则电路将保持在OPEN状态。如果呼叫成功返回, 则电路切换到CLOSED状态。断路器在HALF-OPEN状态期间将所有外部呼叫返回给服务, 但有错误。
路由和消息传递
云应用程序由许多微服务组成, 因此通信至关重要。 Spring Cloud支持通过消息传递或HTTP请求进行通信。路由使用Netflix Ribbon和Open Feign, 而消息传递则使用Kafka或Rabbit MQ。
网关API
API网关允许我们路由API请求(外部或内部)以连接服务。它还提供了一个用于在Spring MVC顶部构建API网关的库。其目的是向他们提供跨领域的关注, 例如安全和监视。
API网关的功能
- 建立在Spring框架5, 项目反应器和Spring Boot 2.0之上
- 能够匹配任何请求属性上的路由
- 谓词和过滤器特定于路由
- Hystrix断路器集成
- Spring Cloud Discovery客户端集成
- 易于编写谓词和过滤器
- 请求速率限制
- 路径改写
追踪
Spring Cloud的其他功能是分布式跟踪。跟踪是从应用程序获取数据的单个请求。跟踪导致对各种微服务的请求数量成倍增加。
我们可以在项目中添加Spring Cloud Sleuth库以启用跟踪。 Sleuth负责记录时序, 该时序用于延迟分析。我们可以将此时间导出到Zipkin。
Zipkin是专门设计用于分析微服务架构内部的延迟问题的分布式跟踪工具。它公开了用于收集输入数据的HTTP端点。如果需要在项目中添加跟踪, 则应添加spring-cloud-starter-zipkin依赖项。
在微服务中, 输入流量非常高, 因此我们无法仅收集一定数量的数据。为此, Spring Cloud Sleuth提供了一个采样策略。采样策略允许我们将多少输入流量发送到Zipkin进行分析。要启用此功能, 我们必须添加spring-cloud-sleuth-stream依赖项。
Cl管道和测试
Spring Cloud管道是Jenkins和Concourse的自以为是的(非常重要的)管道, 它为应用程序自动创建管道。在各种服务中进行构建, 测试和部署对于拥有成功的云原生应用程序至关重要。
Jenkins管道提供了一组工具, 用于将简单和更高级的交付管道建模为代码。管道的定义被写入名为Jenkinsfile的文本文件中。
管道具有两种语法:声明式和脚本化管道。这些语法分为两部分:步骤和阶段。步骤是管道的基本部分, 因为它们告诉Jenkins服务器要做什么。阶段是管道的主要部分。阶段在逻辑上将几个步骤分组, 这些步骤显示在管道的结果屏幕上。
评论前必须登录!
注册