开发者学堂课程【2022阿里云云原生中间件开发者大会集锦:Spring Cloud Alibaba 生态发展和近期规划】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1053/detail/15296
Spring Cloud Alibaba 生态发展和近期规划
内容介绍:
一、Spring Cloud Alibaba起源
二、Spring Cloud Alibaba与Spring Cloud 生态关系
三、Spring Cloud Alibaba集成rocketMQ之Spring Cloud Stream
四、回顾与展望
本节课主要来做 Spring Cloud 的生态发展相关的主题分享。希望通过分享,让大家对 Spring Cloud Alibaba 社区目前的情况有更多了解。
一、背景介绍
第一部分 Spring Cloud Alibaba起源。得益于过往数十年处理淘系电商,高并发,大流量业务所积累的技术经验,阿里巴巴内部沉淀了一套包括限流降级,分布式配置注册中心,分布式消息,分布式事务等在内的完整的微服务解决方案。
像下图展示了这些微服务解决方案,比如nacos,sentinel和rocketMQ这些,现在应该都不陌生。
另外阿里云于2015年六月,Spring Cloud第一个正式版本安卓发布后,由于Spring和 Spring boot奠定的用户群体基础,再加上Spring Cloud本身较为完善的解决方案能力和简单易上手的特点,迅速成为为服务技术圈的热点。
随后1到2年发展的事实证明。以Spring Cloud Netflix为代表的基于Spring Cloud规范的一整套微服务解决方案,对中小企业技术发展产生了巨大影响,加速了大量中小企业从单体式应用向分布式微服务的转型节奏。当时也是受Spring Cloud Netflix这个项目的启发,考虑到Spring Cloud生态虽然设计理念非常好,但相关的微服务解决方案还并不是十分成熟,部分能力缺失。正好阿里内部其实向刚才介绍的早已经有了一套相对比较完整的解决方案,因此最早参与视频考到Spring Cloud阿里巴巴的几个同事就一拍即合,一起在2018年七月将阿里内部经过十多年技术打磨的一整套微服务解决方案,通过Spring Cloud阿里巴巴的方式,贡献给Spring Cloud的生态如图所示。
通过Spring Cloud阿里巴巴,在配套上一些阿里对外所提供的差异化存储,监控等方面的能力,对很多外部用户来说就可以非常方便低成本的构建微服务应用了。
二、Spring Cloud Alibaba与Spring Cloud 生态关系
介绍完Spring Cloud Alibaba的起源和由来,可能有的同学就会疑问,Spring Cloud Alibaba和Spring Cloud Netflix与常说的Spring consul之间究竟有什么联系和区别?
然后再第二部分将介绍Spring Cloud Alibaba与Spring Cloud生态关系来解答该问题。
1.两者关系
下侧的图,可以看到圆圈内部颜色较深的橙色部分,表示Spring Cloud的,它是在Spring Cloud boot的基础上提供了一套完整的微服务解决方案标准,其由一系列相关主项目组成,具体包括,比如说open rest time play所定义的分布式rpc所调用能力,Spring Cloud commons和Spring Cloud config子项目抽象的统一注册配置中心能力。
Spring Cloud Stream子项目定义了分布式信息集成标准和Spring Cloud Creating子项目所定义的的统一限流降级能力等等。基于这些微服务中的标准,Spring Cloud Alibaba给予了来自阿里巴巴内部的微服务解决方案的实现,不仅给Spring Cloud生态带去了包括像rocketMQ,nacos,sentinel等这些微服务解决方案实现,另外还继承了一些阿里云平台服务,比如说像短信服务sms,分布式任务调度schedulex等。Spring Cloud Netflix和Spring Cloud Alibaba跟Spring Cloud的关系是一样的,都是基于Spring Cloud这一整套微服务所定义的标准的一个具体的一个实现。
2.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服务可以直接基于国内历史中服务的servies的概念,去调用Kubernetes,构建了微服务。
通过下面这张图对比,可以看到,Spring Cloud Alibaba和Spring Cloud Netflix互为补充,在Spring Cloud生态完整度方面起到了重要的作用,另外,方案在一些组件上,在国内用户的受欢迎程度上超过了很多Spring Cloud 官方默认提供的一些组件,比如像nacos和rocketMQ已经逐渐成为国内分布式注册配置中心和分布式消息的试试标准,广泛应用在大量中小企业的生产环境中。
三、Spring Cloud Alibaba 集成 rocketMQ 之 Spring Cloud Stream
基于前面两小节相关Spring Cloud Alibaba的内容介绍,以后有的同学可能就会产生疑问,原来基于Spring boot框架或者是基Spring框架,也可以用像nacos或者是rocketMQ这些中间件来构造微服务应用。而今天所讲的Spring Cloud Alibaba,通过上述的一个中间件来构造微服务相比传统的方式,除了在组建的一个完整性方面有优势以外,还有没有其它的一个优点?
接下来,将就Spring Cloud Alibaba基于Spring Cloud Stream规范实现的rocketMQ的使用方式来解答该问题。
1.rocketMQ
首先,简单介绍一rocketMQ。现在的rocketMQ是阿里巴巴中间件团队在2012年自主研发并对外开源的第三代分布式消息引擎。其高性能,低延迟,抗堆积的特性稳定,支撑了历年阿里巴巴双11万亿级数据洪峰业务。在2016年,阿里巴巴向阿帕奇软件基金会捐献了rocketMQ 项目。次年2017年rocketMQ 顺利从阿帕奇软件基金会毕业,简单说了一下,rocketMQ 历史。
2.rocketMQ架构
来看一下rocketMQ 架构。如下图所示。一个生产环境的rocketMQ系统,有name sever 集群,broker集群,生产者集群和消费者集群四个部分组成。
Broker 集群用于存储消息。name sever 集群提供命名服务,它帮助消息生产者,将消息发送到特定的 Broker 集群和帮助消费者从特定的Broker集群当中订阅消息。
3.rocketMQ 产品特性
rocketMQ作为支撑淘系电商大促的核心中间件之一,不仅仅在可靠性和吞吐量方面经过了实战考验,优势显著。如下图所列,还提供了两种订阅模式,向广播订阅和集群订阅多种消息发送方式,以及包括普通消息,顺序消息,定时消息,延迟消息和事物消息等在内的多种消息类型。这些消息类型能够很好的帮助业务开发同学轻松的解决特定的一个业务诉求。
4. Spring Cloud Stream
简单介绍了一下rocketMQ后,来看一下Spring Cloud Stream。Spring Cloud Stream作为Spring Cloud 定义的分布式消息解决方案。其主要由message,binder和bindings三部分组成。
(1)、message
message就是定义了统一的一个消息的一个结构,它能够起到将业务系统当中的一个消息的一个数据,通过这个统一的消息结构传递给特定的一个消息中间件当中的买水机message消息结构。
(2)、binder
然后binder它是Spring Cloud Stream中的的核心。它是负责与外部消息集成,比如说假如要跟rocketMQ集成,需要有一个rocketMQ的binder,如果跟kafka集成,要有一个kafka binder,就是如左边的一个图所示,下半部分的middleware是表示的具体的一个消息中间件,它可以是rocketMQ也可以是kafka或者是sentinel等等,上半部分是使用Spring Cloud Stream连接消息中间件的应用程序。中间部分就是binder,它类似于一个连接器,连接应用程序与具体的消息文件,从而实现应用与外部的一个消息中间件的结偶。
(3)、bindings
最后一步,一个关键的内容就是bindings,它是由binder创建的,它主要是负责业务系统,能够与消息中心件的一个通信,通过它消息的一个发送者和接收者,就可以将消息发送到binder里面,然后或者是从消息集群当中去订阅消息。
5. Spring Cloud Stream示例程序
最后来看一个程序,示例程序,然后这个程序,它是Spring Cloud Alibaba基于Spring Cloud Stream使用rocketMQ的案例,然后这个例子,也是在Spring Cloud Alibaba项目当中Spring Cloud Alibaba给里面可以找到,然后感兴趣的可以再直播下来,也可以去找一下相关完整的程序,然后运行下,感受一下。这个例子中,消息生产者和消息消费者实现消息的发送和接收的代码分别如图中左边和右边所示。
它是一个非常简单的一个消息发送和接收的程序。消息生产者循环发送100次消息,消息消费者不断的从broker集群当中拉取消息进行消费,由施力代码所示,就整个程序是基于Spring Cloud Stream中的一个函数式编程的API进行编写,没有任何rocketMQ的依赖和类,仅需在配置文件,就是假如是Spring Cloud的项目的话,就在其中的application runner producer的配置软件当中,配置一下rocketMQ集群当中name sever和Broker,就是集群的一个地址,就可以实现就是消极的一个发送和接收。
讲到这里其实就回答了一开始的问题通过Spring Cloud Alibaba中,基于Spring Cloud Stream实现去使用rocketMQ,比传统的技艺Spring框架去使用Spring boot框架,去使用rocketMQ是能够在代码层面实现消息中间件与业务代码的结偶,就比如说业务通过Spring Cloud Alibaba方式去使用rocketMQ,未来由于一些,就是原因,要替换消息中间件,这个时候,就是开发同学它是不需要去修改具体的业务代码的,仅需替换一下就是项目当中所依赖的一个中间件的依赖和application runner producer配置文件配置的就是相关的,一个集群的地址,然后就可以,就是轻松的,就是切换到其它的消息中间当中去。
通过上面的就是这个例子,现在觉得大家应该就比较清楚了,这Spring Cloud不仅可以帮助更好的构建微服应用,另外在帮助微服务应用跟具体的分布式中间件进行结偶方面也发挥了重要的价值。据了解,其实现在业界还是有很多企业,它是基于使用Spring框架或者使用Spring boot的框架,使用nacos配置中心或者是rocketMQ教育中间件,就是在这里就是建议为了一个业务系统具有比较好的一个后期维护性和比较好的一个生命周期,还是建议大家使用Spring Cloud Alibaba所实现的就是中间件使用方式,去接入一个中间件去构建为服务应用。
四、回顾与展望
最后介绍一下,Spring Cloud Alibaba社区未来的一个短期发展规划。经过过去三年多接近四年的一个发展Spring Cloud Alibaba,一共发布了27个大版本。stars数目现在已经是达到了就是12.5k,fork和用户数目分别达到了7k和23.7k,这些就是github上面的一个相关的一个数据,其实,已经遥遥领先国内外,甚至Spring Cloud官方一个数据。
2.未来规划
未来Spring Cloud Alibaba社区会通过以下两种方式进一步就是丰富项目的一个能力和促进社区的一个发展。
然后,其中第一还是在社区建设方面,会把一些就是工作。然后比如第一点就是从去年下半年开始Spring Cloud Alibaba社区,已经开始定期举办了双周会,就是在每周的一个周四的晚上的八点到九点之间,然后再双周会当中,也会一起讨论,就是项目就github 上面过往两周的一个要求和pr的一些情况,另外在做会中也会组织一些像周边相关的一个主题内容的分享,然后周会信息的话一般会在Spring Cloud Alibaba交流群中进行同步。
然后,在这里感兴趣的同学可以到,就是Spring Cloud Alibaba各github项目的主页当中去找到相关的一个钉钉交流群,然后并申请加入,以便后续就是可以加入到一个社区双周会的讨论中来,另外的话,今年社区也联合中科院和阿里巴巴开源办公室,举办了开元之下和变成之下等活动,针对在校生同学就是通过暑期两到三个月的时间,在社区的导师的一对一带领下,完成这种某些事,然后最后,如果完成之后再把这些项目贡献给社区,然后这个的话也是,为广大的一个在校同学提供接触开元社区,了解开元项目提供更多的机会,最后就是受疫情影响,线下举办github,就这一两年的话是比较困难的,然后像这次大会一样,也会就是找一些时间,举办一些线上的峰会,为社区内外同学就是提供更多的一个交流机会。
然后讲完了社区建设,然后另外在社区项目的一个发展规划方面就是,如果说Spring Cloud Alibaba过去的第一阶段工作是丰富十分靠的生态,然后让广大外部用户能够轻松的拥抱微服务,未来就是在第二阶段的话,Spring Cloud Alibaba会通过自身努力,让外部的用户用好微服务,构建微服务治理和业务高可用相关能力,满足用户在微服务使用过程当中的这些诚挚的一个诉求。具体的话就是像下图中展示的,会通过全面支持rocketMQ5.0和sentinel2.0等等一些中间件给用户带来更丰富的一个中间件的使用体验,
另外的话,社区的话也会投入一定的力量构建Spring Cloud的生态的微服微服务治理能力,微服务高可用和分布式任务调度等方面的一个能力。