欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > SpringCloud常见的问题

SpringCloud常见的问题

2025/5/1 18:32:49 来源:https://blog.csdn.net/2301_78703470/article/details/146072713  浏览:    关键词:SpringCloud常见的问题

1. SpringCloud 常用组件及作用

  • Eureka:服务注册与发现组件,用于微服务的注册和状态管理。

  • Ribbon:客户端负载均衡组件,支持多种负载策略(如轮询、随机)。

  • Hystrix:服务熔断与降级,防止服务雪崩。

  • Feign/OpenFeign:声明式的 HTTP 客户端,简化服务间调用。

  • Zuul/Gateway:API 网关,提供路由、鉴权、限流等功能。

  • Config:分布式配置中心,统一管理配置。

  • Bus:消息总线,用于配置的动态刷新。

  • Sleuth/Zipkin:分布式链路追踪,监控请求链路。

2. 服务注册发现流程

  1. 服务注册:服务启动时向注册中心(如 Nacos)注册自身信息(IP、端口、服务名)。

  2. 服务发现:消费者通过注册中心拉取目标服务实例列表。

  3. 心跳检测:注册中心定期检查服务实例健康状态,剔除失效节点。

  4. 负载均衡:消费者通过负载均衡策略(如 Ribbon)选择实例发起调用。

 

3. Eureka vs Nacos 区别

特性EurekaNacos
一致性协议AP(最终一致性)AP/CP 可切换
配置中心不支持支持动态配置管理
健康检查心跳机制支持 TCP/HTTP/MySQL 等多种检查方式
扩展性较弱支持命名空间、分组、权重
易用性功能单一集成注册中心 + 配置中心

 

4. Nacos 分级存储模型

  • 服务(Service)→ 集群(Cluster)→ 实例(Instance)

  • 作用:优先调用同集群实例,减少跨网络调用延迟,提升容灾能力(如异地多活)。


5. OpenFeign 负载均衡实现

  • OpenFeign 集成 Ribbon,在客户端生成服务实例列表。

  • 调用时根据负载策略(如轮询、随机)选择实例,通过 HTTP 请求发送。

 

6. 服务雪崩与解决方案

  • 服务雪崩:因某个服务故障引发级联故障,导致系统崩溃。

  • 解决方案

    • 熔断(Hystrix/Sentinel):快速失败,避免连锁反应。

    • 降级:返回默认值或缓存数据。

    • 限流:控制并发请求量。

    • 异步通信:通过消息队列解耦服务。

 

7. Hystrix vs Sentinel

特性HystrixSentinel
实现方式线程池隔离/信号量基于滑动窗口的实时统计
规则配置代码硬编码动态配置(支持控制台)
扩展性较弱支持 SPI 扩展
流量控制仅支持熔断支持熔断、限流、系统保护

 

8. 限流常见算法

  • 计数器算法:固定时间窗口统计请求数。

  • 滑动窗口:更平滑的时间窗口统计。

  • 漏桶算法:恒定速率处理请求,缓冲突发流量。

  • 令牌桶算法:按速率生成令牌,允许突发流量。

 

9. CAP 与 BASE

  • CAP:分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者不可兼得。

  • BASE:基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventual Consistency),强调高可用而非强一致性。

 

10. 分布式事务解决方案

  • Seata AT 模式:自动补偿型,通过全局锁 + 本地事务实现。

  • TCC 模式:手动补偿(Try-Confirm-Cancel),需业务代码实现。

  • 消息队列:最终一致性,如 RocketMQ 事务消息。


11. AT 模式解决脏读/脏写

  • 写隔离:全局锁确保其他事务无法修改当前事务正在操作的数据。

  • 读隔离:默认读未提交,通过 SELECT FOR UPDATE 强制读已提交。

 

12. TCC vs AT 模式

特性TCCAT
侵入性高(需业务实现 Try/Confirm/Cancel)低(无侵入)
性能较高(无全局锁)较低(依赖全局锁)
适用场景复杂业务逻辑(如资金扣减)简单业务(如库存扣减)

 

13. RabbitMQ 消息可靠性

  • 生产者确认publisher confirm 机制确保消息到达 Broker。

  • 持久化:消息和队列持久化到磁盘。

  • 消费者确认:手动 ACK 机制,防止消息丢失。

  • 高可用:镜像队列实现数据冗余。


14. RabbitMQ 消息堆积处理

  • 增加消费者:提升消费速度(如线程池或集群)。

  • 惰性队列:消息直接写入磁盘,减少内存压力。

  • 设置 TTL:超时未消费的消息转入死信队列。

  • 流量控制:生产者限流或消费者批量拉取。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词