Spring Cloud 是什么
概述
Spring Cloud 是一系列框架的集合,为开发人员提供了微服务系统架构中的一些常见模型,例如:配置管理、服务发现、断路器、路由、微代理、控制总线、一次性令牌、全局锁、Leader选举、分布式会话、集群状态路由、分布式消息等。
Spring Cloud 构建与Spring Boot之上,利用Spring Boot的便利性简化了微服务系统开发、启动和部署。使得开发者可以快速启动实现这些模型的服务和应用程序。
特性
SpringCloud 致力于为典型用例提供良好的开箱即用体验,并提供覆盖其他用例的扩展机制。
- 分布式/版本化配置-Distributed/versioned configuration
- 服务注册发现-Service registration and discovery
- 网关路由-Routing
- 服务调用-Service-to-service calls
- 负载均衡-Load balancing
- 服务熔断-Circuit Breakers
- 全局锁-Global locks
- Leader选举和集群状态-Leadership election and cluster state
- 分布式消息-Distributed messaging
项目
从Spring Cloud 官网可以看到包含的子项目众多(30个),让人望而生怯,直接劝退。但真正需要掌握的其实不多(6个),只要能满足上面所说特性即可,剩下的按需加入。下面从Spring Cloud的发展历程来聊聊,看下这些项目都是干啥的以及是什么时候加入的。
![](https://img.haomeiwen.com/i2995015/99d09b1567af6fd3.png)
Spring Cloud 发展历程
起源
说起Spring Cloud,不得不提起大名鼎鼎的Netflix。2014年,当时Netflix公司推出了一系列开源的微服务工具包(俗称Netflix OSS),其中包括 Eureka(服务注册和发现)、Hystrix(熔断器)、Zuul(网关)、Ribbon(负载均衡)、Feign(服务间调用)等工具。
Spring Cloud 创始人Spencer Gibb 和 Josh Long 在学习 Netflix OSS 工具包时,意识到可以与 Spring 框架无缝集成,从而降低开发人员在构建微服务时的技术难度和成本。于是,他们开始开发 Spring Cloud,并将 Netflix OSS 的技术和 Spring 框架相结合,提供了一套全面的微服务解决方案。
主版本列表
Spring Cloud 版本都是伦敦地铁站的名词,直到2020年才采用了新的命名方式。在SR版本发布之前,会先发布一个Release版本。
发布时间 | Spring Cloud 版本 | Spring Boot 版本 |
---|---|---|
2015年3月发布 | Angel (安吉尔) | 1.2.x |
2016年5月发布 | Brixton(布里克斯顿) | 1.3.x |
2016年9月发布 | Camden(卡梅登) | 1.4.x |
2017年4月发布 | Dalston(达斯顿) | 1.5.x |
2017年12月发布 | Edgware(艾奇韦尔) | 1.5.x |
2018年6月发布 | Finchley(芬奇利) | 2.0.x |
2019年4月发布 | Greenwich(格林威治) | 2.1.x |
2019年11月发布 | Hoxton(霍克斯顿) | 2.2.x,2.3.x (Starting with SR5) |
2020年12月发布 | 2020.0.x aka Ilford(埃福的) | 2.4.x,2.5.x (Starting with 2020.0.3) |
2021年6月发布 | 2021.0.x aka Jubilee(朱比利) | 2.6.x,2.7.x (Starting with 2021.0.3) |
2022年12月发布 | 2022.0.x aka Kiburn(基尔伯恩) | 3.0.x |
版本说明
版本 | 描述 |
---|---|
SNAPSHOT | 快照版。可以稳定使用,且仍在继续改进版本 |
PRE | Preview Edition 预览版。内部测试版,主要给开发人员和测试人员使用。 |
RC | Release Candidate 发行候选版本。基本不再加入新的功能,主要是修复bug,是最终发行正式版的前一个版本,将bug修复完就可以发行正式版本了。 |
GA | General Availability 正式发布版本。官方开始推荐广泛使用,国外有的也用GA表示Release版本。 |
SR | Service Release 修正版或更新版。在正式版本推出后又发现bug,对Bug的修复。 |
发布内容
说明:
以下列的新增项目并不是严格的只在某个版本及其以后版本中出现,也可能出现在之前版本的更新版中。只是说首次出现时在那个版本发布,因为同一时间之前的版本也在更新维护,会发布SRx版会将新的特性合并进来。
例如:Spring Cloud Function首次在2018年6月18日发布的Finchley.RELEASE中出现,但是在他之前的Edgware版本,在随后的更新版Edgware.SR4(2018年6月29)中也包含了Spring Cloud Function。
Angel (安吉尔)2015年3月发布
新增的项目:
- Spring Cloud Config
- 分布式配置,支持giv,svn存储
- Spring Cloud Netflix
- 提供对Netflix OSS的集成。
- 包含了大部分Netflix OSS 的项目:Eureka,Hystrix,Zuul,Feign,Ribbon等。
- Spring Cloud Bus
- 用于连接服务和服务实例以及分布式消息传递的事件总线。支持RabbitMQ
- Spring Cloud Security
- 在 Zuul 代理中提供对负载平衡的 OAuth2静态客户端和身份验证头中继的支持。
- Spring Cloud AWS
- 提供与Amazon Web Services集成
- Spring Cloud Connectors
- 便于各种平台上的PaaS应用程序容易连接到后端服务
- Spring Cloud Starters
- Spring Boot 风格的启动项目,简化Spring Cloud的依赖管理,已经中止了,后续和其他项目合并了
- Spring Cloud CLI
- SpringBootCLI 插件,用于在 Groovy 中快速创建 SpringCloud 组件应用程序。
- Spring Cloud Commons
- 在不同的Spring Cloud实现中使用了一组抽象和公共类。包含对服务发现,断路器,负载均衡的抽象。
Brixton(布里克斯顿)2016年5月发布
新增项目:
- Spring Cloud Zookeeper
- 基于Apache Zookeeper的服务发现和配置管理
- Spring Cloud Consul
- 基于Hashicorp Consul的服务发现和配置管理
- Spring Cloud Sleuth
- 分布式跟踪,兼容Zipkin,HTrace和基于日志的跟踪(ELK)
- Spring Cloud Cloudfoundry
- 提供和Pivotal Cloudfoundry集成。
- Spring Cloud Stream
- Spring Cloud Stream 提供了对异步消息发送和接收的抽象实现,提供统一API方式,允许开发人员底层使用不同的MQ,例如Redis,Rabbit,Kafka
- Spring Cloud Task
- 短生命周期的微服务。简单的声明,用于向 Spring Boot 应用程序添加功能性和非功能性特性。
- Spring Cloud Cluster
- 集群的领导选举、锁和公共的状态模式。为Zookeeper、Redis、Hazelcast、Consul提供抽象和实现。(已被废弃,并被Spring Integration取代)
部分项目更新:
- Spring Cloud Bus
- 从新基于Spring Cloud Stream实现
Camden(卡梅登)2016年9月发布
新增项目:
- Spring Cloud Contract
- 该项目是一个总括性项目,持有解决方案,帮助用户成功实现消费者驱动的契约方法。目前,SpringCloud 契约由 SpringCloud Contract Verifier项目组成。
Dalston(达斯顿)2017年4月发布
新增项目:
- Spring Cloud Vault Config
- SpringCloudVault 配置通过 Hashicorp Vault 为分布式系统中的外部化私密管理提供客户端支持。
部分项目更新:
- Spring Cloud Commons
- @EnableDiscoveryClient(autoRegister=false)
- 新增ServiceRegistry API,Spring Cloud Zookeeper和Spring Cloud Consul实现该API
- @LoadBalanced AsyncRestTemplate 支持
- Configuration driven DiscoveryClient
Edgware(艾奇韦尔)2017年12月发布
新增项目:
- Spring Cloud Gateway
- 这个项目提供了一个在 SpringWebFlux 之上构建 API 网关的库。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 API,并向它们提供横切关注点,例如: 安全性、监视/度量和弹性。
Finchley(芬奇利)2018年6月发布
新增项目:
- Spring Cloud OpenFeign
- Feign虽然是Netflix公司开源的,但已经移交给OpenFeign组织管理,不从属于Netflix OSS范畴。
- 原先所有的Spring Cloud Netflix Feign全部移到Spring Cloud OpenFeign。
- Spring Cloud Function
- 是基于 Spring Boot 的函数计算框架,它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。
Greenwich(格林威治)2019年4月发布
新增项目:
- Spring Cloud Gcp
- Spring Cloud Gcp 项目使得 Spring 框架成为了 Google 云平台(gCP)的一等公民。
- Spring Cloud GCP 提供了大量的库,使得从 Spring Framework 应用程序使用 Google Cloud Platform 变得更加容易。
- Spring Cloud Kubernetes
- Spring Cloud Kubernetes 提供了Spring Cloud 接口的实现,允许开发人员在 Kubernetes 上构建和运行 Spring Cloud 应用程序。
- 虽然这个项目在构建云本地应用程序时可能对您有用,但是在 Kubernetes 上部署 Spring Boot 应用程序不是必需的。你只需要一个基本的 Spring Boot 应用程序和 Kubernetes 本身就可以完成很多事情。
Hoxton(霍克斯顿)2019年11月发布
增强了kubernetes和服务网格Service Mesh的支持
2020.0.x aka Ilford(埃福的)2020年12月发布
2020.0.0是第一个使用新的版本命名方案的Spring Cloud发行版本。
重要变更:
- Spring Cloud Netflix 大部分组件被移除。archaius、hystrix、ribbon、turbine、zuul等移除,只保留了eureka。
- Spring Cloud Gcp 不再是Spring Cloud发布系列的一部分,单独维护发布。
- Spring Cloud Kubernetes
- 代码重构
- Kubernetes 客户端实现
- 配置更改监听器
- 更名spring-cloud-starter-kubernetes-xx命名为spring-cloud-starter-kubernetes-fabric8-xx
新增项目:
- Spring Cloud Circuit Breaker
- Spring Cloud 断路器,取代hystrix。提供了跨不同断路器实现的抽象。提供了一致的 API,允许开发人员选择最适合应用程序的断路器实现。
- 目前支持的断路器:Resilience4J 和 Spring Retry。
- Spring Cloud Loadbalancer
- 负载均衡,取代ribbon
2021.0.x aka Jubilee(朱比利)2021年6月发布
正常维护更新
2022.0.x aka Kiburn(基尔伯恩)2022年12月发布
重要变更:
- Spring Cloud CLI
- 该项目从发布系列中移除
- Spring Cloud Cloudfoundry
- 该项目从发布系列中移除
- Spring Cloud Commons
- AsyncRestTemplate 在 SpringFramework6中已被删除,因此 LoadBalancer 的自动配置已被删除。
- Token Relay 迁移到新的Spring Security OAuth 2。
- LoadBalancer ResponseData 现在使用 org.springframework.http. HttpStatusCode。
- 删除@EnableCircuitBreaker,因为它只被 Hystrix 在不再支持的 Spring Cloud Netflix 中使用
- 删除@SpringCloudApplication 注释。不再需要@EnableDiscover yClient 和@EnableCircuitBreaker。
- Spring Cloud Sleuth
- 该项目已经从发布系列中移除。这个项目的核心已经移动到Micrometer Tracing项目和instrumentations将被移动到 Micrometer 和所有各自的项目(不再是所有的instrumentations将在一个单一的存储库完成)
- Spring Cloud Kubernetes
- 在3.0.0-M1之前的版本中,Kubernetes 感知是使用 spring.clod.Kubernetes.able 属性实现的。此属性已被删除且不受支持。相反,我们使用 SpringBootAPI: ConditionalOnCloudPlatform。如果需要显式启用或禁用这种感知,请使用 spring.main.cloud-Platform = NONE/KUBERNETES。
- Spring Cloud OpenFeign
- LoadBalancer ResponseData 现在使用 org.springframework.http. HttpStatusCode。
- OAuth2支持已迁移到 SpringSecurityOAuth2客户端。
- spring.cloud.openfeign.metrics 属性前缀已经被更改为spring.cloud.openfeign.micrometer.
- 为了与 SpringFramework 中的更改保持一致,已经删除了对 ApacheHttpClient4的支持。ApacheHttpClient5是推荐的替代品。
- Spring Cloud OpenFeign 的属性前缀已经从 feign 更改为 Spring.clod.OpenFeign。
- Spring Cloud Netflix
- 删除了不必要的@EnableEurekaClient 注释
- 已删除不推荐的 RestTemplateDiscover yClientOptionalArgs # RestTemplateDiscover yClientOptionalArgs ()构造函数
- 切换到默认的@FeignClient 属性解析。如果您希望回到惰性属性解析(例如,对于与 Spring Cloud Contracts 集成的测试) ,请将 spring.cloud.openfeign.lazy-attributes-resolution 设置为 true。
消失的Spring Cloud Netflix
消失的原因
Spring Cloud 的兴起和Netflix OSS密不可分,从Spring Cloud 在2015年3月发布的第一个版本Angel (安吉尔)中可以看出,最核心的项目就是Spring Cloud Netflix,其中包含的Archarus、Eureka、Hystrix、Ribbon、Zuul、Feign等都是微服务系统架构经典的解决方案,而这些方案则是在2014年由Netflix公司开源的,俗称Netflix OSS。但是在2020年12月发布的2020.0.0版本中则移除了大部分Netflix OSS组件,只剩下了Eureka,这期间到底发生了什么?要想解释清楚,还是得从Netflix公司说起。
2014年Netflix公司开源了自己的微服务解决套件也就是Netflix OSS,在当时这也是微服务系统架构最成功的落地方案,被各个大厂广泛使用,但是在微服务兴起不久,也就是2018年前后Netflix公司宣布其核心组件Hystrix、Ribbon、Zuul、Eureka等进入维护状态,不再进行新特性开发,只修复bug,这直接影响了Spring Cloud项目的发展规范,使Spring官网不得不采取应对措施,在 2019 年的在 SpringOne 2019 大会中,Spring Cloud宣布 Spring Cloud Netflix 项目进入维护模式,并在 2020 年移除相关的Netflix OSS组件。
目前的最新版2022.0.x中Spring Cloud Netflix中只剩下了Eureka,但Eureka预计也会在将来被彻底移除,毕竟不在维护了。而Feign虽说是Netflix开源的,但是在Spring Cloud 2018年6月发布的Finchley(芬奇利)中可以看出原先所有Spring Cloud Netflix Feign全部移到Spring Cloud OpenFeign中,也就是不在属于Netflix OSS了,至此,大名鼎鼎的Netflix OSS差不多都落下了帷幕。
替代方案
接下来说一说替代方案,毕竟Netflix好多组件都不在维护了。从2018年之后发现的版本中也可以看出Spring Cloud做出的努力:
- 开发自己的项目替代Netflix中的相关组件。例如:
- Spring Cloud Gateway 网关,替代Zuul
- Spring Cloud Circuit Breaker 断路器,替代Hystrix
- Spring Cloud LoadBalancer 负载均衡,替代Ribbon
- 和更多云厂商集成,分担分险。例如:
-
Spring Cloud Azure-微软
- 和微软的Azure集成,使的在 Spring 应用程序中使用 Azure 服务更加容易。
-
Spring Cloud Alibaba-阿里巴巴
- 和阿里巴巴的一站式分布式解决方案集成,使的在Spring应用程序中使用阿里巴巴的中间件变得容易。
-
Spring Cloud for Amazon Web Services-亚马逊
- 和亚马逊的AmazonWeb集成,使得开发人员可以围绕宿主服务构建应用程序,而不必关心基础设施或维护。
-
Spring Cloud GCP-谷歌平台
- 和谷歌平台集成,使得在 Spring 应用程序中使用 Google Cloud Platform 变得更加容易。
-
Spring Cloud Consul-Hashicorp
- 和Hashicorp的Consul集成。通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法集成Consul。
-
Spring Cloud Zookeeper-Apache
- 和Apache的Zookeeper集成。通过自动配置和绑定到 Spring 环境和其他 Spring 编程模型习惯用法集成ZooKeeper。
-
Spring Cloud Kubernetes
- 和Kubernetes的集成,允许在 Kubernetes 上构建和运行 Spring Cloud 应用程序。
-
Spring Cloud Azure-微软
- 制定规范,提供一致API和跨不同实现的抽象,对开发人员屏蔽掉底层差异。例如:
- Spring Cloud CricuitBreaker。定义了断路器抽象。支持:Resilience4J 和 Spring Retry。
- Spring Cloud Stream。定义了异步消息通信抽象。支持Redis、Rabbit、Kafka、RocketMQ等
- Spring Cloud Commons。定义了服务注册和发现抽象。支持Nacos,Zookeeper等
- Spring Environment 定义了配置抽象。支持Nacos、Apollo、Spring Cloud Config等。
方案总览
红色背景:已经被Spring Cloud移除。
黄色背景:维护模式,不再开发
蓝色背景:Spring Cloud 抽象的编程模型,提供统一的API,实现细节交由各云厂商。
![](https://img.haomeiwen.com/i2995015/956322249873a478.jpg)
从上面表格也可以看出,Spring Cloud Netflix下线后,最好的替代品就是Spring Cloud Alibaba了。
微服务生态全景图
![](https://img.haomeiwen.com/i2995015/26e17e61226439b7.png)
上图是阿里云网站提供的全景图,供参考。
下面介绍下使用Spring Cloud Alibaba 作为微服务系统的架构时,作为一名开发人员需要学习和掌握的技能。
- 分布式配置:Nacos,Apollo目前这两种使用居多。可选:Spring Cloud Config。
- 服务注册/发现:Nacos,Spring Cloud Zookeeper。可选:Spring Cloud Consul
- 服务调用:OpenFeign和RestTemplate(HTTP协议)、Dubbo(TCP协议)
- 负载均衡:Spring Cloud Loadbalancer、Dubbo
- 服务熔断:Spring Cloud Circuit Breaker、Sentinel。
- 服务网关:Higress,Apache ShenYu
- 分布式消息:Spring Cloud Stream(提供了统一抽象)、RocketMQ
- 消息总线:Spring Cloud Bus(提供了统一抽象)、Spring Cloud Bus RocketMQ
- 链路跟踪:Micrometer Tracing
- 分布式事务:Seata
阿里云提供了自己的应用脚手架,方便开发者快速创建应用:https://start.aliyun.com
参考
起底Spring Boot/Cloud背后豪华的研发团队 ——独角兽公司Pivotal
Spring Cloud 移除了Hystrix、Zuul等Netflix组件
网友评论