本文作者:饶子昊 – Spring Cloud Alibaba Committer,阿里云智能开发工程师。
01 Spring 生态介绍
依据 JVM EcoSystem Report 2021 最新数据显示,Spring 框架的使用者占比超过统计人数的 80%,Spring MVC 达 1 /3。该数据也阐明了 Spring 生态的相干组件在 Java 生态中依然占据着相对当先的位置。
国内应用最宽泛的 Spring 生态次要有 Spring Framework、Spring Boot 和 Spring Cloud。
Framework 起源于 2002 年,凭借着提供的依赖注入、面向切面编程等能力,颠覆了传统厚重的 EJB 企业级利用框架,并逐步成为当今 Java 企业级利用开发的支流框架。尽管 Spring Framework 为 Java 开发带来了很多劣势,但在应用的过程中,人们也逐步意识到了它配置繁琐等缺点。
2014 年 Spring Boot 被 Spring 社区开源,通过一系列约定俗成的默认配置极大简化了 Spring Framework 在应用中常被诟病的配置繁琐等问题,让 Spring Framework 持续焕发活力。
2015 年 6 月,针对散布式微服务利用开发中的常见问题,Spring 社区推出了包含分布式配置注册核心、分布式音讯、限流降级等能力在内的 Spring Cloud 解决方案,对企业从单体利用向微服务转型起到了重大的推动作用。
除了上图组件,现在的 Spring 是由 Web 利用、微服务、响应式编程、云计算、函数计算、事件驱动和批处理工作七大外围畛域 22 个外围我的项目组成的宏大生态。
02 Spring Cloud Alibaba
目前在 Spring 生态中应用开源 RocketMQ 次要有两种形式:第一种是应用就是 RocketMQ Spring 提供的依赖和注解实现;另一种是基于 Spring Cloud Alibaba 提供的 Spring Cloud Stream 形式。
得益于过往十年解决淘系电商高并发、大流量业务积攒的技术教训,阿里巴巴外部积淀了一套包含限流降级、分布式注册配置核心、分布式音讯、分布式事务等在内的残缺的微服务解决方案。
2015 年 6 月,Spring Cloud 的第一个正式版本公布后,迅速成为了微服务技术圈的热点。随后一两年的倒退证实,以 Spring Cloud Netflix 为代表的基于 Spring Cloud 标准的一整套微服务解决方案,对中小企业技术倒退产生了微小影响,减速了大量中小企业从单体利用向微服务的转型节奏。
当受 Spring Cloud Netflix 我的项目的启发,思考到尽管 Spring Cloud 生态的设计理念十分好,但相干的微服务解决方案并不是非常成熟,还存在一些能力缺失,而正好阿里外部早曾经有一套残缺的解决方案。因而最早参加 Spring Cloud Alibaba 的几个共事就一拍即合,在 2018 年 7 月将阿里外部通过十多年技术打磨的一整套微服务解决方案通过 Spring Cloud Alibaba 的形式奉献给 Spring Cloud 生态。
如上图所示,通过 Spring Cloud Alibaba 配套一些阿里对外提供的差异化存储、监控等能力,很多内部用户能够十分不便、低成本地构建微服务利用。
03 Spring Cloud Alibaba 与 Spring Cloud 生态关系
上图圆圈外部色彩较深的橙色局部示意 Spring Cloud,它是在 SpringBoot 的根底上提供的一套残缺的微服务解决方案规范,由一系列相干子项目组成,包含 OpenFeign 和 RestTemplate 定义的分布式 RPC 调用能力、Spring Cloud Comments 和 Spring Cloud Config 子项目形象的对立注册配置核心能力、Spring Cloud Stream 子项目定义的分布式音讯集成规范和 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 像 Spring Cloudnetflex 还有。另外像 Zookeeper 和 Consul 都别离以 Spring Cloud Zookeeper 和 Spring Cloud Consul 的我的项目模式奉献给了 Spring Cloud 社区作为注册和配置核心解决方案的实现。
04 基于 Spring Cloud Alibaba 在 Spring 生态玩转 RocketMQ
当初的 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 相似于连接器,连贯应用程序与具体的音讯两头,从而实现利用与内部消息中间件解耦。
Bindings 由 Binder 创立,次要负责业务零碎与消息中间件通信,实现音讯的发送和接管。
Demo 演示两种形式应用 RocketMQ 的区别
上图为 RocketMQ Spring 我的项目提供的用于音讯发送的 API,由 RocketMQ SpringBoot 模块提供。通过 Spring 相干依赖在业务零碎应用 RocketMQ,除了要引入 RocketMQ Spring 相干依赖做一些配置以外,还要通过 RocketMQ Spring 我的项目提供的 API 进行音讯的发送。接管模块的逻辑相似,但不是通过 API,而是通过 RocketMQ Spring 提供注解。
Spring Cloud Alibaba 操作 RocketMQ 是基于 Spring Cloud 生态中的 Spring Cloud Stream 分布式音讯的规范来实现了 RocketMQ 的一些外围组件,如果 Spring 利用须要通过 Spring Cloud Alibaba 应用 RocketMQ,只需引入 SpringCloud Alibaba 的模块依赖,再引入 Spring Cloud Stream 的模块即可。
上图为播送音讯的生产者继续发送 100 条音讯的代码,是通过 Spring Cloud Stream 提供的 StreamBridge API 进行音讯的发送。Message 相干 API 也不依赖于与具体的消息中间件进行耦合,而是基于 Spring 相干的 Message 对象进行音讯的结构。
发送音讯的时候还须要做一些配置,次要是基于 Cloud 提供的内容去解析配置。
上图为音讯的发送者相干代码。没有 RocketMQ 相干的 API,只需 consumer 办法即可从 RocketMQ 中订阅音讯,再通过 log.info 打印后果。与具体音讯绑定在一起是通过配置文件,不在业务代码中,没有相干 API 与具体的消息中间件的紧耦合。
接下来发送音讯,查看消费者是否收到音讯。通过 RocketMQ 相干模块启动 NameServer 和 Broker,启动音讯的生产者。
上图显示 consumer1 和 consumer2 都曾经收到音讯,查看日志,显示音讯内容为 Hello RocketMQ 0 到 Hello RocketMQ 99 共 100 条音讯。
综上,Spring Cloud Alibaba 形式的特点为与具体的音讯两头没有绑定关系。业务代码的实现全副基于 Spring Cloud Stream 提供的公共 API 进行音讯的发送和接管。其长处在于,代码外面没有应用与 RocketMQ 相干的类进行音讯的接管和发送,可能很不便地在不同中间件之间进行切换。比方从 RocketMQ 切换至 Kafka,只须要把利用中的 RocketMQ 相干的依赖替换成 Kafka 的,再批改一些配置即可,无需批改业务代码。
相比于 RocketMQ Spring,Spring Cloud Stream 能让业务零碎和具体的音讯两头解耦,让零碎具备较好的可扩展性和可维护性,可能领有较久远的生命周期。
05 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 将来的建设。