1. SpringCloud 常用组件及作用
-
Eureka:服务注册与发现组件,用于微服务的注册和状态管理。
-
Ribbon:客户端负载均衡组件,支持多种负载策略(如轮询、随机)。
-
Hystrix:服务熔断与降级,防止服务雪崩。
-
Feign/OpenFeign:声明式的 HTTP 客户端,简化服务间调用。
-
Zuul/Gateway:API 网关,提供路由、鉴权、限流等功能。
-
Config:分布式配置中心,统一管理配置。
-
Bus:消息总线,用于配置的动态刷新。
-
Sleuth/Zipkin:分布式链路追踪,监控请求链路。
2. 服务注册发现流程
-
服务注册:服务启动时向注册中心(如 Nacos)注册自身信息(IP、端口、服务名)。
-
服务发现:消费者通过注册中心拉取目标服务实例列表。
-
心跳检测:注册中心定期检查服务实例健康状态,剔除失效节点。
-
负载均衡:消费者通过负载均衡策略(如 Ribbon)选择实例发起调用。
3. Eureka vs Nacos 区别
特性 | Eureka | Nacos |
---|---|---|
一致性协议 | AP(最终一致性) | AP/CP 可切换 |
配置中心 | 不支持 | 支持动态配置管理 |
健康检查 | 心跳机制 | 支持 TCP/HTTP/MySQL 等多种检查方式 |
扩展性 | 较弱 | 支持命名空间、分组、权重 |
易用性 | 功能单一 | 集成注册中心 + 配置中心 |
4. Nacos 分级存储模型
-
服务(Service)→ 集群(Cluster)→ 实例(Instance)。
-
作用:优先调用同集群实例,减少跨网络调用延迟,提升容灾能力(如异地多活)。
5. OpenFeign 负载均衡实现
-
OpenFeign 集成 Ribbon,在客户端生成服务实例列表。
-
调用时根据负载策略(如轮询、随机)选择实例,通过 HTTP 请求发送。
6. 服务雪崩与解决方案
-
服务雪崩:因某个服务故障引发级联故障,导致系统崩溃。
-
解决方案:
-
熔断(Hystrix/Sentinel):快速失败,避免连锁反应。
-
降级:返回默认值或缓存数据。
-
限流:控制并发请求量。
-
异步通信:通过消息队列解耦服务。
-
7. Hystrix vs Sentinel
特性 | Hystrix | Sentinel |
---|---|---|
实现方式 | 线程池隔离/信号量 | 基于滑动窗口的实时统计 |
规则配置 | 代码硬编码 | 动态配置(支持控制台) |
扩展性 | 较弱 | 支持 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 模式
特性 | TCC | AT |
---|---|---|
侵入性 | 高(需业务实现 Try/Confirm/Cancel) | 低(无侵入) |
性能 | 较高(无全局锁) | 较低(依赖全局锁) |
适用场景 | 复杂业务逻辑(如资金扣减) | 简单业务(如库存扣减) |
13. RabbitMQ 消息可靠性
-
生产者确认:
publisher confirm
机制确保消息到达 Broker。 -
持久化:消息和队列持久化到磁盘。
-
消费者确认:手动 ACK 机制,防止消息丢失。
-
高可用:镜像队列实现数据冗余。
14. RabbitMQ 消息堆积处理
-
增加消费者:提升消费速度(如线程池或集群)。
-
惰性队列:消息直接写入磁盘,减少内存压力。
-
设置 TTL:超时未消费的消息转入死信队列。
-
流量控制:生产者限流或消费者批量拉取。