当你初次打开 Spring Cloud 官方文档,满屏的 “Spring Cloud Netflix”、“Spring Cloud Alibaba”、“Spring Cloud Gateway” 是否让你眼花缭乱?是否曾以为它们就是 Spring Cloud 的不同的框架版本?是否任意一个都能开箱即用,搭建完整的 Spring Cloud 生态系统?今天,就让我们一起深入聊聊人称 Spring Cloud “全家桶”的到底是个怎么样的一个“桶”。
一、概述
Spring Cloud 是一款基于 Spring Boot 实现的微服务框架,它源自 Spring 社区,主要由 Pivotal 和 Netflix 两大公司提供技术迭代和维护。Spring Cloud 被誉为构建分布式微服务系统的“全家桶”,但是它并非某一门单一技术,而是一系列微服务解决方案或框架的有序集合。它实际上就是将市面上成熟的、经过验证的微服务框架整合起来,并借助 Spring Boot 的思想进行再封装,巧妙地屏蔽掉其中复杂的配置和实现原理,最终为开发人员呈现了一套简单易懂、易部署且易维护的分布式系统开发工具包。
Spring Cloud 包含了 spring-cloud-config、spring-cloud-bus 等近 20 个子项目,涵盖了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等诸多领域的解决方案。需要明确的是,Spring Cloud 本身并不是一个拿来即可用的框架,而是一套微服务规范。
Spring Cloud 存在两代实现:
- Spring Cloud Netflix 是 Spring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。
- Spring Cloud Alibaba 是 Spring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。
下文中提到的 Spring Cloud 若无特别说明,特指 Spring Cloud 的第一代实现,接下来我们先来看看这两代实现里面都有哪些异同。
二、Spring Cloud 版本介绍
首先,我们来了解一下 Spring Cloud 版本设计。前面也提到,Spring Cloud 包含了许多子项目(组件),这些子项目都是独立进行内容更新和迭代的,各自都维护着自己的发布版本号。为了避免 Spring Cloud 的版本号与其子项目的版本号混淆,Spring Cloud 没有采用常见的数字版本号,而是通过以下方式定义版本信息:
{version.name} .{version.number}
Spring Cloud 版本信息具体说明如下:
- version.name:版本名,采用英国伦敦地铁站的站名来命名,并按照字母表的顺序(即从 A 到 Z)来对应 Spring Cloud 的版本发布顺序,例如第一个版本为 Angel,第二个版本为 Brixton(英国地名),然后依次是 Camden、Dalston、Edgware、Finchley、Greenwich、Hoxton 等。
- version.number:版本号,每一个版本的 Spring Cloud 在更新内容积累到一定的量级或有重大 BUG 修复时,就会发布一个“service releases”版本,简称 SRX 版本,其中 X 为一个递增的数字,例如 Hoxton.SR8 就表示 Hoxton 的第 8 个 Release 版本。
我们在使用 Spring Boot + Spring Cloud 进行微服务开发时,必须根据项目中 Spring Boot 的版本来决定 Spring Cloud 版本,否则很容易出现许多意想不到的错误。
三、Spring Cloud 常用组件
Spring Cloud Netflix Eureka
Spring Cloud 将 Eureka 与 Netflix 中的其他开源服务组件(例如 Ribbon、Feign 以及 Hystrix 等)一起整合进 Spring Cloud Netflix 模块中,整合后的组件全称为 Spring Cloud Netflix Eureka。Eureka 是 Spring Cloud 对 Netflix Eureka 的二次封装,主要承担着 Spring Cloud 的服务注册与发现功能。
Eureka 采用 CS(Client/Server,客户端/服务器)架构,它由 Eureka Server(Eureka 服务注册中心)和 Eureka Client(Eureka 客户端)两大组件构成。Eureka Server 主要用于提供服务注册功能,而 Eureka Client 通常指的是微服务系统中的各个微服务。
在微服务应用启动后,Eureka Client 会向 Eureka Server 发送心跳(默认周期为 30 秒),如果 Eureka Server 在一段时间内没有接收到 Eureka Client 的心跳,那么 Eureka Server 默认会将所有的 Eureka Client 的注册信息保护起来,而不是直接从服务注册表中移除。一旦网络恢复,这些 Eureka Client 提供的服务还可以继续被服务消费者消费,这就是所谓的**“Eureka 自我保护机制”**,默认情况下,该机制是开启的,支持配置关闭。
Eureka 的自我保护机制并非完美无缺。如果在 Eureka 自我保护机制触发期间,服务提供者提供的服务出现问题,那么服务消费者就很容易获取到已经不存在的服务进而出现调用失败的情况。此时,我们可以通过客户端的容错机制来解决此问题,而 Spring Cloud Netflix Ribbon 和 Spring Cloud Netflix Hystrix 则可以大显身手。
Spring Cloud Netflix Ribbon
Netflix Ribbon 是 Netflix 公司发布的开源组件,其核心功能是提供客户端的负载均衡算法和服务调用。Ribbon 是 Spring Cloud Netflix 模块的子模块,它是 Spring Cloud 对 Netflix Ribbon 的二次封装。借助它,我们可以将面向服务的 REST 模板(RestTemplate)请求转换为客户端负载均衡的服务调用。在 Spring Cloud 微服务之间的调用、API 网关的请求转发等诸多场景中,实际上都是通过 Spring Cloud Ribbon 来实现的,包括后续要介绍的 OpenFeign 也是基于它实现的。
常见的负载均衡方式有服务端负载均衡和客户端负载均衡两种。服务端负载均衡是在客户端和服务端之间建立一个独立的负载均衡服务器,该服务器既可以是硬件设备(例如 F5),也可以是软件(例如 Nginx),这是最为常见的负载均衡方式。而客户端负载均衡相较于服务端负载均衡而言,是一个比较小众的概念,Ribbon 正是一个基于 HTTP 和 TCP 的客户端负载均衡器。当我们将 Ribbon 和 Eureka 一起使用时,Ribbon 会从 Eureka Server(服务注册中心)中获取服务端列表,然后依据负载均衡策略将请求分摊给多个服务提供者,以此来实现负载均衡的目标。
Spring Cloud Ribbon 提供了一个 IRule 接口,该接口主要用来定义负载均衡策略,它有 7 个默认实现类,每一个实现类都代表一种负载均衡策略:
- RoundRobinRule:按照线性轮询策略,即按照一定的顺序依次选取服务实例
- RandomRule:随机选取一个服务实例。
- RetryRule:按照 RoundRobinRule(轮询)的策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试(重试时获取服务的策略还是 RoundRobinRule 中定义的策略),如果超过指定时间依然没获取到服务实例则返回 null 。
- WeightedResponseTimeRule:WeightedResponseTimeRule 是 RoundRobinRule 的一个子类,它对 RoundRobinRule 的功能进行了扩展。根据平均响应时间,来计算所有服务实例的权重,响应时间越短的服务实例权重越高,被选中的概率越大。刚启动时,如果统计信息不足,则使用线性轮询策略,等信息足够时,再切换到 WeightedResponseTimeRule
- BestAvailableRule:继承自 ClientConfigEnabledRoundRobinRule。先过滤掉故障或失效的服务实例,然后再选择并发量最小的服务实例。
- AvailabilityFilteringRule:先过滤掉故障或失效的服务实例,然后再选择并发量较小的服务实例。
- ZoneAvoidanceRule:默认的负载均衡策略,综合判断服务所在区域(zone)的性能和服务(server)的可用性,来选择服务实例。在没有区域的环境下,该策略与轮询(RandomRule)策略类似。
除了这些默认的负载均衡策略外,如果有特殊的要求,我们还可以根据自身需求定制负载均衡策略,以满足不同的业务场景。
Spring Cloud Netflix Hystrix
Spring Cloud Hystrix 是基于 Netflix 公司的开源组件 Hystrix 实现的,它拥有服务降级、服务熔断、线程隔离、请求缓存、请求合并以及实时故障监控等强大功能,从而显著提高微服务系统的弹性。
Hystrix 会实时监控微服务间调用的状况,当失败调用达到一定比例时(例如 5 秒内失败 20 次),就会启动熔断机制。其具体实现步骤如下:
- 当服务的调用出错率达到或超过 Hystrix 规定的比率(默认为 50%)后,熔断器进入熔断开启状态。
- 熔断器进入熔断开启状态后,Hystrix 会启动一个休眠时间窗,在这个时间窗内,该服务的降级逻辑会临时充当业务主逻辑,而原来的业务主逻辑则被暂时搁置。
- 当有请求再次调用该服务时,会直接调用降级逻辑快速地返回失败响应,以避免系统雪崩。
- 当休眠时间窗到期后,Hystrix 会进入半熔断状态,允许部分请求对服务原来的主业务逻辑进行调用,并监控其调用成功率。
- 如果调用成功率达到预期,则说明服务已恢复正常,Hystrix 进入熔断关闭状态,服务原来的主业务逻辑恢复;否则 Hystrix 重新进入熔断开启状态,休眠时间窗口重新计时,继续重复第 2 到第 5 步。
此外,Hystrix 还提供了**准实时的调用监控(Hystrix Dashboard)**功能。Hystrix 会持续地记录所有通过 Hystrix 发起的请求的执行信息,并以直观的统计报表形式展示给用户,包括每秒执行请求的数量、成功请求的数量和失败请求的数量等关键指标,方便开发人员及时了解系统的运行状况并进行相应的优化和调整。
Spring Cloud Netflix Feign
Netflix Feign 是 Netflix 公司发布的一种实现负载均衡和服务调用的开源组件。Spring Cloud 将其与 Netflix 中的其他开源服务组件(例如 Eureka、Ribbon 以及 Hystrix 等)一起整合进 Spring Cloud Netflix 模块中,整合后全称为 Spring Cloud Netflix Feign。Feign 对 Ribbon 进行了集成,巧妙地利用 Ribbon 维护了一份可用服务清单,并通过 Ribbon 实现了客户端的负载均衡。
借助 Feign,我们可以像调用本地方法一样来调用远程服务,而完全感觉不到这是在进行远程调用,极大地简化了开发流程。Feign 支持多种注解,例如 Feign 自带的注解以及 JAX-RS 注解等,但遗憾的是 Feign 本身并不支持 Spring MVC 注解,这无疑会给广大 Spring 用户带来不便。
2019 年 Netflix 公司宣布 Feign 组件正式进入停更维护状态,这一消息让众多开发者感到惋惜。于是,Spring 官方便推出了一个名为 OpenFeign 的组件作为 Feign 的替代方案。OpenFeign 是 Spring Cloud 对 Feign 的二次封装,它不仅继承了 Feign 的所有功能,还在 Feign 的基础上增加了对 Spring MVC 注解的支持,例如 @RequestMapping、@GetMapping 和 @PostMapping 等,完美地解决了 Spring 用户在使用 Feign 时的痛点,让 Spring 用户可以更加便捷地进行远程服务调用。
Spring Cloud Gateway
Spring Cloud Gateway 是 Spring Cloud 团队基于 Spring 5.0、Spring Boot 2.0 和 Project Reactor 等前沿技术精心打造的高性能 API 网关组件,它致力于为 API 提供一种简单而有效的发布途径,并为它们提供诸如安全性、监控/指标和弹性等横切关注点的解决方案。
与 Spring Cloud Gateway 同样起着网关作用的还有一款组件,叫 Spring Cloud Netflix Zuul。Zuul 也曾为微服务架构提供了智能路由、访问过滤等功能,但随着技术的发展,二者核心架构的差异逐渐凸显。Zuul 使用的是传统的 Servlet 阻塞模型,每个请求绑定独立线程(Tomcat Worker 线程),线程资源有限(默认 200 线程),在高并发场景下容易成为性能瓶颈。而 Gateway 则是基于 Netty + Reactor 实现,采用先进的异步非阻塞架构,单线程可处理数千连接(IO 复用),性能相对 Zuul 高出不少,在应对高并发请求时表现更为出色。
Spring Cloud Gateway 最主要的功能就是路由转发,而在定义转发规则时主要涉及了以下三个核心概念:
- Route(路由):网关最基本的模块,是请求转发的核心单元。它由一个 ID、一个目标 URI、一组断言(Predicate)和一组过滤器(Filter)组成,共同决定了请求的转发路径和处理方式。
- Predicate(断言):路由转发的判断条件,是请求匹配的关键环节。我们可以通过 Predicate 对 HTTP 请求进行多维度的匹配,例如请求方式、请求路径、请求头、参数等,如果请求与断言匹配成功,则将请求转发到相应的服务,从而实现精准的路由控制。
- Filter(过滤器):过滤器是网关功能的拓展利器,我们可以使用它对请求进行拦截和修改,还可以使用它对上文的响应进行再处理,实现诸如权限校验、日志记录、参数过滤、响应封装等多种功能,为请求和响应提供全方位的精细化控制。
总而言之,客户端发送到 Spring Cloud Gateway 的请求需要通过一定的匹配条件,才能定位到真正的服务节点。在将请求转发到服务进行处理的过程前后(pre 和 post),我们还可以对请求和响应进行一些精细化控制,从而实现灵活高效的路由转发和请求处理机制。
Spring Cloud Config
Spring Cloud Config 是 Spring Cloud 的配置管理工具,它支持使用 Git 存储配置内容,实现应用配置的外部化存储,并支持在客户端对配置进行刷新、加密、解密等操作。通过 Spring Cloud Config,我们可以将配置信息集中管理,方便地对不同环境下的应用配置进行统一维护和更新。
当配置发生变化时,微服务不需要重启,可以通过手动刷新方式拉取最新的配置的变化,大大提高了配置更新的效率。但另一个问题却也接踵而至,那就是只要配置仓库中的配置发生改变,就需要我们挨个向 Config 客户端手动发送 POST 请求,通知它们重新拉取配置,这一过程较为繁琐且容易出错。那么有没有“一次通知,处处生效”的方式呢?答案是肯定的。Spring Cloud Config 配合 Bus 就可以实现配置的动态刷新,这一组合为配置管理带来了极大的便利。
Spring Cloud Bus
Spring Cloud Bus 又被称为消息总线,它能够通过轻量级的消息代理(例如 RabbitMQ、Kafka 等)将微服务架构中的各个服务连接起来,实现广播状态更改、事件推送等功能,还可以实现微服务之间的通信功能,为微服务之间的协作提供了强大的支持。目前 Spring Cloud Bus 支持两种主流的消息代理:RabbitMQ 和 Kafka,开发者可以根据实际需求进行选择。
Spring Cloud Bus 会使用一个轻量级的消息代理来构建一个公共的消息主题 Topic(默认为“springCloudBus”),这个 Topic 中的消息会被所有服务实例监听和消费。当其中的一个服务刷新数据时,Spring Cloud Bus 会把信息保存到 Topic 中,这样监听这个 Topic 的服务就收到消息并自动消费,从而实现服务之间的实时通信和状态同步。
接着上面提到的,Spring Cloud Config 如何配合 Bus 实现自动配置刷新呢?其原理就是当 Git 仓库中的配置发生了改变,我们只需要向某一个服务(既可以是 Config 服务端,也可以是 Config 客户端)发送一个 POST 请求,Spring Cloud Bus 就可以通过消息代理通知其他服务重新拉取最新配置,以实现配置的动态刷新,大大简化了配置更新的流程,提高了系统的灵活性和可维护性。
四、Spring Cloud Alibaba 概要
2018 年 12 月 12 日,Netflix 公司宣布 Spring Cloud Netflix 系列大部分组件都进入维护模式,不再添加新特性,这一消息让众多依赖 Spring Cloud Netflix 进行微服务开发的开发者们陷入了困境。这严重地限制了 Spring Cloud 的高速发展,于是各大互联网公司和组织开始把目光转向 Spring Cloud 的第二代实现:Spring Cloud Alibaba。
Spring Cloud Alibaba 是阿里巴巴结合自身丰富的微服务实践而推出的微服务开发的一站式解决方案,是 Spring Cloud 第二代实现的主要组成部分。它吸收了 Spring Cloud Netflix 的核心架构思想,并进行了高性能改进,完美地解决了 Spring Cloud Netflix 停更后开发者们的燃眉之急。自 Spring Cloud Netflix 进入停更维护后,Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架,在微服务领域大放异彩。
Spring Cloud Alibaba 的应用场景十分广泛,主要包括以下几种:
- 大型复杂的系统,例如大型电商系统。
- 高并发系统,例如大型门户网站、商品秒杀系统。
- 需求不明确,且变更很快的系统,例如创业公司业务系统。
Spring Cloud Alibaba 包含了多种开发分布式微服务系统的必需组件,接下来让我们逐一了解一下这些强大的组件。
五、Spring Cloud Alibaba 常用组件
Nacos
Nacos 是阿里巴巴开源的一款重量级产品,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。我们可以将 Nacos 理解成服务注册中心和配置中心的组合体,它可以完美地替换 Eureka 作为服务注册中心,实现服务的注册与发现;还可以替换 Spring Cloud Config 作为配置中心,实现配置的动态刷新,为微服务架构提供了更加一体化的解决方案。
与 Eureka 类似,Nacos 也采用 CS(Client/Server,客户端/服务器)架构,它包含两大核心组件,分别是 Nacos Server 和 Nacos Client。Nacos Server 可以作为服务注册中心,帮助 Nacos Client 实现服务的注册与发现,同时也可以作为配置中心,帮助 Nacos Client 在不重启的情况下,实现配置的动态刷新。这种双重身份使得 Nacos 在微服务架构中扮演着极为重要的角色。
Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-discovery,在服务注册中心(Nacos Server)中实现服务的注册与发现,通过添加依赖 spring-cloud-starter-alibaba-nacos-config,在配置中心(Nacos Server)中实现配置的动态刷新。这种灵活的依赖方式让开发者可以根据自身项目需求,轻松地集成 Nacos 的各项功能,实现服务的高效管理和配置的灵活更新。
Sentinel
Sentinel 是由阿里巴巴中间件团队精心打造的开源项目,是一种面向分布式微服务架构的轻量级高可用流量控制组件。它主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度帮助用户保护服务的稳定性,在微服务架构中如同一位忠诚的“卫士”,时刻守护着系统的健康运行。
Sentinel 主要由以下两个部分组成:
- Sentinel 核心库:Sentinel 的核心库不依赖任何框架或库,能够运行于 Java 8 及以上的版本的运行时环境中,同时对 Spring Cloud、Dubbo 等主流微服务框架提供了无缝且良好的支持,使得开发者可以在不同的技术栈中灵活地使用 Sentinel 的强大功能。
- Sentinel 控制台(Dashboard):Sentinel 提供的一个轻量级的开源控制台,它如同一个直观的“指挥中心”,提供了机器发现与健康情况管理、监控(单机和集群)、规则管理与推送等多种功能。通过它,我们不仅可以对规则进行灵活配置和高效管理,还能实时查看规则的效果,及时发现并处理潜在的流量问题,保障系统的稳定运行。
Sentinel 的基本概念有两个,它们分别是:资源和规则。资源是 Sentinel 的关键概念,它是微服务架构中的核心元素。它可以是 Java 应用程序中的任何内容,例如由应用程序提供的服务或者是服务里的方法,甚至可以是一段代码。我们可以通过 Sentinel 提供的丰富 API 来定义一个资源,使其能够被 Sentinel 保护起来。通常情况下,我们可以使用方法名、URL 甚至是服务名来作为资源名来描述某个资源,让 Sentinel 能够精准地识别和管理这些资源。
围绕资源而设定的规则则是 Sentinel 的“行动指南”。Sentinel 支持流量控制、熔断降级、系统保护、来源访问控制和热点参数等多种规则,所有这些规则都可以动态实时调整,以适应不断变化的业务需求和流量状况。通过合理配置这些规则,开发者可以灵活地控制系统的流量入口,防止系统过载,同时在面对突发流量时能够及时采取降级措施,保障核心业务的稳定运行。
Seata
Seata 是一个分布式事务处理框架,它是由阿里巴巴和蚂蚁金服共同开源的分布式事务解决方案,犹如微服务架构中的“粘合剂”,能够在微服务架构下提供高性能且简单易用的分布式事务服务,确保在分布式环境下数据的一致性和完整性。
Seata 对分布式事务的协调和控制,主要是通过 XID 和 3 个核心组件实现的。XID 是全局事务的唯一标识,它如同事务的“身份证”,可以在服务的调用链路中传递,绑定到服务的事务上下文中,确保事务的全局唯一性和可追溯性。Seata 定义了 3 个核心组件,分别是 TC(Transaction Coordinator)、TM(Transaction Manager)、RM(Resource Manager):
- TC(Transaction Coordinator):事务协调器,它是事务的协调者(这里指的是 Seata 服务器),主要负责维护全局事务和分支事务的状态,驱动全局事务提交或回滚。它如同一个“指挥官”,掌控着整个分布式事务的进程,确保各个分支事务能够协同工作,达成一致的事务结果。
- TM(Transaction Manager):事务管理器,它是事务的发起者,负责定义全局事务的范围,并根据 TC 维护的全局事务和分支事务状态,做出开始事务、提交事务、回滚事务的决议。它就像是一个“决策者”,根据业务逻辑和事务状态,决定事务的走向,确保业务操作的正确性和完整性。
- RM(Resource Manager):资源管理器,它是资源的管理者(这里可以将其理解为各服务使用的数据库)。它负责管理分支事务上的资源,向 TC 注册分支事务,汇报分支事务状态,驱动分支事务的提交或回滚。它如同一个“资源守护者”,确保在事务过程中资源的正确操作和状态更新,保障数据的一致性。
Seata 的整体工作流程如下:
- TM 向 TC 申请开启一个全局事务,全局事务创建成功后,TC 会针对这个全局事务生成一个全局唯一的 XID,为事务的执行提供了唯一的标识。
- XID 通过服务的调用链传递到其他服务,确保在整个分布式系统中,事务的上下文能够被正确地传递和识别,使得各个服务能够协同参与到同一个事务中。
- RM 向 TC 注册一个分支事务,并将其纳入 XID 对应全局事务的管辖,这样 TC 就能够全面地了解和管理所有参与事务的分支,为事务的最终决策提供依据。
- TM 根据 TC 收集的各个分支事务的执行结果,向 TC 发起全局事务提交或回滚决议,这是事务决策的关键一步,决定了整个分布式事务的最终结果。
- TC 调度 XID 下管辖的所有分支事务完成提交或回滚操作,确保所有分支事务能够按照统一的决策执行,最终达成全局事务的一致性。
Seata 提供了 AT、TCC、SAGA 和 XA 四种事务模式,可以快速有效地对分布式事务进行控制。在这四种事务模式中,AT 模式使用最为广泛,也最为方便。由于篇幅有限,模式详解将在后续文章中进行详细展开分享,届时将深入剖析每种模式的原理、适用场景和优缺点,帮助开发者更好地理解和运用 Seata 解决分布式事务问题。
其他组件概要
- RocketMQ:Apache RocketMQ 是一款基于 Java 的高性能、高吞吐量的分布式消息和流计算平台。它在消息队列领域表现出色,能够满足微服务架构中对消息传递的高要求,为服务之间的异步通信提供了可靠的解决方案,保障了系统在高并发和大数据量场景下的稳定运行。
- Dubbo:Apache Dubbo 是一款高性能的 Java RPC 框架。它在微服务的远程调用方面有着广泛的应用,提供了高效的通信机制和灵活的服务治理功能,能够与 Spring Cloud Alibaba 无缝集成,进一步丰富了微服务架构的技术选型,满足不同开发团队的技术偏好和业务需求。
- Alibaba Cloud OSS:阿里云对象存储服务器(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储服务。它为微服务架构中的文件存储需求提供了强大的支持,无论是静态资源的存储还是用户上传的文件,OSS 都能够高效地进行管理和分发,确保数据的安全性和可用性。
- Alibaba Cloud Schedulerx:阿里中间件团队开发的一款分布式调度产品,支持周期性的任务与固定时间点触发任务。它能够满足微服务架构中对任务调度的需求,无论是定时任务还是基于事件的任务触发,Schedulerx 都能够精准地进行调度,保障业务流程的按时按需执行,为系统的自动化运维和业务逻辑的定时处理提供了有力支持,让复杂的任务调度变得简单高效。
四、两代Spring Cloud 比较
版本依赖关系
Spring Cloud、Spring Cloud Alibaba 以及 Spring Boot 之间的版本依赖关系紧密且明确,以下是部分常见版本的对应关系,开发者在进行项目搭建和升级时需严格遵循,以确保各组件之间的兼容性,避免因版本不匹配导致的诸多问题。
Spring Cloud 版本 | Spring Cloud Alibaba 版本 | Spring Boot 版本 |
---|---|---|
Spring Cloud 2020.0.1 | 2021.1 | 2.4.2 |
Spring Cloud Hoxton.SR12 | 2.2.7.RELEASE | 2.3.12.RELEASE |
Spring Cloud Hoxton.SR9 | 2.2.6.RELEASE | 2.3.2.RELEASE |
Spring Cloud Greenwich.SR6 | 2.1.4.RELEASE | 2.1.13.RELEASE |
Spring Cloud Hoxton.SR3 | 2.2.1.RELEASE | 2.2.5.RELEASE |
Spring Cloud Hoxton.RELEASE | 2.2.0.RELEASE | 2.2.X.RELEASE |
Spring Cloud Greenwich | 2.1.2.RELEASE | 2.1.X.RELEASE |
Spring Cloud Finchley | 2.0.4.RELEASE(停止维护,建议升级) | 2.0.X.RELEASE |
Spring Cloud Edgware | 1.5.1.RELEASE(停止维护,建议升级) | 1.5.X.RELEASE |
表格已按版本兼容性对应排列,标注了停止维护的版本建议升级。
组件对比
在微服务架构的演进过程中,Spring Cloud 从第一代 Netflix 实现逐渐过渡到第二代 Alibaba 实现,这一转变并非简单的技术迭代,而是基于实际业务需求和技术发展的深度优化。以下是两代 Spring Cloud 实现的组件对比情况,通过对比我们可以清晰地看到技术的演进方向和各自的优劣。
Spring Cloud 第一代实现(Netflix) | 状态 | Spring Cloud 第二代实现(Alibaba) | 优势 |
---|---|---|---|
Eureka | 2.0 孵化失败 | Nacos Discovery | 性能更好,服务感知能力更强 |
Ribbon | 停更进入维护阶段 | Spring Cloud Loadbalancer | Spring Cloud 官方原生组件,替代 Ribbon |
Hystrix | 停更进入维护阶段 | Sentinel | 提供可视化配置,学习成本低 |
Zuul | 停更进入维护阶段 | Spring Cloud Gateway | 性能为 Zuul 的 1.6 倍 |
Spring Cloud Config | 搭建复杂,约定多,无可视化界面 | Nacos Config | 搭建简单,提供可视化界面,配置管理更便捷,易于上手 |
从上述对比中我们可以看出,Spring Cloud Alibaba 在多个方面都对 Spring Cloud Netflix 进行了优化和改进,无论是从性能、易用性还是功能的丰富度上,都更加符合当下微服务架构的发展趋势。随着 Spring Cloud Netflix 的部分组件逐渐进入维护模式,Spring Cloud Alibaba 凭借其强大的技术实力和阿里巴巴丰富的业务实践积累,正逐步成为构建分布式微服务系统的主流选择。
希望本文对您深入了解 Spring Cloud 有所帮助,如果您对 Spring Cloud 的实战应用感兴趣,欢迎持续关注,后续将为您带来更多精彩的实战分享内容。最新更新会第一时间同步在我的个人公众号【程序员Null自我修养】,谢谢关注支持哦!