网易首页 > 网易号 > 正文 申请入驻

4 年 46 个版本,一文读懂 Spring Cloud 发展历史

0
分享至

作者 | 方剑

责编 | 唐小引

头图 | CSDN 下载自东方 IC

出品 | CSDN(ID:CSDNnews)

Spring Cloud 自 2016 年 1 月发布第一个 Angel.SR5 版本,到目前 2020 年 3 月发布 Hoxton.SR3 版本,已经历经了 4 年时间。这 4 年时间里,Spring Cloud 一共发布了 46 个版本,支持的组件数从 5 个增加到 21 个。Spring Cloud 在 2019 年 12 月对外宣布后续 RoadMap:

  • 下一个版本 Ilford 版本是一个大版本。这个版本基于 Spring Framework 5.3 & Spring Boot 2.4,会在 2020 Q4 左右发布;

  • Ilford 版本会删除处于维护模式的项目。目前处于维护模式的 Netflix 大部分项目都会被删除(spring-cloud-netflix Github 项目已经删除了这些维护模式的项目);

  • 简化 Spring Cloud 发布列车。后续 IaasS 厂商对应的 Spring Cloud 项目会移出 Spring Cloud 组织,各自单独维护(spring-cloud-azure 一直都是单独维护,spring-cloud-alibaba 孵化在 Spring Cloud 组织,毕业后单独维护);

  • API 重构,会带来重大的改变(Spring Cloud Hoxton 版本新增了 Spring Cloud Circuit Breaker 用于统一熔断操作的编程模型和 Spring Cloud LoadBalanacer 用于处理客户端负载均衡并代替 Netflix Ribbon)。

这个 RoadMap 可以说是对 Spring Cloud 有着非常大的变化。

什么是 Spring Cloud?

首先先澄清「Spring Cloud = Spring Cloud Netflix」这个观点是错误的。官方对 Spring Cloud 的定义是提供分布式应用开发的一套共用模式,这个模式也可以理解成一套统一的抽象编程模型,底层的实现可以进行切换,比如可以从 Netflix 切换成 Alibaba,从 Zookeeper 切换成 Consul。

这套共用的模式有哪些呢?(可能比大家想象的要多。大家平时对常用的功能比较关心,实际上 Spring Cloud 整个体系内容非常还是多的。)

  • 服务注册/发现:Service Registry/Discovery。spring-cloud-commons 模块对服务注册/发现模型进行统一;

  • 分布式配置:Configuration Management。spring-core 模块对配置有 Environment 和 PropertySource 抽象,各个配置中心可以添加各自实现的 PropertySource;

  • 服务熔断:Circuit Breaker。spring-cloud-commons 模块对熔断器模式客户端调用模型进行统一(早期有个单独的项目 spring-cloud-circuit-breaker,后来合并到 spring-cloud-commons 模块);

  • 消息总线:Message Bus。spring-cloud-bus 模块定义远程事件,用来连接分布式系统上的各个节点,bus 强依赖 spring-cloud-stream 项目。

  • 分布式消息:Distributed Messaging。spring-cloud-stream 项目对消息编程模型统一;

  • 客户端负载均衡:Client Load Balancing。早期依赖 Netflix Ribbon 项目,目前可选择 spring-cloud-loadbanacer 模块(后续 Netflix Ribbon 不再维护);

  • 服务调用:Service-to-service calls。OpenFeign 提供声明式接口的方式进行服务调用;RestTemplate 提供基于服务名方式的服务调用;

  • 网关:Gateway。早期使用 Netflix Zuul,现在推荐使用 Spring Cloud Gateway;网关总体来说并不算是一个共用的模式,只是一个实现功能的组件;

  • 链路追踪:Tracing。Spring Cloud Sleuth 对 Spring Cloud 各个客户端埋点进行链路追踪,可以跟 Zipkin 整合;

  • 连接器:Spring Cloud Connectors。Connectors 表示跟 IaaS 厂商的连接器,如果本地开发使用本地 Eureka 和 MySQL,部署到云上(Cloud Foundry)这些地址会被自动替换成云上的地址(前期是购买这些服务)。这是 Cloud Foundry 的 Spring Cloud Connectors,当然还有其他 IaaS 厂商的实现比如 IBM、AWS;

  • FaaS:Spring Cloud Function。Spring Cloud 与 Serverless 集成关键的一个项目;

  • 任务调度:Spring Cloud Task 用于任务运行,可以在本地、云端甚至 Kubernetes 上运行;

  • 数据流:Spring Cloud Data Flow 可以配合 Spring Cloud Stream 完成流处理,配合 Spring Cloud Task 完成批处理,使用 Spring Cloud Deployer 进行应用的部署。

当然还有其他没有涉及到的模块比如 Spring Cloud Contract、Spring Cloud Open Service Broker、Spring Cloud Skipper、Spring Cloud Security 大家可以自行翻看资料了解。

这些功能也是 Spring Cloud 这 4 年发展迭代起来的。最早期 Spring Cloud 在统一编程模型上只有服务注册/发现以及配置管理。后续陆续添加了 Spring Cloud Circuit Breaker 统一熔断器编程模型,Spring Cloud Stream/Bus 消息编程模型统一,Spring Cloud OpenFeign 以声明式接口进行服务调用,Spring Cloud LoadBalancer 客户端负载均衡。

Spring Cloud 现状

回顾 Spring Cloud 的发展历史,Spring Cloud 一度泛指 Spring Cloud Netflix,无论是 Spring 的母公司 Pivotal(VMWare) 对应的商业化产品 Cloud Foundry 内部的 Spring Cloud Services(Spring Cloud 商业化服务) 支持 Netflix Eureka,Netflix Hystrix,还是 Pivotal 官网 blog 上与 Netflix 相互背书,或者是 Spring Cloud 服务注册/发现模型借鉴 Netflix Eureka;可见两者关系十分紧密。

随着 Netflix 宣布 Eureka 2.0 不再开发,Hystrix、Ribbon、Archaius 不再维护,Zuul 被 Spring Cloud Gateway 代替。Spring Cloud 也宣布这些模块对应的在 spring-cloud-netflix 项目里的模块也不再维护,并且在 RoadMap 中宣布 Ilford 版本发布的时候删除这些维护模块。Netflix 在 Spring Cloud 历史中会逐渐消失。

不过不用太担心。这 4 年的发展让 Spring Cloud 规范目前的实现者也不单单只有 Netflix 这一套。目前有 Spring Cloud Alibaba、Spring Cloud Consul、Spring Cloud Zookeeper、Spring Cloud Kubernetes,甚至 Spring Cloud 官方也有对应的实现组件比如 Spring Cloud Config 集成了 Git、SVN 或 Database 提供配置服务、Spring Cloud Stream RabbitMQ/Kafka 提供消息抽象的实现者。

这是目前 Spring Cloud 各个实现的总览:

目前非常不建议大家继续使用 Spring Cloud Netflix 这套实现。因为目前 spring-cloud-netflix 项目里的维护项目已经在 Github 上已经被删除。这意味着 Spring Cloud Netflix "删库" 动作已经开始执行了。

Spring Cloud Hoxton 版本介绍

Spring Cloud Hoxton 版本在 2019 年 11 月发布,这是目前 Spring Cloud 最新的大版本。主要的特性包括:

  • 基于 Spring Boot 2.2.1.RELEASE(全局懒加载、性能、CP 构造器……);

  • 全新的熔断编程模型:Spring Cloud Circuit Breaker;

  • 新客户端负载均衡组件:Spring Cloud LoadBalancer;

  • 继续对 Reactive 支持,服务发现支持 ReactiveDiscoveryClient,全新的熔断编程模型支持 ReactiveCircuitBreaker,新客户端负载均衡使用 ReactiveLoadBalancer。

Spring Cloud Circuit Breaker 统一了熔断器编程模型,这是一段使用 Sentinel CircuitBreaker 进行保护的代码:

CircuitBreaker circuitBreaker = factory.create("sentinel");
return circuitBreaker.run(() -> {
return restTemplate.getForObject("https://httpbin.org/status/500", String.class);
}, throwable -> {
if(throwable instanceof DegradeException) {
return "degrade by sentinel";
}
return "biz/system error: " + throwable.getMessage();
});

run() 方法第一个参数是一个 Supplier,里面可以执行业务逻辑;第二个参数是一个 Function,入参类型是 Throwable,出参类型跟 Supplier 里的泛型一致,表示业务逻辑返回的结果:

public interface CircuitBreaker {
default T run(Supplier toRun) {
return run(toRun, throwable -> {
throw new NoFallbackAvailableException("No fallback available.", throwable);
});
};

T run(Supplier toRun, Function fallback)
}

下面是一个 Hystrix CircuitBreaker 进行保护的代码(两者唯一的区别是对于熔断发生后异常处理逻辑不一致):

CircuitBreaker circuitBreaker = factory.create("hystrix");
return circuitBreaker.run(() -> {
return restTemplate.getForObject("https://httpbin.org/status/500", String.class);
}, throwable -> {
if (throwable instanceof RuntimeException && throwable.getMessage().toLowerCase().contains("open")) {
return "degrade by hystrix: " + throwable.getMessage();
}
return "biz/system error: " + throwable.getMessage();
});

Netflix Ribbon 已经不再维护,新组件 Spring Cloud LoadBalancer 同样可以完成客户端负载均衡:

Spring Cloud LoadBalancer 目前还比较简单,支持的负载均衡策略有限,建议大家暂时还是使用 Ribbon,后续再观察。相信 Spring Cloud LoadBalancer 后续会越来越完善。

Spring Cloud Alibaba

与 Netflix 的“删库”不同,Spring Cloud Alibaba 是阿里中间件团队主导的一个新生项目,正处于高速迭代中。

其次,对于中国用户来说,Spring Cloud Alibaba 还有一个非常特殊的意义:它将曾经红极一时的 Dubbo,以及阿里巴巴的强力消息中间件 RocketMQ 融入 Spring Cloud 体系。还在纠结于如何让这些共存的团队,你们所面临过的各种困难与问题,马上就会迎刃而解。不用再烦恼是不是要扩展 Dubbo 的注册中心,还是自己为 RocketMQ 实现一套的 Spring Cloud Stream 的 Binder 等等问题。

再次,对于 Spring Cloud Alibaba 的上手学习成本很低。如果您已经是 Spring Cloud 的用户,那么恭喜您,在 Spring Cloud Common 的抽象和 Spring Cloud Alibaba 团队的努力下,你会非常容易、甚至不需要改变多少编码模式,就能适应它。

今年 Spring Cloud Alibaba 会继续跟 Spring Cloud 加强合作。目前 Spring Cloud Alibaba 官网在 Spring 官网已经上线,且对应的 Spring Cloud Circuit Breaker Sentinel、Spring Cloud Stream RocketMQ Binder 模块也在 Spring Cloud Circuit Breaker 和 Spring Cloud Stream 项目主页被推荐使用。

最近 Spring Cloud Alibaba 也已经在 Spring Initializr 上线:

但是,生成的工程中骨架中,只有组件坐标信息,缺少对应的使用方法和 demo 代码;于是,开发者还是需要去寻找相关使用教程,或者样例代码;如果找的不对,或者是版本不匹匹配,还需要花费不少时间去排查和解决问题;这些问题都在无形中增加用户的工作量。

我们将对软件工程的抽象层次自上而下进行切分,会得到如下的几个层级:行业、解决方案、应用、功能、组件;明显的,start.spring.io 目前只能提供组件级别的支持。再将组件这层展开,会发现这样一个生命周期:组件引入、组件配置、功能开发、线上运维。start.spring.io 也只实现了“组件引入”这一功能。

我们的目标是“让阿里云成为广大 java 开发者最好用的云”。要实现这个目标,是否可以再向前走几步,在解决“组件引入”问题的基础上,将组件的典型使用方法、样例代码、使用说明也加入到工程中呢?基于这种思考,我们上线了自己的 bootstrap 站点:start.aliyun.com。

当然,本着不重复造轮子的原则,我们不再构建一套工程生成底层框架,而是使用 Spring Initializr 来实现这部分功能。在此之上专注于增加新特性,实现服务广大开发者的目标。

在 start.aliyun.com 中,我们为广大开发者带来了如下便利特性:

  • 为每个组件提供了单独的 DemoCode 和对应的配置样例(本次已发布);

  • 工程内置说明,减少用户查找文档的困难(部分实现);

  • 开发者只需要做减法,而非加法的使用方式(部分实现);

  • 提供多组件集成的解决方案(开发中);

  • 定期跟进 start.spring.io 的更新,方便大家使用到 spring 的最新功能。

未来,我们还需要在助力开发者这条路上继续发力,不仅仅是做好组件集成的工作,还要需要继续向上支持,提供更多功能、服务、应用层级的快速构建能力。

作者简介:方剑,Spring Cloud Alibaba PMC,阿里巴巴云原生应用平台高级开发工程师,目前主要负责 Spring Cloud Alibaba 开源相关工作。平时关注分布式系统、高可用、Spring 生态等相关技术。

【End】

「AI大师课」是CSDN发起的“百万人学AI”倡议下的重要组成部分,4月份AI大师课以线上技术峰会的形式推出,来自微软、硅谷TigerGraph、北邮等产学界大咖就图计算+机器学习,语音技术、新基建+AI、AI+医疗等主题展开分享,扫描下方二维码免费报名,限时再送299元「2020AI开发者万人大会」门票一张。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
北大才女蒙曼50岁至今未婚,朱迅问她:“你最想嫁给谁?”谁承想,她脱口而出说的一个名字,却让全场观众哄堂大笑!

北大才女蒙曼50岁至今未婚,朱迅问她:“你最想嫁给谁?”谁承想,她脱口而出说的一个名字,却让全场观众哄堂大笑!

背包旅行
2026-10-17 15:51:52
34℃!浙江今日多地多云,浙北沿海有雨!20日冷空气抵达,降水大风降温来袭,局部中雨其它地区阵雨!23日台风“蔷琵”外围影响带来降水

34℃!浙江今日多地多云,浙北沿海有雨!20日冷空气抵达,降水大风降温来袭,局部中雨其它地区阵雨!23日台风“蔷琵”外围影响带来降水

台州交通广播
2026-10-19 02:55:56
A股,利好来袭!科技股,密集出手!国常会,最新部署!两部门大动作,影响一周市场的十大消息

A股,利好来袭!科技股,密集出手!国常会,最新部署!两部门大动作,影响一周市场的十大消息

证券时报
2026-10-18 18:30:06
达成了!中国库里首秀!加盟全美第1高中名校

达成了!中国库里首秀!加盟全美第1高中名校

篮球实战宝典
2026-10-18 14:47:19
入职第一天因截图社死:他偷偷留个纪念,结果全公司都“看见”了

入职第一天因截图社死:他偷偷留个纪念,结果全公司都“看见”了

大稻网络科技
2026-10-16 00:02:41
随着法国2-0、挪威3-0,U17女足世界杯最新积分榜出炉

随着法国2-0、挪威3-0,U17女足世界杯最新积分榜出炉

侧身凌空斩
2026-10-19 04:09:44
雷军松了口气,小米终于不是最惨了,因为OPPO、VIVO跌的更惨

雷军松了口气,小米终于不是最惨了,因为OPPO、VIVO跌的更惨

互联网.乱侃秀
2026-10-16 12:54:32
阿塞拜疆开始实施头巾禁令,强制维护世俗化

阿塞拜疆开始实施头巾禁令,强制维护世俗化

凤眼论
2026-10-18 13:02:16
王岚钦爆砍0分助旧主辽篮迎来开门红,山东男篮这三千万花得值吗

王岚钦爆砍0分助旧主辽篮迎来开门红,山东男篮这三千万花得值吗

姜大叔侃球
2026-10-18 21:47:05
美国富人为啥不来中国过安稳日子?其实在全球富人眼里,中国才是“最危险的”

美国富人为啥不来中国过安稳日子?其实在全球富人眼里,中国才是“最危险的”

扶苏聊历史
2026-10-10 10:37:15
美共和党议员放出狠话!若中期选举失去国会控制权,将推动和解法案

美共和党议员放出狠话!若中期选举失去国会控制权,将推动和解法案

兰妮搞笑分享
2026-10-18 14:19:06
巴西大选惊天逆转?卢拉首轮落后200万票,第二轮能翻盘吗

巴西大选惊天逆转?卢拉首轮落后200万票,第二轮能翻盘吗

揽星戈
2026-10-19 06:46:18
不能再拖了!再不着手解决台海问题,全世界真的会看我们的笑话了

不能再拖了!再不着手解决台海问题,全世界真的会看我们的笑话了

瓦伦西亚月亮
2026-10-17 19:44:57
释放的信号太强烈了!

释放的信号太强烈了!

张嘴说财经
2026-10-17 19:35:47
中信证券研究部:本轮A股调整由机构重仓股诱发 机构重仓组合跌13.6%

中信证券研究部:本轮A股调整由机构重仓股诱发 机构重仓组合跌13.6%

观点机构
2026-10-18 21:01:12
立刻停止食用这些粗粮,吃得越多,肠癌风险越高?医生告诉你真相

立刻停止食用这些粗粮,吃得越多,肠癌风险越高?医生告诉你真相

任医生聊健康
2026-10-17 15:05:12
菲佐:若欧盟向基辅拨款5271亿元,斯洛伐克和匈牙利将不会加入欧盟这一揽子计划

菲佐:若欧盟向基辅拨款5271亿元,斯洛伐克和匈牙利将不会加入欧盟这一揽子计划

阿尔卑斯瞭望
2026-10-18 17:25:03
陈奕迅官宣26场演唱会:观众须封存手机,现场不得交谈、欢呼、拍手、跟唱

陈奕迅官宣26场演唱会:观众须封存手机,现场不得交谈、欢呼、拍手、跟唱

荆头条
2026-10-18 20:14:58
满脸横肉,神情恍惚,盲人演技,还没李沁自然,胡先煦也带不动她

满脸横肉,神情恍惚,盲人演技,还没李沁自然,胡先煦也带不动她

娱说瑜悦
2026-10-17 15:37:58
随着布朗绝杀吉林!广东1分惜败,辽宁赢山东11分,浙江输11分,CBA第1轮积分榜

随着布朗绝杀吉林!广东1分惜败,辽宁赢山东11分,浙江输11分,CBA第1轮积分榜

老吴说体育
2026-10-18 23:41:41
2026-10-19 07:23:00
CSDN incentive-icons
CSDN
成就一亿技术人
27050文章数 242344关注度
往期回顾 全部

科技要闻

王江舟院士:6G到底是不是骗局 是不是收割

头条要闻

法国爆发严重暴力骚乱:百年市政厅被焚烧 马克龙发声

头条要闻

法国爆发严重暴力骚乱:百年市政厅被焚烧 马克龙发声

体育要闻

别在我的地盘夺冠!海港队史首次双杀蓉城

娱乐要闻

郭麒麟被传领证,女方戳破谣言

财经要闻

马斯克:美债问题只能靠AI和机器人解决

汽车要闻

星瑞L PLUS限时售价10.97万元起 开启智混3L时代

态度原创

健康
亲子
旅游
房产
公开课

看着很健康的人,怎么会突然猝死?

亲子要闻

我将重复播放观看

旅游要闻

把文化资源转化为发展动能

房产要闻

利好密集落地+现房好房断档,广州楼市买入窗口,正在倒计时!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版