Photo @heyerlein文 | 方剑
背景
2014 年,Spring Boot 1.0 发布。Spring Boot 的发布绝对是 Pivotal 历史上具有里程碑意义的事件,它让我们能够非常简便地开发 Spring 应用,屏蔽了各种配置文件和底层实现,提供 AutoConfiguration,Factory Loading Mechanism, Embedded Servlet Container,Conditional Annotation 等诸多特性。目前围绕着 Spring Boot 的生态项目已经太多了,包括 Spring Cloud,Spring Cloud Gateway,Spring Initializr,Spring Cloud Stream, Spring Cloud Data Flow。周边几乎所有的第三方开源项目都创建了 Spring Boot 对应的 Starter: Kafka Starter,RabbitMQ Starter,MyBatis Starter,Dubbo Starter。
这张图可以很好地说明 Spring Boot 发布后代码的简化:
从 JetBrains 发布的 2019 年 Java 生态报告来看,Spring Boot 已经成为了最流行的 java web 框架:
https://www.jetbrains.com/lp/devecosystem-2019/java/
2016 年,阿里全面拥抱 Spring Boot,开始进行 Spring Boot 与阿里中间件的整合。开发了 spring-boot-starter-sentinel, spring-boot-starter-diamond, spring-cloud-stream-binder-metaq 等 Starter。业务团队开始尝试引用 Spring Boot 替换原先的 Webx(Spring MVC)。
Spring Cloud 是 Pivotal 推出的基于 Spring Boot 用于开发分布式应用的一款开源项目,其内部定义了分布式开发所需的规范: 服务注册/发现,服务熔断,分布式配置,服务调用,服务路由,分布式消息,消息总线等。
这些规范阿里也有对应的实现,我们决定提供基于阿里中间件的 Spring Cloud 规范实现并开源 - Spring Cloud Alibaba。
进入 Spring Cloud 孵化器
有了这个想法之后,团队开始跟 Pivotal 进行沟通。我们在 Github 上找到了 Spring Cloud Leader - Spencer Gibb 的邮箱,介绍了阿里内部的几个项目,表示想融入到 Spring 社区里。
2017 年 12 月,Spring Cloud Alibaba 顺利进入 Spring Cloud 孵化器。
一开始这个项目的名字是 spring-cloud-alibabacloud。两个 cloud 读起来有点拗口,后来去掉了最后的那个 cloud,Github 支持 rename 功能,整个过程是无感知的。现在进入
https://github.com/spring-cloud-incubator/spring-cloud-alibabacloud
地址还会重定向到我们的仓库。
之后,Nacos,Sentinel 和 Seata 相继开源。Nacos 是阿里巴巴软负载团队开发的 Diamond 和 Vipserver 的集合,Sentinel 是阿里巴巴高可用团队的稳定性利器,Seata 是 GTS 团队开源的分布式事务解决方案。
同时我们也把阿里云的一些服务跟 Spring Cloud 体系进行了整合,比如 OSS 对象存储,SMS 短信服务,SchedulerX 分布式任务调度,让开发者可以更方便地使用阿里云服务。
版本发布
版本发布总体比较顺利。Spring 社区在版本发布这方面跟 Apache 社区相比,没有那么严格的规范。基本上都是开发 & 测试结束后,在 Slack 上预约时间,提供版本的 Release Note,Blog,然后让 Spencer 进行 Release。Release 到 Central 后,再进行验证。
Spring Cloud Alibaba 在孵化器内一共 Release 了 3 个版本。这是每次发版对应的 Blog:
https://spring.io/blog/2018/10/30/spring-cloud-for-alibaba-0-2-0-released
https://spring.io/blog/2018/12/21/spring-cloud-for-alibaba-0-2-1-released
https://spring.io/blog/2019/04/19/preview-releases-of-spring-cloud-alibaba-are-available-0-9-0-0-2-2-and-0-1-2
这里不得不提一下,因为 Spring Boot 兼容性没有做好,对不同的 Spring Cloud 版本,我们都需要 release 对应的版本(0.1.x 对应 Spring Cloud Edgware,0.2.x 对应 Spring Cloud Finchley)。
2018 年在北京参加 Spring One Tour 的时候,还特地跟 Spencer 吐槽了这块兼容性问题。
参加 Spring One Tour 的当天晚上在酒店跟 Josh Long 介绍 Spring Cloud Alibaba,之后 Josh Long 制作 Bootiful Alibaba 视频:
https://spring.io/blog/2018/12/26/spring-tips-bootiful-alibaba
2019 年 4 月在西溪园区跟 Josh Long 演示 Dubbo Spring Cloud & Spring Cloud Stream RocketMQ Binder:
Spring 社区毕业
2019 月 7 月 24 日,Spring 官方宣布 Spring Cloud Alibaba 毕业,仓库迁移至 Alibaba Github OSS 下。这意味着 Spring Cloud Alibaba 是国内首个进入 Spring 社区的开源项目。
这是 Spring Cloud Alibaba 提供的 feature:
和 Spring Cloud Alibaba 有关的技术文章:
-
Dubbo Spring Cloud 重塑微服务治理
https://mercyblitz.github.io/2019/04/26/Dubbo-Spring-Cloud-%E9%87%8D%E5%A1%91%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%B2%BB%E7%90%86/
-
Spring Cloud Alibaba基础教程
http://blog.didispace.com/spring-cloud-alibaba-1/
-
Spring Cloud Alibaba 系列教程
http://www.itmuch.com/spring-cloud-alibaba/01-nacos-install/
microservices-with-spring-cloud-alibaba
https://dzone.com/articles/microservices-with-spring-cloud-alibaba
Spring Tips: Bootiful Alibaba
-
挂牌 Spring 官方
2019 月 10 月 3 日,Spring Cloud Alibaba 正式 "挂牌" Spring 官方,成为推荐的 Spring Cloud 规范实现之一。
https://spring.io/projects/spring-cloud-alibaba
Spring Cloud Alibaba 的发展历程回顾:
谁在使用 Spring Cloud Alibaba
目前已有不少企业用户在使用 Spring Cloud Alibaba,包括爱回收、东家、Acmedcare+、生学教育、联想云、凤凰网、平安科技。我们也在社区发起了
“who is using Spring Cloud Alibaba”的issue,
可
以去这个页面了解各家企业的使用场景。
https://github.com/alibaba/spring-cloud-alibaba/issues/301
致谢
感谢 Alibaba 和 Spring 社区开源的项目:
Apache Dubbo:
https://github.com/apache/dubbo
Seata:
https://github.com/seata/seata
Sentinel:
https://github.com/alibaba/sentinel
Nacos:
https://github.com/alibaba/nacos
Apache RocketMQ:
https://github.com/apache/rocketmq
Spring Cloud:
https://spring.io
/projects/spring-cloud
Spring Boot:
https://spring.io/projects/spring-boot
感谢所有的 Spring Cloud Alibaba Contributors:
@fangjian0423, @flystar32, @mercyblitz, @pbting, @xiaolongzuo, @zhendong590, @zhaoyuguang, @xiejiashuai,@spencergibb, @Rivers-Shall, @chuntaojun, @slievrly, @liudaomanbu, @zkzlx, @pigxcloud, @ly641921791, @echooymxq, @mostcool, @liuxx001, @lichen782, @yunzheng1228, @tigerMoon, @wangxing-git, @pyhblacksky, @purgeyao, @lyuzb, @eacdy, @cdfive, @AbelSara, @jsbxyyx, @yanglbme, @xingfudeshi, @pengzai170, @george510257, @carlWangTao, @JevonYang, @HaojunRen, @yidadi, @wzlee, @sundong1982, @sczyh30, @panda-luo, @lujian0571, @lovepoem, @liaozan, @kaiguoyuanshuai, @justlive1, @hero-zhanghao, @codewaltz1994, @caojiele, @bluesword12350, @MaoJianwei, @JakeConnors376W,
@Harris2012
本文作者:
方剑,花名洛夜,GitHub ID @fangjian0423,开源爱好者,阿里巴巴高级开发工程师,阿里云产品 EDAS 开发,Spring Cloud Alibaba 开源项目负责人。
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️