Spring Cloud Alibaba 生态发展和近期规划
——饶子昊
Spring Cloud Alibaba 社区负责人
一、Spring Cloud Alibaba起源
Spring Cloud Alibaba 的诞生得益于过往数十年处理淘系电商高并发大流量业务所积累的技术经验,阿里巴巴内部沉淀了一套包括限流降级、分布式配置、注册中心、分布式消息、分布式事务等完整的微服务解决方案,比如 Sentinel、RocketMQ 等。
2015 年 6 月, Spring Cloud 第一个正式版本发布后,得益于 SpringBoot 奠定的用户群体基础,再加上 Spring Cloud 本身较为完善的解决方案能力和简单易上手的特点,迅速成为微服务技术圈热点。
随后两年的发展事实证明,以 Spring Cloud Netflix 为代表的基于 Spring Cloud 规范的一整套微服务解决方案,对中小企业的技术发展产生了巨大影响,加速了大量中小企业从单体式应用向分布式微服务转型的节奏。
受到 Spring Cloud Netflix 项目的启发,考虑到虽然 Spring Cloud 生态设计理念非常好,但相关微服务解决方案并不是十分成熟,部分能力缺失。恰逢阿里内部已经有一套相对较完整的解决方案。因此,阿里于 2018 年 7 月将内部经过十多年技术打磨的一整套微服务解决方案,通过 Spring Cloud Alibaba 的方式贡献给 Spring Cloud 生态。
如图所示,通过 Spring Cloud Alibaba 配套阿里对外提供的差异化存储和监控等方面能力,为很多外部用户提供了方便、低成本构建微服务应用的途径。
二、Spring Cloud Alibaba 与 Spring Cloud 生态关系
上图圆圈内部颜色较深的橙色部分表示 Spring Cloud ,它是在 SpringBoot 的基础上提供的一套完整的微服务解决方案标准,由一系列相关子项目组成,包括 OpenFeign 和 RestTemplate定义的分布式 RPC 调用能力、Spring Cloud Comments 和 Spring Cloud Config 子项目抽象的统一注册配置中心能力、Spring CloudStream子项目定义的分布式消息集成标准和Spring Cloud CircuitBreak 子项目定义的统一限流降级能力等。
基于微服务中的标准,Spring Cloud Alibaba 为来自阿里巴巴内部的微服务解决方案提供了具体实现,不仅给 Spring Cloud 生态带来Nacos、RocketMQ、Sentinel 等微服务解决方案的实现,还集成了一些阿里云平台服务,比如短信服务、SMS、分布式任务调度、Schedulex 等。
Spring Cloud Netflex 和 Spring Cloud Alibaba 与 Spring Cloud 的关系一样,都是基于 Spring Cloud 这一整套微服务所定义标准的具体实现。
目前 Spring Cloud 生态已经非常庞大繁荣,除了 Spring Cloud Alibaba 、Spring Cloud Netflix 以外,ZooKeeper 和 Consul 都分别以 Spring Cloud ZooKeeper 和 Spring Cloud Consul 项目的形式贡献给 Spring Cloud 社区作为其中注册和配置中心解决方案的实现,给予用户更多选择。
另外, Spring Cloud Kubernetes也是云原生时代非常有意思的子项目,它使 Spring Cloud 服务可以直接基于 Kubernetes中的服务 service 概念去调用基于Kubernetes构建的微服务。
从上图可知, Spring Cloud Alibaba 和 Spring Cloud Netflix 互为补充,在 Spring Cloud 生态完整度方面起到重要作用。
另外,此方案的组件在国内用户中的受欢迎程度已经超过Spring Cloud 官方默认提供的一些组件,比如 Nacos和 RocketMQ 已经逐渐成为国内分布式注册配置中心和分布式消息的事实标准,广泛应用于大量中小企业的生产环境中。
三、Spring Cloud Alibaba 集成 RocketMQ 之 Spring Cloud Stream
原先基于 SpringBoot 框架或 Spring 框架,也可以用 Nacos 或 RocketMQ中间件来构造微服务应用。而 Spring Cloud Alibaba 通过上述中间件来构造微服务,除了组件完整性方面的优势以外,是否还有其他优点?
RocketMQ 是阿里巴巴中间件团队在 2012 年自主研发并对外开源的第三代分布式消息引擎,其高性能、低延迟、抗堆积特性稳定支撑了历年阿里巴巴双十一万亿级数据洪峰业务。2016 年,阿里巴巴向阿帕奇软件基金会捐献了 RocketMQ 项目。次年,RocketMQ 顺利从阿帕奇软件基金会毕业。
如上图所示,一个生产环境中的 RocketMQ 系统由 Name Server 集群、 Broker 集群、生产者集群和消费者集群四个部分组成。其中 Broker 集群用于存储消息,Name Server 集群提供命名服务,帮助消息生产者将消息发送到特定Broker 集群以及从特定 Broker 集群中订阅消息。
RocketMQ 作为支撑淘系电商大促的核心中间件之一,不仅在可靠性和吞吐量方面经过实战考验,优势显著,它还提供了两种订阅模,分别是广播订阅和集群订阅,以及多种消息发送方式和多种消息类型,包括普通消息、顺序消息、定时消息、延迟消息和事务消息等,这些消息类型能够帮助业务开发人员轻松解决特定的业务诉求。
Spring Cloud Stream 作为 Spring Cloud 定义的分布式消息解决方案,主要由Message、Binder 和 Bindings 三部分组成。 Message 定义了统一的消息结构,能够将业务系统中的消息数据通过统一的消息结构传递给特定消息中间件中的Message 消息结构。Binder 是 Spring Cloud Stream 中的核心,负责与外部消息集成,比如与 RocketMQ 集成需要有 RocketMQ Binder,与 Kafka 集成需要有 Kafka Binder。Middleware表示具体的消息中间件,可以是RocketMQ 也可以是 Kafka 等。
上图中,上半部分是使用 Spring Cloud Stream 连接消息中间件的应用程序,中间的 Binder 类似于连接器,连接应用程序与具体的消息中间,从而实现应用与外部消息中间件解耦。
Bandings 由 Binder 创建,主要负责业务系统与消息中间件通信,通过消息发送者和接收者即可将消息发送到 Binder 里,然后从消息集群中订阅消息。
上图为 Spring Cloud Alibaba 基于 Spring Cloud Stream 使用 RocketMQ 的案例。
消息生产者和消费者实现消息的发送和接收代码分别如图中左边和右边所示。消息生产者循环发送 100 次消息,消费者不断从 Broker 集群中拉取消息进行消费。整个程序基于Spring Cloud Stream 中的函数式编程 API 编写,没有任何RocketMQ依赖和类,仅需在配置文件中配置RocketMQ 集群中的Name Server 和 Broker,即可实现消息的发送和接收。
通过 Spring Cloud Alibaba 基于 Spring Cloud Stream实现去使用 RocketMQ,相较于传统的基于 Spring 或 SpringBoot 框架的优势在于,它能够在代码层面实现消息中间件与业务代码解耦。如果要替换消息中间件,开发人员无需修改具体业务代码,仅需替换项目中所依赖的中间件和 Application Properties 配置文件中消息中间的集群地址,即可轻松切换到其他消息中间件。
Spring Cloud 不仅可以帮助更好地构建微服务应用,在帮助微服务应用与具体分布式中间件进行解耦的方面也发挥了重要价值。为了业务系统具有比较好的后期维护性和更长的生命周期,建议各企业用户使用 Spring Cloud Alibaba实现的中间件使用方式来构建微服务应用。
四、回顾与展望
经过三年多的发展发展,Spring Cloud一共发布了 27 个大版本, star 数目达 22.5k ,fork 数目和用户数目分别达到 7k 和 23.7k ,遥遥领先于国内外甚至 Spring Cloud 官方的子项目相关数据。
未来, Spring Cloud Alibaba 社区会从以下两个方面进一步丰富项目能力,促进社区发展。
第一,社区活动方面:
① 举办定期社区双周会,讨论 github 上过往两周的 issue 和 PR 情况。另外,周会中也会组织相关主题内容的分享,周会信息将在 Spring Cloud Alibaba 交流群中进行同步。
② 联合中科院和阿里巴巴开源办公室举办“开源之夏”和“编程之夏”等活动。活动主要针对在校生,通过暑期时间,在社区导师一对一的带领下完成某些 feature 并贡献给社区,为广大在校生接触开源社区提供渠道和更多机会。
③ 线下或线上举办 Meetup,为社区内外的同学提供更多交流机会。
第二,发展规划:Spring Cloud Alibaba过去第一阶段的工作是丰富 Spring Cloud 生态,让广大外部用户能够轻松地拥抱微服务未来。第二阶段,Spring Cloud Alibaba将继续努力,让外部用户用好微服务,构建微服务治理和业务高可用相关的能力,满足用户在微服务使用过程中的高层次诉求,包括以下三个方面:
① 全面支持 RocketMQ 5.0 和 Sentinel 2.0 等中间件,为用户带来更丰富的中间件使用体验。
② 构建 Spring Cloud 生态的微服务治理能力、微服务高可用等能力。
③ 构建 Spring Cloud 分布式任务调度等方面的能力
最后,非常欢迎对 Spring Cloud Alibaba项目感兴趣的同学加入社区,一起参与 Spring Cloud Alibaba未来的建设。