1.什么是Spring Cloud
1.1 Spring Cloud 框架为开发人员提供了快速构建健壮云应用程序的工具。我们还可以构建基于微服务的应用程序,例如配置管理、服务发现、断路器、智能路由、集群状态、微代理、控制总线、一次性令牌等。使用 Spring Cloud,开发人员可以快速开发实现设计模式的服务和应用程序。这些模式在任何分布式环境中都能很好地工作,包括裸金属数据中心、开发人员的笔记本电脑以及托管平台如 Cloud Foundry。
1.2裸金属数据中心:这是一台专用于单租户(租用服务器的人)的物理服务器。这些服务器不在客户之间共享。租户可以根据其对性能、安全性和可靠性的需求优化性能。裸金属数据中心也被称为单租户物理服务器或托管专用服务器。操作系统直接安装在裸金属服务器上,提供更好的性能。
1.3Cloud Foundry:Cloud Foundry 是一个开源的多云平台即服务(PaaS)平台。您可以将应用程序部署到自己的计算基础设施上。
2.Spring Cloud特点
Spring Cloud 的一个伟大之处在于它构建在 Spring Boot 的概念之上。Spring Cloud 是建立在 Spring 框架的一些常见构建块之上的,这些构建块如下:
1.智能路由和服务发现
2.服务间调用
3.负载均衡
4.领导选举
5.全局锁
6.分布式配置
7.分布式消息传递
2.1服务间调用
这是“微服务如何通过服务注册表或 Eureka 服务器与其他依赖的微服务进行通信”的过程。服务间调用遵循一系列的步骤。
1.注册服务
2.获取注册表
3.查找下游服务
4.解析底层 IP 地址
5.调用 REST 终端点
2.2负载均衡
负载均衡有效地将网络流量分布到多个后端服务器或服务器池。负载均衡的目标是最大化吞吐量,最小化响应时间,提高效率,并优化资源使用。它避免了任何单个资源的过载。使用具有负载均衡的多个组件可以通过冗余性增加可靠性和可用性。
2.3领导选举
领导选举允许应用程序通过第三方系统与其他应用程序一起工作。领导选举用于在不牺牲可用性的情况下提供全局状态或全局排序。
2.4全局锁
全局锁用于确保没有两个线程同时访问同一资源。程序员使用一种机制来消除这种情况,这称为锁。每个线程首先获取锁,对资源进行操作,然后释放锁供其他线程使用。
2.5分布式配置
分布式配置是为所有微服务的每个实例进行配置的过程。"Spring Cloud Config 服务器"为分布式系统中的外部化配置提供了客户端支持。通过分布式配置,我们有一个集中的位置来管理所有环境中应用程序的外部属性。
2.6分布式消息传递
分布式消息传递系统具有可靠性、可伸缩性和持久性的优点。消息传递模式遵循发布-订阅(Pub-Sub)模型。在发布-订阅模型中,消息的发送者称为发布者,消息的接收者称为订阅者。Apache Kafka 和 RabbitMQ 是流行的高吞吐量消息传递系统。
3.Spring Cloud组件
3.1配置(Configuration)
Spring Cloud 配置组件为分布式系统中的服务器端和客户端提供了外部化配置的支持。我们可以通过配置服务器来管理应用程序在所有环境中的外部属性。Spring Cloud 配置服务器可以使用 Git、SVN(Apache Subversion)、文件系统和 Vault 来存储配置。配置客户端(微服务应用)在启动时从服务器检索配置。
3.2服务发现(Service Discovery)
服务发现是自动检测网络上的设备和服务。换句话说,服务发现是应用程序和微服务在分布式环境中连接的方式。服务发现的实现包括两种模式:
客户端发现(Client-side discovery):在客户端发现中,客户端负责确定可用服务的网络位置。客户端使用负载均衡算法选择一个可用服务,并发出请求。Netflix OSS 是客户端发现模式的一个示例。
服务器端发现(Server-side discovery):在服务器端发现中,客户端通过负载均衡器向服务发出 HTTP 请求。负载均衡器联系服务注册表,并将每个请求路由到可用的服务实例。
与客户端发现类似,服务实例在服务注册表中注册和注销。AWS ELB(弹性负载均衡器)是服务器端发现的一个示例。ELB 在来自互联网的外部流量上进行负载均衡。
3.3断路器(Circuit Breakers)
Netflix 创建了一个名为 Hystrix 的库,它实现了断路器模式。断路器计算何时打开和关闭电路,以及在发生故障时应采取的措施。当所有服务在某个时刻都失败时,断路器会优雅地处理这些故障。断路器有三种状态:打开(OPEN)、关闭(CLOSED) 和 半开(HALF-OPEN)。
3.4CLOSED 状态:如果断路器处于 CLOSED 状态,并且所有调用都会传递到供应商微服务。它的响应没有任何延迟。
3.5OPEN 状态:断路器返回错误调用而不执行函数。
3.6HALF-OPEN 状态
HALF-OPEN 状态:当函数执行超时时,电路转入 HALF-OPEN 状态。 它测试潜在的问题是否仍然存在。 它是一种监控和反馈机制。 它会尝试调用供应商微服务以检查其是否已恢复。 如果对供应商的调用超时,则电路保持在开路状态。 如果调用返回成功,则电路切换到 CLOSED 状态。 在 HALF-OPEN 状态期间,断路器将所有外部调用返回到服务并出现错误。
3.7路由和消息传递(Routing and Messaging)
云应用程序由许多微服务组成,因此通信将是关键性的。Spring Cloud 支持通过消息传递或 HTTP 请求进行通信。路由使用 Netflix Ribbon 和 OpenFeign,而消息传递则使用 Kafka 或 Rabbit MQ。
3.8API 网关(API Gateway)
API 网关允许我们将 API 请求(外部或内部)路由到连接的服务。它还提供了在 Spring MVC 顶部构建 API 网关的库。其目标是为它们提供横切关注点,如安全性和监控。
3.9追踪(Tracing)
Spring Cloud 的另一个功能是分布式追踪。追踪是为了从应用程序获取数据的单个请求。追踪会导致大量请求传递到各种微服务。
我们可以在项目中添加 Spring Cloud Sleuth 库以启用追踪。Sleuth 负责记录时序,用于延迟分析。我们可以将此时序导出到 Zipkin。
3.10持续集成流水线和测试(CI Pipeline and Testing)
Spring Cloud 流水线是适用于 Jenkins 和 Concourse 的自命不凡(自大)的流水线,它会自动为应用程序创建流水线。在各种服务中进行构建、测试和部署对于成功的云原生应用程序非常关键。
Jenkins 流水线提供了一组工具,旨在将简单和更高级的交付流程建模为代码。流水线的定义写入名为 Jenkinsfile 的文本文件中。流水线有两种语法:声明性和脚本化。这些语法分为两部分:步骤(Steps)和阶段(Stages)。步骤是流水线的基本部分,它们告诉 Jenkins 服务器要做什么。阶段是流水线的主要部分。阶段在逻辑上将一些步骤分组在一起,这些步骤在流水线的结果屏幕上显示。