一文读懂Spring Cloud

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的发展历程来聊聊,看下这些项目都是干啥的以及是什么时候加入的。

Spring Cloud

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 应用程序。
  • 制定规范,提供一致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,实现细节交由各云厂商。


方案总览

从上面表格也可以看出,Spring Cloud Netflix下线后,最好的替代品就是Spring Cloud Alibaba了。

微服务生态全景图

微服务生态全景图

上图是阿里云网站提供的全景图,供参考。

下面介绍下使用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组件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容