Spring Cloud 终于大改版?为什么要用日期来做版本号?

简介: Spring Cloud终于改了最近Spring Cloud把版本号从A到Z的伦敦地铁站,改为以日期命名了。

Spring Cloud终于改了

最近Spring Cloud把版本号从A到Z的伦敦地铁站,改为以日期命名了。

也就是从 Greenwich.SR6, Hoxton.SR9 这样子的风格改为 2020.0.0。广大人民终于不用为spring cloud的版本号烦恼了。Spring Cloud推广不力,固然有自身复杂的原因,版本号太复杂也是一个坑。

以日期为版本号,即所谓的Calendar Versioning,可以参考这个网站:

艿艿:Spring Data 也开始使用日期作为版本号!!!!

下面是calver网站的说明。

何时使用 CalVer

如果你和你不认识的人都严肃地使用你的项目,那么 使用一个严肃的版本。幸运的是,为那个版本决定是否使用 CalVer 比以往任何时候都要容易。

  • 你的项目是否具有较大或不断变化的范围?
  • 大型系统和框架,如 Ubuntu 和 Twisted。
  • 无定形的实用程序集,比如 Boltons。
  • 你的项目是否对时间敏感?是否有其他的外部变化 驱动项目新版本的发布?
  • 业务需求,例如 Ubuntu 对支持计划的支持。
  • 安全更新,例如 certifi 对证书更新的需求。
  • 政治变化,例如 pytz 对时区变化的处理。

如果你对这些问题中的任何一个回答是肯定的,CalVer 的语义就会使 它成为你项目的有力选择。

但上面这些理由我觉得都不够充分。

在我看来最重要的理由是:以日期为版本号,让依赖库的开发和下游业务方达成了默契。

阿里巴巴的实践

pandora是阿里巴巴内部的隔离容器。在14年时,pandora 包版本号是这样子的:

  • 2_1_0_3 , 2_1_0_4_10-LOG

后面改为pandora版本 + 日期

  • 2_2_140825, 2_2_140905

但实际上应用方并不关心pandora的版本,所以改为现在的风格:

  • 2020-04-release-fix , 2020-10-release

好处是:

  1. 按时间节点推动升级
    电商的业务都是时间为关键节点的,比如 618/双11。中间件和应用方达成了一个默契:到关键时间点,业务方使用中间件推出的稳定版本,如果出了事故那么就是中间件的锅。不升级,则是业务方自己的锅。
  2. 推动升级的阻力变小
    当业务方遇到问题时,很多时候是不业务方一看它的版本号是1年多前的,很自然它就会升级了。
  3. 依赖提供方要按时间保持更新
    维护人员本身要不断发版本证明自己的生命力。下游用户也可以根据时间选择是否要切换到其它的新技术路线上去了。

对于一些总体的依赖,比如公司内部的maven bom,都建议使用时间做日期。

比如spring 2.5.6版本,大部分开发都知道它是比较旧的依赖了,但不会有太大的动力去管。 但是如果你说,这是12年之前的代码(绝大部分开发还没毕业),那么开发人员就知道很容易会出现不兼容的问题,他自己就知道应该要升级了。

以时间为版本号,既是对用户的承诺,也是对开发者自己的鞭策。

后记

Java领域的微服务虽然不能说尘埃落定,但目前是Spring Boot一家独大。在这5年间有很多故事,我们也有很多实践。立一个flag,希望能写一系列文章记录下来。

相关文章
|
17天前
|
消息中间件 负载均衡 Java
Java一分钟之-Spring Cloud:微服务架构工具集
【6月更文挑战第8天】本文介绍了Spring Cloud的核心组件,包括Eureka(服务注册与发现)、Ribbon(客户端负载均衡)、Zuul(API网关)、Hystrix(断路器)、Spring Cloud Config(配置中心)和Spring Cloud Bus(事件总线)。文中强调了各组件的易错点,如Eureka的服务注册失败、Ribbon的配置、Zuul的路由错误、Hystrix的启用及配置、Config Server的加载失败和Bus的通讯问题,并给出了相应的代码示例和解决建议。在实际开发中,关注日志和使用调试工具是保证微服务系统稳定运行的关键。
102 6
|
16天前
|
负载均衡 Java API
Java一分钟之-Spring Cloud OpenFeign:声明式服务调用
【6月更文挑战第9天】Spring Cloud OpenFeign是声明式服务调用库,简化了微服务间调用。通过动态代理,它允许开发者用Java接口调用HTTP服务,支持服务发现、负载均衡。本文介绍了OpenFeign的基本概念,展示了如何添加依赖、开启客户端和定义服务接口。还讨论了接口调用失败、超时重试和日志配置等问题及其解决方案,并提供了自定义Feign配置的代码示例。通过学习,读者可以更好地在微服务架构中使用OpenFeign进行服务通信。
181 4
|
6天前
|
Java 开发者 Sentinel
Spring Cloud系列——使用Sentinel进行微服务保护
Spring Cloud系列——使用Sentinel进行微服务保护
23 5
|
9天前
|
Java 测试技术 持续交付
Java一分钟之-Spring Cloud Contract:契约测试
【6月更文挑战第16天】Spring Cloud Contract是微服务契约测试框架,通过DSL定义接口行为,使用WireMock生成存根进行独立开发验证。常见问题包括契约编写不清晰、未集成到CI/CD和契约版本控制混乱。例如,定义一个`GET /greeting`返回JSON响应的契约,Spring Cloud Contract会自动生成测试代码,帮助确保服务间接口一致性,提升开发效率和系统稳定性。
32 7
|
5天前
|
安全 Java 数据安全/隐私保护
在Spring Cloud中实现单点登录(Single Sign-On, SSO)
在Spring Cloud中实现单点登录(Single Sign-On, SSO)
30 2
|
5天前
|
监控 Java Sentinel
Spring Cloud微服务架构
Spring Cloud微服务架构
24 1
|
11天前
|
Java Nacos 数据格式
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
Spring Cloud Nacos 详解:服务注册与发现及配置管理平台
37 3
|
17天前
|
存储 消息中间件 Java
Java一分钟之-Spring Cloud Config:外部化配置
【6月更文挑战第8天】Spring Cloud Config提供外部化配置,通过Config Server管理和版本控制微服务配置。本文涵盖Config Server与Client的配置、常见错误、多环境配置、实时更新及使用示例。注意配置服务器URL、环境变量设置、Bus配置以及安全问题。使用Config能提升系统灵活性和可维护性,但要留意日志以确保配置正确和安全。
93 10
|
11天前
|
Java 数据库 开发者
深入解析 Spring Cloud Seata:分布式事务的全面指南
深入解析 Spring Cloud Seata:分布式事务的全面指南
30 1
|
17天前
|
安全 Java 开发者
Java一分钟之-Spring Cloud Netflix Eureka:服务注册与发现
【6月更文挑战第8天】Spring Cloud Eureka是微服务架构的关键,提供服务注册与发现功能。本文讲解Eureka工作原理、配置、常见问题及解决方案。Eureka包含Server(管理服务状态)和Client(注册服务实例并发现服务)。快速入门包括启动Eureka Server和创建Eureka Client。常见问题涉及服务注册不上、服务下线和客户端注册信息不准确,可通过检查网络、理解自我保护机制和配置元数据解决。此外,文中还提及健康检查、安全配置和集群部署等高级实践,以增强系统健壮性和扩展性。
60 8