VS Code开发Spring Boot + Cloud示例(三)Spring Cloud总体理解

时间:2024-04-12 09:50:09

Spring官网和很多Spring Cloud教程都是直接介绍一个个服务怎么创建,但缺少Spring Cloud整体介绍,整个Cloud平台是怎么搭建并运行的。接下来我将从零开始一步步跟大家一起进入Spring Cloud世界。

Spring官网首页说 Spring Cloud是COORDINATE ANYTHING: DISTRIBUTED SYSTEMS SIMPLIFIED(协调一切:简化分布式系统)。也就是说Spring Cloud是一套比较简单的用来搭建分布式系统的框架。

这是官网首页的Spring Cloud架构图:
VS Code开发Spring Boot + Cloud示例(三)Spring Cloud总体理解
结合官网参考手册(Spring Cloud Reference Manual)来理解这个图:

1 API Gateway

API Gateway:本项目提供了一个建立在Spring生态系统之上的API网关,包括:Spring 5, Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供一种简单而有效的方式来路由到APIs,并为它们提供交叉关注,例如:安全性、监视/度量和弹性。Spring Cloud Gateway基于服务发现的默认路由规则说到“Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix Zuul”。纠错帖:Zuul & Spring Cloud Gateway & Linkerd性能对比有相关组件的对比。

2 config dashboard

属于Spring Cloud Config。Spring Cloud Config为分布式系统中的外部化配置提供了服务器端和客户端支持。通过配置服务器,您有一个中心位置来管理所有环境中应用程序的外部属性。客户机和服务器上的概念与Spring环境和PropertySource抽象映射一致,因此它们非常适合Spring应用程序,但可以用于任何语言中运行的应用程序。随着应用程序从开发到测试再到生产,您可以管理这些环境之间的配置,并确保应用程序在迁移时拥有运行所需的一切。服务器存储后端的默认实现使用git,因此它很容易支持带有标签的配置环境版本,并且可以访问各种用于管理内容的工具。很容易添加替代实现,并通过Spring配置将它们插入其中。

3 service registry

service registry包括Eureka,ConsulZookeeper

Eureka是Spring Cloud Netflix 中的组件。Netflix官网介绍:本项目通过自动配置和绑定到Spring环境以及其他Spring编程模型习惯用法,为Spring Boot应用程序提供Netflix OSS集成。通过一些简单的注释,您可以在应用程序中快速启用和配置通用模式,并使用经过实战测试的Netflix组件构建大型分布式系统。提供的模型包括服务发现(Eureka)、断路器(Hystrix)、智能路由(Zuul)和客户端负载平衡(Ribbon))

Eureka包括Service Discovery: Eureka ClientsService Discovery: Eureka Server。服务器端,也被称作是服务注册中心,用于提供服务的注册与发现。Eureka支持高可用的配置,当集群中有分片出现故障时,Eureka就会转入自动保护模式,它允许分片故障期间继续提供服务的发现和注册,当故障分片恢复正常时,集群中其他分片会把他们的状态再次同步回来。客户端组件包含服务消费者与服务生产者。在应用程序运行时,Eureka客户端向注册中心注册自身提供的服务并周期性的发送心跳来更新它的服务租约。同时也可以从服务端查询当前注册的服务信息并把他们缓存到本地并周期性的刷新服务状态。

根据SpringCloud服务注册中心比较:Consul vs Zookeeper vs Etcd vs Eureka来看,Consul功能更强。

4 breaker dashboard

包括Circuit Breaker: Hystrix ClientsCircuit Breaker: Hystrix Dashboard

断路器本身是一种开关保护机制,用于在电路上保护线路过载,当线路中有电器发生短路时,断路器能够及时切断故障电路,防止发生过载、发热甚至起火等严重后果。

在微服务架构中,由于各个服务都是在各自的进程中运行,就有可能由于网络原因或者服务自身的问题导致调用故障或延迟,随着服务的积压,可能会导致服务崩溃。为了解决这一系列的问题,断路器等一系列服务保护机制出现了。

Spring Cloud Hystrix 实现了断路器、线路隔离等一系列服务保护功能。它也是基于 Netflix 的开源框架 Hystrix 实现的,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix 具备服务降级、服务熔断、线程和信号隔离、请求缓存、请求合并以及服务监控等强大功能。

5 distributed tracing

就是Spring Cloud Sleuth。在微服务架构中,众多的微服务之间互相调用,如何清晰地记录服务的调用链路是一个需要解决的问题。同时,由于各种原因,跨进程的服务调用失败时,运维人员希望能够通过查看日志和查看服务之间的调用关系来定位问题,而Spring cloud sleuth组件正是为了解决微服务跟踪的组件。Starting with version 2.0.0, Spring Cloud Sleuth uses Brave as the tracing library(从2.0.0开始,Spring Cloud Sleuth用Brave作为跟踪库)。

6 message broker

message broker属于Spring Cloud Bus,使用Spring Cloud Stream广播消息。因此,为了让消息流起来,您只需要在类路径中包含您选择的绑定器实现。有AMQP (RabbitMQ)和Kafka 的方便启动程序。一般来说,Spring Cloud Stream依赖于Spring Boot自动配置约定来配置中间件。

7 总结

Spring Cloud各个组件相互配合,合作支持了一套完整的微服务(micorservices)架构。其中:

  • service registry(Consol,Zookeeper,Eureka)负责服务的注册与发现,很好将各服务连接起来
  • Hystrix (breaker dashboard)负责监控服务之间的调用情况,连续多次失败进行熔断保护,并给予图形化的展示
  • Spring Cloud Config(config dashboard) 提供了统一的配置中心服务
  • 当配置文件发生变化的时候,Spring Cloud Bus (message brokers)负责通知各服务去获取最新的配置信息
  • 所有对外的请求和服务,用API Gateway(或Zuul)处理
  • 最后使用Sleuth(distributed tracing)将所有的请求数据记录下来,方便进行后续分析

Spring Cloud从设计之初就考虑了绝大多数互联网公司架构演化所需的功能,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。这些功能都是以插拔的形式提供出来,方便我们系统架构演进的过程中,可以合理的选择需要的组件进行集成,从而在架构演进的过程中会更加平滑、顺利。

微服务架构是一种趋势,Spring Cloud提供了标准化的、全站式的技术方案,意义可能会堪比当前Servlet规范的诞生,有效推进服务端软件系统技术水平的进步。

本文主要参考了从架构演进的角度聊聊Spring Cloud都做了些什么?