难理解的不是Spring Cloud框架本身,他只是定义了实现分布式架构的一个框架。框架集成的各个组件是学习Spring Cloud体系的重点。
相比于单体架构,分布式系统的出现很好的解决了许多问题。但是同样的也放大或者带来了很多问题,比如服务间调用,服务配置管理,服务注册与发现等等。Spring Cloud框架的出现,统一方便的借助第三方组件,解决出现的问题。
- 首先我们看下官网对Spring Cloud的介绍:
- Spring Cloud提供了一些工具,让开发者可以快速的构建分布式系统中的公共模型(比如配置管理、服务发现、熔断、智能路由、微代理、控制总线、一次性密码token、全局锁、主节点选举、分布式session、集群状态)。
- 分布式系统的协调导致套路模式,使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。
- 他们可以在任意分布式环境中很好运行,包括开发者个人电脑,裸机数据中心,云厂商等托管平台。
- 特性:Spring Cloud专注于为典型用例提供良好的开箱即用体验,并提供覆盖其他用例的扩展机制。
- 分布式/版本 配置(Distributed/versioned configuration)
- 服务注册和发现(Service registration and discovery)
- 路由(Routing)
- 服务间调用(Service-to-service calls)
- 负载均衡(Load balancing)
- 熔断机制(Circuit Breakers)
- 全局锁(Global locks)
- 领导选举和集群状态(Leadership election and cluster state)
- 分布式消息(Distributed messaging) 本文主要描述Spring Cloud框架的核心套件及国内常用的类似产品
- Spring Cloud Config:由git存储库支持的集中外部配置管理。
- Spring Cloud Netflix:集成各种Netflix OSS组件(Eureka, Hystrix, Zuul, Archaius等)。
- Spring Cloud Bus:用于使用分布式消息传递将服务和服务实例链接在一起的事件总线。用于在集群中传播状态更改(例如,配置更改事件)。
- Spring Cloud Cloudfoundry:在主要的云厂商集成构建的应用程序。提供服务发现实现,方便实现受保护资源的单点登录和OAuth2。
- Spring Cloud Open Service Broker:提供构建实现Open service broker API的服务代理的起点。
- Spring Cloud Cluster:领导选举和常见的状态模式, 具有Zookeeper, Redis, Hazelcast, Consul的抽象和实现。 - Spring Cloud Consul:使用Hashicorp Consul进行服务发现和配置管理。
- Spring Cloud Security:支持负载均衡的OAuth2 rest客户端和Zuul代理中的 authentication header转发。
- Spring Cloud Sleuth:Spring Cloud应用的分布式跟踪,兼容Zipkin, HTrace和基于日志(如ELK)的跟踪。
- Spring Cloud Data Flow:一个用于现代运行时上可组合微服务应用的云原生编排服务。易于使用的DSL、拖放GUI和rest-api一起简化了基于微服务的数据管道的整体编排。
- Spring Cloud Stream:一个轻量级的事件驱动的微服务框架,用于快速构建可以连接到外部系统的应用程序。简单的声明模型,使用Apache Kafka或RabbitMQ在Spring Boot应用程序之间发送和接收消息。
- Spring Cloud Stream Applications:Spring Boot应用提供了与外部中间件系统的集成,如Apache Kafka, RabbitMQ等,使用Spring Cloud Stream中的绑定抽象。
- Spring Cloud Task:一个短期的微服务框架,用于快速构建执行有限数量数据处理的应用程序。简单的声明,为Spring Boot应用程序添加功能和非功能特性。
- Spring Cloud Task App Starters:Spring cloud Task App Starters是Spring引导应用程序,它可以是任何进程,包括Spring Batch作业,它们不会永远运行,并且在有限的数据处理周期后结束/停止。
- Spring Cloud Zookeeper:使用Apache Zookeeper进行服务发现和配置管理。
- Spring Cloud Connectors:使各种平台中的PaaS应用程序可以轻松地连接到后端服务,如数据库和消息代理(该项目以前称为“Spring Cloud”)。
- Spring Cloud Starters:Spring Boot风格的启动项目,减轻Spring Cloud使用者的依赖管理。(在Angel.SR2之后,作为一个项目中止并与其他项目合并。)
- Spring Cloud CLI:Spring Boot CLI插件,用于在Groovy中快速创建Spring云组件应用程序。
- Spring Cloud Contract:Spring Cloud Contract是一个伞形项目,它拥有帮助用户成功实现消费者驱动的契约方法的解决方案。
- Spring Cloud Gateway:Spring Cloud Gateway 是一个基于 Project Reactor 的智能可编程路由器。
- Spring Cloud OpenFeign:Spring Cloud OpenFeign通过自动配置和绑定到Spring环境和其他Spring编程模型,为Spring Boot应用程序提供集成。
- Spring Cloud Pipelines:Spring Cloud Pipelines提供了一个固定的部署管道,其中包含确保您的应用程序可以以零停机的方式部署并轻松回滚出现问题的步骤。
- Spring Cloud Function:Spring Cloud Function通过函数促进业务逻辑的实现。它支持跨无服务器提供者的统一编程模型,以及独立运行(本地或在PaaS中)的能力。
以上是Spring Cloud官网列出来的主要的Spring Cloud项目。结合实际web应用建设过程,我使用最多的有以下项目:
- Spring Cloud OpenFeign
- Spring Cloud Netflix中的服务发现 (Eureka), 熔断(Hystrix),智能路由网关(Zuul)
- Spring Cloud Gateway
- Spring Cloud Zookeeper
- Spring Cloud Alibaba 另外还有一些,我们会用别的组件代替:
- nacos代替了Spring Cloud Zookeeper、Spring Cloud Consul,现在nacos在Spring Cloud Alibaba也有支持
- Spring Cloud Stream Applications并没有使用,而是直接与对应的消息中间件直接通过Spring Boot集成
- 使用skywalking+elk,没有使用Spring Cloud Sleuth实现链路追踪
- 使用分布式统一调度工具Xxl-Job,替代Spring Cloud Task
- 携程的Apollo和nacos是我们在使用的配置管理工具。替代Spring Cloud Config 不知道大家平时用的哪些组件多一些,以及为什么要使用他们呢?有没有用Spring Cloud全家桶的呢?