当前位置: 首页 > news >正文

Spring Cloud Alibaba 最新五大核心组件

文章目录

  • 一、什么是微服务?
  • 二、为什么要用微服务?(微服务的核心价值)
    • 1. 解决单体架构的核心痛点
  • 三、什么是Spring Cloud
    • Spring Cloud 组件
      • 核心定位:微服务的“基础设施”
      • 核心功能与组件(面试高频)
      • Nacos
        • 1. 服务注册
        • 2. 服务发现
        • 3. 配置中心
        • 3. 配置持久化
      • loadbalancer
        • 切换负载均衡算法
      • OpenFeign
      • Resilience4j
      • gateway
  • 三、结尾

本篇文章不以教学为主,主要围绕面试回答为主,此文章是我准备面试回答所编写的

一、什么是微服务?

微服务(Microservices)是一种架构设计风格,而非具体技术,其核心是将传统的“单体应用”拆分为多个小型、独立、自治的服务单元,每个单元聚焦解决一个特定的业务领域问题(如“用户服务”“订单服务”“支付服务”),最终通过服务间的协作完成完整业务流程。

微服务的核心特征可总结为以下5点:

  1. 单一职责:每个服务单元只负责一个明确的业务领域,符合“高内聚”原则。
  2. 独立部署:每个服务单元拥有独立的代码仓库,可以单独部署。
  3. 技术栈灵活:允许不同服务根据业务需求选择最合适的技术栈。
  4. 自治数据:每个服务可以拥有独立的数据库,避免多服务之间、使用同一个数据库造成、单一数据库压力倍增。
  5. 轻量通信:服务间通过标准化的轻量级协议通信(如HTTP)。

二、为什么要用微服务?(微服务的核心价值)

选择微服务的本质是解决单体架构在“大规模系统、复杂业务、团队协作”场景下的痛点,其价值需结合“业务发展”和“技术效率”双维度阐述,避免只谈技术优势:

1. 解决单体架构的核心痛点

痛点维度单体架构的问题微服务的解决方案
代码复杂度所有业务逻辑耦合在一个项目中,代码量庞大(如几十万行),维护难度高,新人上手慢按业务拆分为小型服务,每个服务代码量可控(如几千-几万行)
技术栈僵化整个系统只能用一套技术栈各服务独立选择技术栈,新技术可局部落地,风险可控
部署风险高修改一个小功能也需重新打包部署修改一个服务功能无需全部服务重新发布
扩展性受限无法针对高负载模块(如订单)单独扩展资源可针对高负载服务单独扩容,资源利用率更高
故障影响范围大一个模块oom导致整个单体应用崩溃,可用性低因每个服务都有独立的进程,一个服务oom不会导致整个系统崩溃

三、什么是Spring Cloud

微服务是一种架构风格,而 Spring Cloud 则是这套规则的具体技术实现,它通过整合一系列组件(如服务注册发现、配置中心、熔断降级,负载均衡,服务调用 ,API 网关,分布式链路追踪,分布式事务 ),将微服务的抽象规则落地为可直接使用的技术工具

Spring Cloud 组件

Spring Cloud 是一套基于 Spring Boot 的微服务架构开发工具集,它整合了一系列成熟的开源组件,为微服务架构中的核心问题(如服务注册发现、配置管理、负载均衡、熔断降级、API 网关等)提供了标准化的解决方案,帮助开发者快速构建和部署分布式微服务系统。

核心定位:微服务的“基础设施”

Spring Cloud 本身不重复造轮子,而是通过封装和整合业界优秀的开源技术(如 Netflix OSS 组件、Alibaba 中间件、Consul、Zookeeper 等),并基于 Spring Boot 的“约定大于配置”思想简化其使用,让开发者无需深入理解底层技术细节,就能快速搭建稳定、可靠的微服务架构。

简单说:Spring Boot 解决了“单体应用的快速开发”,而 Spring Cloud 解决了“微服务架构的协同治理”,两者结合形成了“快速开发微服务”的完整技术栈。

核心功能与组件(面试高频)

  1. 上古版本
核心场景解决的问题常用组件举例
服务注册与发现服务之间如何找到对方(类似“通讯录”)eureka
负载均衡多个服务实例如何分配请求(避免单实例过载)Ribbon
服务调用服务间如何高效通信(替代传统 HTTP 调用)OpenFeign
熔断与降级服务故障时防止连锁反应(如“雪崩效应”)Hystrix
API 网关统一入口、路由转发、认证授权、限流等Gateway
  1. 早期版本
核心场景解决的问题常用组件举例
服务注册与发现服务之间如何找到对方(类似“通讯录”)Nacos
配置中心多服务配置统一管理,动态刷新Nacos
负载均衡多个服务实例如何分配请求(避免单实例过载)Ribbon
服务调用服务间如何高效通信(替代传统 HTTP 调用)OpenFeign
熔断与降级服务故障时防止连锁反应(如“雪崩效应”)Hystrix
API 网关统一入口、路由转发、认证授权、限流等Gateway
分布式事务跨服务操作的数据一致性问题Seata
  1. 2020年起
核心场景解决的问题常用组件举例
服务注册与发现服务之间如何找到对方(类似“通讯录”)Nacos
配置中心多服务配置统一管理,动态刷新Nacos
负载均衡多个服务实例如何分配请求(避免单实例过载)loadbalancer
服务调用服务间如何高效通信(替代传统 HTTP 调用)OpenFeign
熔断与降级服务故障时防止连锁反应(如“雪崩效应”)resilience4j 或者 sentinel
API 网关统一入口、路由转发、认证授权、限流等Gateway
分布式事务跨服务操作的数据一致性问题Seata

在这里插入图片描述

根据这个请求流程图 我们能清晰的看出 微服务间的请求流是什么样子的,那么就算spring cloud的组件再怎么变化 那么这个请求流程肯定是不会变的。

Nacos

Nacos 安装教学
什么是nacos
Nacos 是阿里巴巴开源的一款 微服务基础设施工具,全称是 Dynamic Naming and Configuration Service(动态命名与配置服务)。它的核心能力是 “一站式融合”:同时提供 服务注册中心 和 配置中心 功能,还支持服务健康检查、动态路由、流量控制等扩展能力,本质是为微服务架构提供 “服务治理” 和 “配置治理” 的统一解决方案

1. 服务注册

现在我启动了 两个product-center 由于它们的服务名称都是一样的 并且都注册到了一个nacos 中并且同一个空间下以及同一个分组下 就会视为是一个product-center的集群
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
当服务启动时候服务会向注册中心注册自己的服务,包括 ip 端口 服务名 等。

spring:application:name: product-centercloud:nacos:discovery:server-addr: username: wu_xs_devpassword: wu_xs_devnamespace: devenabled: true服务会根据 设置的心跳时间向nacos 推送心跳 heart-beat-interval: 5000heart-beat-timeout: 30000
  1. 实例每5秒发送一次心跳(默认 heart-beat-interval)。
  2. 超过15秒未收到心跳 → 标记为 不健康(仍在服务列表中,但调用时可能被过滤)。默认是15秒 可以在应用程序的yml 里面指定 heart-beat-timeout 达到多少秒为不健康。
  3. 不健康状态持续超过30秒 → 实例被 下线(从服务列表中移除)。
    不健康下线时间是默认的 也可以在nacos application.properties 里面指定下线时间 nacos.naming.instance.expired.time=30000
2. 服务发现

服务启动后,从 Nacos 拉取并缓存它所依赖的服务的实例列表,当 OpenFeign 发起远程调用时从本地缓存的实例列表中获取,根据loadbalancer负载均衡算法选择一个服务发起调用

在这里插入图片描述

这里的 “所依赖的服务” 通常是指消费者通过 OpenFeign 声明的接口中指定的服务名
如@FeignClient(name = “auth”)
在这里插入图片描述
这里我写了测试接口去调用auth服务的接口。
在这里插入图片描述
现在我启动了两个auth服务,那么现在auth服务是个集群,服务启动后,从 Nacos 拉取并缓存它所依赖的服务的实例列表,当 OpenFeign 发起远程调用时从本地缓存的实例列表中获取,根据loadbalancer负载均衡算法选择一个服务发起调用

点击发送请求
在这里插入图片描述

我在控制台中输出了 手机号 现在我们可以看到在(1) 服务中执行了
在这里插入图片描述
而在这个服务中却没有执行
在这里插入图片描述

在这里插入图片描述
我再次发送请求之后这个服务就得到了请求处理
在这里插入图片描述

3. 配置中心

“配置中心本质是 微服务架构下的‘配置统一管理平台’ —— 它将原本分散在每个服务本地的配置文件(比如数据库连接、接口地址、功能开关、限流阈值等),集中存储到一个中心化的服务器上,然后通过‘统一分发、动态更新’的机制,让所有服务能实时获取和使用最新配置。
在这里插入图片描述

用户在 Nacos 控制台按“数据 ID + 分组 + 命名空间”创建配置:

  • 数据 ID:配置的唯一标识,通常格式为 服务名-环境.yml(如 user-service-dev.yml),对应微服务的配置文件名;
  • 分组(Group):用于区分同一服务的不同配置场景(如 DEFAULT_GROUP 为默认分组,PAY_GROUP 为支付相关配置分组);
  • 命名空间(Namespace):用于隔离环境(如 dev 对应开发环境,prod 对应生产环境);
  • 配置内容:填写具体的配置项(如数据库连接、开关参数),支持 YAML/Properties/JSON 等格式。
3. 配置持久化

配置mysql数据库
Nacos 安装教学

loadbalancer

LoadBalancer(负载均衡)是微服务架构中的核心流量调度工具,它的核心能力是 “流量分发与资源优化”:通过预设的调度算法(如轮询、加权轮询、哈希等),将来自客户端或上游服务的请求,均匀分配到后端多个相同功能的服务实例上,同时支持实例健康检查、故障自动剔除、流量控制等扩展能力,==本质是为微服务架构提供 “请求流量治理” ==和 “服务实例资源最大化利用” 的统一解决方案。

open feign 集成了 loadbalancer 负载均衡 用于服务之间请求的负载均衡
在这里插入图片描述
Nacos 集成了负载均衡能力,用于微服务架构中服务实例的动态筛选与分发,为服务间调用提供 “可用实例选择” 的支撑。Nacos 先筛选出 “健康可用的服务实例列表”(比如排除故障实例、按权重排序),然后 OpenFeign 从这个列表中,再用自己集成的负载均衡算法(如轮询、随机等)选择一个具体实例发起调用。
在这里插入图片描述
gateway集成loadbalancer是用于web以及外部服务需要走网关的接口调用进行请求转发的 当请求匹配到断言之后根据url获取服务列表进行负载均衡发给具体集群的服务。
在这里插入图片描述

切换负载均衡算法
  1. 轮询算法(Round Robin)

    • 实现类org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer
    • 原理:按顺序循环选择实例(实例1→实例2→实例3→实例1…),是默认策略。
  2. 随机算法(Random)

    • 实现类org.springframework.cloud.loadbalancer.core.RandomLoadBalancer
    • 原理:从实例列表中随机选择一个实例。
  3. 权重轮询算法(Weighted Round Robin)

    • 实现类:无内置,需自定义(可基于 RoundRobinLoadBalancer 扩展,结合实例权重属性实现)。
    • 原理:为实例分配权重,权重高的实例被选中的概率更高(需配合服务发现实例的元数据存储权重)。
  4. 最少连接数算法(Least Connections)

    • 实现类:无内置,需自定义(可基于 ReactorLoadBalancer 接口实现,通过监控实例连接数动态选择)。
    • 原理:优先选择当前活跃连接数最少的实例,适用于长连接场景。

默认使用的 ReactiveLoadBalancer 实现是 RoundRobinLoadBalancer。要切换到不同的实现,无论是针对选定的服务还是所有服务,都可以使用自定义负载均衡器配置机制。

例如,可以通过 @LoadBalancerClient 注解传递以下配置来切换使用 RandomLoadBalancer

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;public class CustomLoadBalancerConfiguration {@BeanReactorLoadBalancer<ServiceInstance> randomLoadBalancer(Environment environment,LoadBalancerClientFactory loadBalancerClientFactory) {String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);System.out.println("当前负载均衡服务名:" + name); // 应输出 auth-centerreturn new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class),name);}
}
import com.wxs.gateway.config.CustomLoadBalancerConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
import org.springframework.context.annotation.Configuration;@SpringBootApplication
@Configuration
@LoadBalancerClients({@LoadBalancerClient(name = "auth-center", configuration = CustomLoadBalancerConfiguration.class)
})public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);}}

注意 必须要加@Configuration注解的哈,不加的话要在randomLoadBalancer 方法上加 @Primary // 强制此 Bean 为首选,覆盖默认轮询策略

在这里插入图片描述
在这里插入图片描述

OpenFeign

OpenFeign 是 Spring Cloud 生态中的一款声明式 HTTP 客户端工具它的核心能力是 “简化服务之间调用”:通过接口声明的方式,自动封装 HTTP 请求的构建、发送、响应解析等细节,让开发者无需手动编写 HttpClient 代码(如 RestTemplate),就能像调用本地方法一样调用远程服务,本质是为微服务架构提供 “服务间通信的便捷解决方案”。

在这里插入图片描述
指定要调用的服务名(对应 Nacos 中的服务名)

@FeignClient(name = "auth-center")

若是第三方的话,填写url

@FeignClient(// name 可以随便填,只要唯一即可name = "order-service",url = "http://192.168.10.10:8080,http://192.168.10.11:8080"  // 多个地址
)

使用的时候像接口一样那么简单
在这里插入图片描述

Resilience4j

Resilience4j 是一款轻量级的开源容错框架专为 Java 应用设计核心能力是 “增强系统韧性”:通过提供熔断、限流、重试、舱壁等机制,帮助系统在面对服务故障、网络延迟、流量突增等异常情况时,避免级联失败,保持核心功能可用,本质是为微服务系统提供 “故障隔离与容错处理” 的解决方案。

resilience4j:# 1. 超时配置(按需保留,避免接口耗时过长导致误判)timelimiter:configs:default:timeout-duration: 10s  # 接口超时设为10秒(根据实际接口耗时调整)# 2. 熔断配置(核心:10秒内失败率达50%触发)circuitbreaker:configs:default:# 1. 失败率阈值:50%(达标即熔断)failureRateThreshold: 50# 2. 统计模式:按时间统计(TIME_BASED)slidingWindowType: TIME_BASED# 3. 统计时间周期:10秒(即“10秒内”的统计窗口)slidingWindowSize: 10# 4. 最小调用次数:4次(10秒内至少4次调用才计算失败率,避免样本太少误判)minimumNumberOfCalls: 4# 5. 半开状态配置:熔断后5秒进入半开,允许2次试探调用waitDurationInOpenState: 5spermittedNumberOfCallsInHalfOpenState: 2# 6. 统计为“失败”的异常(按需调整,避免业务异常误统计)recordExceptions:- java.net.SocketTimeoutException  # 网络超时- java.util.concurrent.TimeoutException  # 超时异常- org.springframework.web.client.RestClientException  # HTTP调用异常# 7. 忽略的异常(不统计为失败,如业务参数错误)# ignoreExceptions:# - com.yourproject.exception.BusinessException# 3. 实例配置(绑定具体业务,如“邮件认证接口”)instances:auth-center:  # 实例名,需与代码中@CircuitBreaker(name = "auth-center")一致baseConfig: default  # 继承上面的default配置

10秒内 调用次数大于4次之后 开始计算失败率 失败率大于百分之50后就开启服务降级 降级5秒后开始半开状态允许一些两次试探 是否调用成功 ,成功后关闭服务熔断
4次有两次失败 就是有百分之50了

熔断是 针对“依赖服务持续故障”的主动防护机制,核心是通过“状态监控与自动切换”,避免调用方被故障的依赖服务拖垮。

降级是 针对“调用失败或被熔断”的兜底机制,核心是当主逻辑无法执行时,用预设的备用逻辑返回结果,避免级联故障。

// 主方法:调用依赖服务,配置熔断和降级
@CircuitBreaker(name = "paymentService", fallbackMethod = "paymentFallback")
public String pay(Long orderId) {return paymentClient.pay(orderId); // 调用支付服务(可能失败)
}// 降级方法:当主方法失败或被熔断时执行
public String paymentFallback(Long orderId, Exception e) {// 返回备用结果,如缓存数据、默认提示return "订单" + orderId + "支付暂时繁忙,请稍后重试";
}
  1. 接口失败演示
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
2. 熔断降级演示
自己演示的时候记得把时间拉长一点
在这里插入图片描述
在这里插入图片描述
注意统计的异常 ,为了方便演示这里我就直接是- java.lang.Exception了

在这里插入图片描述

gateway

在微服务架构中,Gateway(网关) 是位于客户端与微服务集群之间的 “中间层服务”,本质是流量入口的统一管理者—— 所有客户端(Web、App、第三方服务)的请求都先经过网关,由网关完成 “路由转发、权限控制、流量管控” 等核心操作后,再将请求分发到具体的微服务。

spring:application:name: gatewaycloud:nacos:discovery:server-addr: 14.103.128.188:8848username: wu_xs_devpassword: wu_xs_devnamespace: devenabled: trueconfig:server-addr: 14.103.128.188:8848file-extension: yamlprefix: gatewayusername: wu_xs_devpassword: wu_xs_devnamespace: devgroup: DEFAULT_GROUPcontext-path: nacosrefresh-enabled: trueshared-configs: gateway.yamlenabled: truegateway:discovery:locator:enabled: truelower-case-service-id: true# 3. 自定义路由规则(比默认服务发现路由更灵活,推荐优先配置)routes:# 路由1:转发到用户服务(user-service)- id: auth-center-route  # 路由唯一ID(自定义,确保唯一)uri: lb://auth-center  # 转发目标:lb=负载均衡,user-service=微服务名(从Nacos获取)predicates:  # 路由匹配规则:请求路径以 /api/user/ 开头时触发- Path=/api/auth/**filters:  # 过滤器:处理请求(如去掉前缀、添加请求头)- StripPrefix=1  # 去掉路径前缀1级(/api/user/1 → /user/1,匹配用户服务接口)# 路由2:转发到订单服务(order-service)- id: product-center-routeuri: lb://product-centerpredicates:- Path=/api/product/**filters:- StripPrefix=1
  1. 路由转发
    路由转发就是通过断言进行实现的,当请求来的时候匹配到断言之后进行转发到具体的服务
    在这里插入图片描述

在这里插入图片描述

  1. 流量管控
    流量控制是指gateway集成了loadbalancer 负载均衡 当web app 第三方等 请求需要经过gateway 请求时 根据loadbalancer负载均衡算法选择一个服务发起调用

执行成功会在控制台输出打印
在这里插入图片描述
现在启动了两个服务
在这里插入图片描述
请求来的时候会根据loadbalancer负载均衡的策略发送集群的具体服务
在这里插入图片描述
在这里插入图片描述
3. 权限控制
Spring Cloud Gateway 的 GlobalFilter接口类 可以用来实现权限控制。GlobalFilter 是全局过滤器,会对所有经过 Gateway 的请求生效,filter方法进行实现权限控制如:请求token权限验证等

在这里插入图片描述

三、结尾

以上内容围绕微服务核心概念与 Spring Cloud 关键组件展开,从“微服务架构的设计思想”到“Nacos、OpenFeign、Resilience4j、Gateway loadbalancer 等组件的落地实践”,覆盖了面试中高频的技术原理、核心功能与实际场景应用。

微服务的价值从来不是“为了拆分而拆分”,而是通过合理的架构设计,解决单体系统在业务扩张、团队协作、资源效率上的瓶颈;而 Spring Cloud 作为成熟的微服务工具集,其组件选型与使用逻辑(如 Nacos 统一服务与配置治理、Gateway 集中流量管控、Resilience4j 保障系统韧性,openFeign 简化服务调用,loadbalancer 负载均衡),本质是为了让开发者更聚焦业务逻辑,而非重复解决分布式架构的共性问题。

在面试中,除了掌握上述技术细节,更建议结合实际项目场景阐述——比如“如何通过 Gateway 的 GlobalFilter 实现统一的 Token 校验”“Resilience4j 熔断配置如何根据接口耗时与失败率动态调整”“Nacos 命名空间与分组如何隔离多环境配置”,这些“技术+场景”的结合,才能更清晰地体现对微服务架构的理解深度。

最后,微服务架构没有“银弹”,实际落地中需平衡“拆分粒度”“治理成本”与“业务复杂度”,选择适合团队与业务的方案,才是架构设计的核心。

http://www.dtcms.com/a/461831.html

相关文章:

  • 融乐Mini1.9.3 | 支持在线播放,本地播放,内置两条线路,免费畅听全网音乐
  • 车行网站源码微信公众平台营销
  • 客户端加密 和 服务端加密:端到端安全的真正含义
  • 88-python电网可视化项目-8-1
  • 做网站要自己租服务器吗wordpress打开速度优化
  • 要看网站是多少建设一个网站需要哪些费用
  • 物联网时代下无锡漫途科技无线多参数遥测终端助力饮水安全监测
  • 公司网站建设款计什么科目wordpress jquery版本
  • 麒麟系统如何设置.sh文件的图标
  • 3D GPR切片图
  • 深圳建设网站制作公司怎样制作一个网页
  • 腾讯云手机适用于哪些人群
  • 云南技术网站建设销售编程代码入门教学
  • 【PalladiumZ2 使用专栏 5 -- 模拟电路是否可以仿真?】
  • 公司网站文化活动备案上海企业建站方案
  • AI智能体开发实战(开源版)
  • 手动添加 SSH 私钥到 ssh-agent 以解决Permission denied (publickey) 错误
  • 用网站建设费用wordpress网站后台
  • 大模型前世今生(八):大模型的预训练
  • Tiff编码解码器封装
  • Android 性能优化 — Profiler 使用指南
  • DynamoDB 到 Redshift Zero-ETL 集成:完整实施指南
  • 长沙软件公司排行-专业软件开发公司
  • 深圳网站建设电话wordpress linux 伪静态
  • 缺少需求评审会导致哪些严重后果?
  • 176.在vue3中使用OpenLayers实现上传 CSV 文件并导出为 GeoJSON
  • 时钟服务器配置
  • 中国建设教育网官方网站二级网站怎么做
  • vue3和uniapp的生命周期
  • uniapp 防止长表单数据丢失方案,缓存表单填写内容,放置卡退或误操作返回。