专项攻克-springcloud及其组件在一次请求中的作用
·
一、初识springcloud
springCloud是一套微服务组件, 常用的Eureka,Ribbon,Hystrix,Feign,Gateway,Config,Bus(消息总线)等等。
Spring Cloud 提供了配置管理、服务治理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选分布式会话和集群状态管理等,一系列的解决方案
二、在一个请求中,springcloud各组件的作用,各组件的常见平替中间件有哪些
请求:用户浏览器 / 客户端 → 网关 (Spring Cloud Gateway / ) → 服务发现 (Nacos/Eureka) 获取服务实例 → 负载均衡 (LoadBalancer) → Feign/RestTemplate 远程调用订单服务 → Sentinel/Resilience4j 熔断保护 → 调用库存服务;同时读取配置中心配置;SkyWalking 做全链路追踪。
面试问题:一次请求进来,SpringCloud 各个组件执行顺序?
答:
- 请求先到达 Gateway 网关,做鉴权、限流、路由;
- 网关去Nacos 注册中心查询目标服务实例;
- LoadBalancer做负载均衡,选出服务节点;
- 通过OpenFeign发起远程 http 调用;
- Sentinel做熔断降级保护,防止雪崩;
- Sleuth生成 traceId,把调用日志上报链路追踪组件;
- 服务启动的时候,会从 Nacos Config拉取远端配置。
Spring Cloud组件在单个请求中发挥着不同的作用,以下是详细介绍及常见平替中间件:
API网关(Gateway/Zuul)
- 位置:网关是请求入口,所有外部请求内部API的第一站。
- 作用:负责对请求进行路由转发、鉴权、认证、限流、黑名单、请求日志、跨域、参数过滤等操作。
- 举例:它接收客户端的请求,根据路由规则将请求转发到相应的服务。例如,当用户访问一个电商网站,网关会根据请求的URL将请求转发到商品服务、订单服务等。
- 替代:Spring Cloud Gateway是新一代的网关组件,使用Netty作为底层通信框架。Zuul是较早的网关组件。常见平替中间件有Nginx、Kong,它们在高并发场景下有更好的性能表现。
注册中心(Nacos/Zookeeper)
- 位置:所有微服务启动注册;网关、调用方查询实例列表
- 作用:1. 微服务启动,主动向注册中心注册自己 IP + 端口;2. 服务消费者,主动从注册中心拉取可用服务实例列表;3.注册中心自身而言,会定时健康检查,剔除宕机服务节点。
- 举例:当一个用户请求调用某个服务时,服务消费者会通过服务发现组件找到提供该服务的实例地址。
- 平替:Eureka已经停止维护。
动态配置中心(Spring Cloud Config / Nacos Config)
- 位置:服务启动 / 运行时拉取配置;配置热更新
- 作用:服务启动时会从配置中心获取配置信息,并且在配置发生变更时,能动态更新服务的配置。比如,当服务的数据库连接信息发生改变,配置中心可以及时将新的配置推送给服务。
- 平替中间件有Apollo、Nacos,它们提供了更丰富的配置管理功能,如配置的版本管理、灰度发布等 。
负载均衡(Spring Cloud LoadBalancer/Ribbon/Feign)
- 作用:负载均衡组件在请求时,将请求按某种规则(轮询、随机、权重)分配到服务实例上,以提高系统的可用性和性能。
- 举例:负载均衡组件会根据一定的算法(如轮询、随机等)选择商品服务的其中一个实例来处理请求。
- 平替:(1)方案1,网关层负载均衡:Gateway + Nginx/Kong(网关侧做 LB,客户端不需要),对请求进行更高级的负载均衡策略配置 。(2)方案2,K8s Service(k8s 环境直接用 Service 负载均衡,不需要 LoadBalancer)。
服务远程调用(Feign/OpenFeign/Dubbo/RestTemplate)
- 位置:微服务之间内部 http 调用
- 作用:基于接口注解,封装 HTTP 请求,简化微服务之间调用;底层封装 RestTemplate,集成 LoadBalancer 负载均衡。
- 平替组件:RestTemplate(原生 http 模板,手写 http)、 WebClient(Spring 响应式非阻塞 http 客户端)、Dubbo(RPC 调用,TCP 二进制协议,性能高于 HTTP‑Feign)
对比:Feign 是 HTTP;Dubbo 是 RPC;B2B 交易系统,对性能要求高可以 Dubbo。
熔断、降级、限流组件(Sentinel)
- 作用:
- 熔断:下游服务大量超时异常,直接熔断,不再继续调用;
- 降级:接口故障返回兜底数据;
- 流量控制:QPS 限流,热点参数限流;
- 举例:例如,当商品服务出现异常时,熔断器会切断对商品服务的请求,并返回一个默认的响应。
- 平替:(1)方案1,Gateway 限流(网关层限流,粗粒度)。(2)方案2,Hystrix已停止维护。
分布式服务链路跟踪(Sleuth + Zipkin)
- 位置:全链路,贯穿网关、各个微服务。
作用:服务跟踪组件在请求中记录请求的调用链路信息,方便开发人员进行问题排查和性能优化。它会为每个请求生成一个唯一的跟踪ID,在请求的各个服务之间传递。
举例:当一个请求经过多个服务时,服务跟踪组件可以记录每个服务的调用时间、调用顺序等信息。 - 平替:SkyWalking。
安全(Security)
- 作用:对请求进行身份验证和授权,确保只有合法的用户或服务才能访问系统资源。
- 举例:当用户请求访问一个需要登录的页面时,安全组件会验证用户的身份信息。
- 平替:常见平替中间件有OAuth 2.0、JWT(JSON Web Token),它们提供了更灵活的身份验证和授权机制 。
消息队列/消息总线(SpringCloud Stream)
- 作用:在微服务之间传递配置变更等消息。
- 举例:当全局配置发生改变时,消息总线会通知所有服务重新加载配置;比如配置中心的配置发生变更时,消息总线会将变更信息广播给所有相关的服务。
- 平替:RabbitMQ、Kafka、RocketMQ,它们可以作为消息队列实现消息的传递和处理 。
更多推荐




所有评论(0)