你应该懂的SpringCloud版本与组件

一、SpringCloud 是什么?

1、从架构演变开始讲起

    单体架构作为一个整体,相较于SOA架构、微服务架构这种拆分的架构,还有两个明显的缺点:单体架构存在着因为一个bug而拖死整个系统的风险;单体架构无法针对某一类高峰业务进行硬件扩展,只能作为整体进行扩展。

    由单体架构进化而来的垂直架构,其实就是根据业务特性将原有的单体架构项目拆分成多个项目。业务拆分的原则应该满足可以独立运行、相互间不影响。垂直架构所拆分出的项目在体量上有所缩减,不过本质上依然是单体架构,具有单体架构固有的优缺点。但是实际中会存在这样的场景,从商业角度出发,一个大型系统在投标之际就已经被规划为多个子系统,这些子系统由不同厂商中标,自然而然的形成了垂直架构的模型。

    SOA 架构同样都是对系统进行拆分,SOA在垂直架构的基础上,抽离出重叠的功能作为公共的服务,来解决重复造轮子的问题(垂直架构中部分功能重叠,比如用户管理系统管理等。同时垂直架构的信息鼓捣会越加严重,一个系统需要集成和对接多个系统)。

SOA 架构可以分为两种:

  • ESB:拆分出的系统或服务,通过ESB(Enterprise Service Bus)企业服务总线来进行规范的、统一的信息交互,解决调用混乱的问题。SOA相较于垂直架构,对于业务的拆分更为清晰,公共的组件服务职责单一,可扩展性强。不再强行打通数据库层面的壁障,让数据重新回到隔离状态,信息孤岛问题全部由接口来解决,提高了系统的安全性。ESB将原先的点对点交互模式转换为了总线式集成的交互模式,降低了系统间的耦合度,同时也降低了系统间相互集成的难度与成本。但是对于各个系统来说,能够复用轮子真的很重要么?所付出的代价是愿意承受的么?轮子的抽取,使得系统与服务之间高度耦合;通过ESB进行中转交互,性能一定会有所损耗,且所有系统间的信息都通过ESB来传递,ESB很明显的会成为整个系统内的瓶颈所在,一旦ESB宕了,所有系统都会受到牵连。本质上 ESB 是一种基于消息的中心化架构,虽然它是面向服务的!
  • RPC:远程过程调用协议。早期的 SOA 就是简单的 RPC 访问,将业务模块变成服务,使用 RPC 完成远程方法调用。

    微服务架构将单一的应用程序拆分为一组小型服务,每个服务都是围绕业务能力进行构建,能够独立开发、测试、部署,服务间采用轻量级的通讯机制。从图上我们看出,如果抛开 ESB 消息总线不谈,微服务架构和 SOA 架构是非常相似的,我们可以讲微服务看做是 SOA 的子集。但是微服务粒度更细、更有利于复用,服务间通信协议更轻量,再加上互联网环境以及配套工具链对的成熟,微服务才有了最佳实践。SOA 解决了业务重用,微服务是对已重用的服务进行进一步拆分,微服务的重点是解耦,以及解耦后的 DevOps。微服务是 SOA 的服务拆分粒度的最佳实践!

!!!微服务分布式架构尤其固有的复杂性,各个服务间需要互相通信、分布式事务、复杂的服务调用关系等等都是实践微服务的会遇到的问题。

2、SpringCloud

    SpringCloud是若干框架的集合,提供了全套的分布式解决方案,包含了:服务注册与发现、配置中心、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列等等。

    SpringCloud让程序员更专注于业务逻辑。SpringCloud 通过 Springboot风格的封装,屏蔽掉了复杂的配合和实现原理,给程序员提供了一套简单易懂,容易部署的开发工具包。

    总而言之说人话!SpringCloud并不是一个框架,而是提供了一个生态圈,在这个生态圈中有很多个服务和工具,每一个服务独立存在互不干扰,都可以单独运行,但是它们组成了微服务整体架构,也就是说整个 SpringClous架构理论上已经搭建好了,我们获取之后注入业务代码即可。

    再直白一点,这玩意不是一个你拿来就能跑的框架,他是一堆框架的集合!

    最后不要慌,看见SpringCloud的工程不要慌,全是 Springboot工程~~~SpringCloud就是一个基于SpringBoot,用来简化分布式开发的一个微服务架构开发工具!

3、SpringCloud 有什么?

  • Spring Cloud Netflix Eureka:服务注册中心。
  • Spring Cloud Zookeeper:服务注册中心。
  • Spring Cloud Consul:服务注册和配置管理中心。
  • Spring Cloud Netflix Ribbon:客户端负载均衡。
  • Spring Cloud Netflix Hystrix:服务容错保护。
  • Spring Cloud Netflix Feign:声明式服务调用。
  • Spring Cloud OpenFeign(可替代 Feign):OpenFeign 是 Spring Cloud 在 Feign 的基础上支持了 Spring MVC 的注解,如 @RequesMapping等等。OpenFeign 的 @FeignClient 可以解析 SpringMVC 的 @RequestMapping 注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。
  • Spring Cloud Netflix Zuul:API 网关服务,过滤、安全、监控、限流、路由。
  • Spring Cloud Gateway(可替代 Zuul):Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,Spring Cloud Gateway 旨在为微服务架构提供一种简单而有效的统一的 API 路由管理方式。Spring Cloud Gateway 作为 Spring Cloud 生态系中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。
  • Spring Cloud Security:安全认证。
  • Spring Cloud Config:分布式配置中心。配置管理工具,支持使用 Git 存储配置内容,支持应用配置的外部化存储,支持客户端配置信息刷新、加解密配置内容等。
  • Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与 Spring Cloud Config 联合实现热部署。
  • Spring Cloud Stream:消息驱动微服务。
  • Spring Cloud Sleuth:分布式服务跟踪。
  • Spring Cloud Alibaba Nacos:阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  • Spring Cloud Alibaba Sentinel:面向分布式服务架构的轻量级流量控制产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
  • Spring Cloud Alibaba RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  • Spring Cloud Alibaba Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架,用于实现服务通信。
  • Spring Cloud Alibaba Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  • Spring Cloud Alibaba OSS:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  • Spring Cloud Alibaba SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  • Spring Cloud Alibaba SMS:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

    以上这些组件不论是在历史项目和现在的项目中都是比较常见的 SpringCloud组件,但是人生无常,世事难料,NetFlix 旗下多款组件不是停更就是拖更,导致了 SpringCloud生态中的组件较几年前已经有了较大变化,截止目前笔者接触到的项目上最多的组合是:

  • 服务注册发现与分布式配置管理:Alibaba Nacos
  • 服务调用和负载均衡:LoadBlancer/OpenFeign
  • 分布式事务:Alibaba Seata
  • 服务熔断和降级:Alibaba Sentinel
  • 服务链路追踪:Mircrometer Tracing
  • 服务网关:GateWay
  • 消息队列、削峰填谷:RocketMQ、RabbitMQ

二、SpringBoot3 的崛起

    当我们同时使用 Springboot和 SpringCloud 的时候,大家一定要注意是由 Cloud决定你的 boot版本的,有的同学说到,我们公司 jdk8 的项目还在维护和开发,我不用太关注版本,笔者要提醒的是搞微服务如果不注意版本会死的很难看很难看的。。。。绝对不是吓唬你。

    Spring Boot 3.3 正式发布了,3.1.x 在24 年 5 月 18 日也停止维护了。当前商业版支持的也只有 2.7+了,这就意味着 2.6 及以下版本将彻底成为历史。

    当前 SpringBoot3最低要求 java17,还在紧紧拥抱 JDK8 的公司是该考虑考虑怎么办了。

三、SpringCloud的版本命名规则

     Spring Cloud 采用了英国伦敦地铁站的名称来命名,并由地铁站名称字母A-Z依次类推的形式来发布迭代版本。

    SpringCloud是一个由许多子项目组成的综合项目,各子项目有不同的发布节奏。为了管理SpringCloud与各子项目的版本依赖关系,发布了一个清单,其中包括了某个SpringCloud版本对应的子项目版本。为了避免SpringCloud版本号与子项目版本号混淆,SpringCloud版本采用了名称而非版本号的命名,这些版本的名字采用了伦敦地铁站的名字,根据字母表的顺序来对应版本时间顺序。例如Angel是第一个版本, Brixton是第二个版本。

    当SpringCloud的发布内容积累到临界点或者一个重大BUG被解决后,会发布一个"service releases"版本,简称SRX版本,比如Greenwich.SR2就是SpringCloud发布的Greenwich版本的第2个SRX版本。

    2020 年后改了命名规则,使用了全新的 “日历化” 版本命名方式。

日历式命名:
Spring Cloud 使用了 YYYY.MINOR.MICRO 的命名规则
YYYY:表示 4 位年份
MINOR:代表一个递增的数字,每年以 0 开始递增
MICRO:代表版本号后缀,就和之前使用的 .0 类似于 .RELEASE 一样,.2 类似于 .SR2。
预发布版本的后缀分隔符也从 . 变更为 -,如:2020.0.0-M1 和 2020.0.0-RC2 命名所示。
同时,Spring Cloud 将停止给快照版本添加 BUILD- 前缀,如:2020.0.0-SNAPSHOT 命名所示。

四、从官网看 Cloud版本

    从官网看 Cloud版本与 Boot版本的对应关系。

五、SpringCloud Alibaba 的版本选择

    Spring Cloud 是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务系统的构建。 Spring Cloud 提供以微服务为核心的分布式系统构建标准。

spring-cloud

    Spring Cloud 本身并不是一个开箱即用的框架,它是一套微服务规范,共有两代实现。

  • Spring Cloud Netflix 是 Spring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。
  • Spring Cloud Alibaba 是 Spring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。

1、 SpringCloud Alibaba的版本发布说明:

    2023.x 分支适配 Spring Boot 3.2,Spring Cloud 2023.x 版本及以上的 Spring Cloud Alibaba 版本按从新到旧排列如下表(最新版本用*标记):

Spring Cloud Alibaba Version

Spring Cloud Version

Spring Boot Version

2023.0.1.0*

Spring Cloud 2023.0.1

3.2.4

2023.0.0.0-RC1

Spring Cloud 2023.0.0

3.2.0

每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本如下表所示:

Spring Cloud Alibaba Version

Sentinel Version

Nacos Version

RocketMQ Version

Seata Version

2023.0.1.0

1.8.6

2.3.2

5.1.4

2.0.0

2023.0.0.0-RC1

1.8.6

2.3.0

5.1.4

2.0.0

六、关于Cloud各种组件的停更、升级、替换

2018 年前后Netflix公司宣布其核心组件HystrixRibbonZuulEureka等进入维护状态,不再进行新特性开发,只修 BUG。

这直接影响了Spring Cloud项目的发展路线,Spring 官方不得不采取了应对措施,在 2019 年的在 SpringOne 2019 大会中,Spring Cloud宣布 Spring Cloud Netflix 项目进入维护模式,并在 2020 年移除相关的Netflix OSS组件。

以下是被移除的组件:

    Spring Cloud Alibaba 是阿里巴巴结合自身丰富的微服务实践而推出的微服务开发的一站式解决方案,是 Spring Cloud 第二代实现的主要组成部分。吸收了 Spring Cloud Netflix 微服务框架的核心架构思想,并进行了高性能改进。自 Spring Cloud Netflix 进入停更维护后,Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架。

   同时 Spring Cloud Alibaba 也是国内首个进入 Spring 社区的开源项目。2018 年 7 月,Spring Cloud Alibaba 正式开源,并进入 Spring Cloud 孵化器中孵化;2019 年 7 月,Spring Cloud 官方宣布 Spring Cloud Alibaba 毕业,并将仓库迁移到 Alibaba Github OSS 下。

    读到这里大家应该对 SpringCloud有了一个宏观的认识,应该不会照着 20 年左右的博客教程照本宣科用 Eureka 入门(我没有任何诋毁 Eureka 和这种学习方法的意思,只是想让大家在闷头学习的时候也能抬头看看。),觉着使用了 Eureka 就是微服务了,希望能帮到大家:)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值