目录
[1SpringCloud 有哪些常用组件?分别是什么作用?](#1SpringCloud 有哪些常用组件?分别是什么作用?)
[2 在nacos中,服务注册发现的基本流程是怎样的?](#2 在nacos中,服务注册发现的基本流程是怎样的?)
[3Eureka 和 Nacos 有哪些区别?](#3Eureka 和 Nacos 有哪些区别?)
[4Nacos 的分级存储模型是什么意思?](#4Nacos 的分级存储模型是什么意思?)
[5Ribbon 和 SpringCloudLoadBalancer 有什么差异](#5Ribbon 和 SpringCloudLoadBalancer 有什么差异)
[6 什么是服务雪崩,常见的解决方案有哪些?](#6 什么是服务雪崩,常见的解决方案有哪些?)
[7Hystix 和 Sentinel 有什么区别和联系?](#7Hystix 和 Sentinel 有什么区别和联系?)
[8 限流的常见算法有哪些?](#8 限流的常见算法有哪些?)
[9 什么是 CAP 理论和 BASE 思想?](#9 什么是 CAP 理论和 BASE 思想?)
[10 项目中碰到过分布式事务问题吗?怎么解决的?](#10 项目中碰到过分布式事务问题吗?怎么解决的?)
[11AT 模式如何解决脏读和脏写问题的?](#11AT 模式如何解决脏读和脏写问题的?)
[12TCC 模式与 AT 模式对比,有哪些优缺点](#12TCC 模式与 AT 模式对比,有哪些优缺点)
[13OpenFeign 是如何实现负载均衡的?](#13OpenFeign 是如何实现负载均衡的?)
[14RabbitMQ 是如何确保消息的可靠性的?](#14RabbitMQ 是如何确保消息的可靠性的?)
[15RabbitMQ 是如何解决消息堆积问题的?](#15RabbitMQ 是如何解决消息堆积问题的?)
1SpringCloud 有哪些常用组件?分别是什么作用?
- 1Nacos/Eureka:服务注册与发现,配置中心(config)
- 2Ribbon / LoadBalancer:客户端负载均衡(旧ribbon+feign)
- 3OpenFeign:声明式服务调用
- 4Gateway(zuul):API 网关,路由转发、鉴权
- 5Sentinel/Hystrix:熔断器,请求限流、熔断、降级,防止雪崩
- 6Seata:分布式事务
- 7elasticsearch:快速存储、搜索和分析大量数据
springcloud不是一个技术,而是一个全家桶,是一套解决分布式系统麻烦的解决方案
我们只需要把微服务当成一个大公司,理清里面的部分以及新老交替即可
1Gateway:API网关,负责路由转发和鉴权,以前使用的是zuul,不过它是阻塞式的,效率低
2nacos:注册和配置中心,负责服务注册发现和配置,以前使用的是eureka
3openfeign
2 在nacos中,服务注册发现的基本流程是怎样的?
- 服务启动时,向注册中心注册自己(IP、端口、服务名)
- 注册中心保存服务列表
- 调用方从注册中心拉取服务列表并缓存
- 调用方通过负载均衡选择一个实例发起调用
- 服务通过心跳保持健康,故障自动剔除
3Eureka 和 Nacos 有哪些区别?
- Eureka:AP 架构,只做服务发现,配置中心需要配合 Spring Cloud Config
- Nacos :AP/CP 可切换,注册中心 + 配置中心二合一
- Nacos 支持动态配置刷新,Eureka 不支持
- Nacos 支持权重、动态上下线、灰度
- Nacos 心跳机制更轻量,集群更稳定
4Nacos 的分级存储模型是什么意思?
全局级别,集群级别,服务级别和实例级别
5Ribbon 和 SpringCloudLoadBalancer 有什么差异
- Ribbon 是 Netflix 的,已经停止维护。
- Spring Cloud LoadBalancer 是官方替代品,轻量、现代。
- LoadBalancer 支持响应式编程(WebFlux),Ribbon 不支持。
- 功能差不多,都是客户端负载均衡,现在默认用 LoadBalancer。
6 什么是服务雪崩,常见的解决方案有哪些?
服务雪崩:一个服务挂了 → 上游调用阻塞 → 线程耗尽 → 越来越多服务不可用 → 整个系统崩溃。
解决方案:
- 熔断:故障时切断调用
- 限流:控制请求量
- 降级:返回兜底结果
- 超时控制、线程隔离
7Hystix 和 Sentinel 有什么区别和联系?
- 两者都是做熔断、限流、降级。
- Hystrix 停更,基于线程池隔离,较重。
- Sentinel 是阿里开源,还在维护,更轻量。
- Sentinel 支持热点限流、系统保护、实时监控,功能更强。
8 限流的常见算法有哪些?
- 固定窗口计数器:简单,但有临界突刺问题。
- 滑动窗口:更平滑,解决突刺问题。
- 漏桶算法:匀速处理请求,削峰填谷。
- 令牌桶算法:允许突发流量,Sentinel、Nginx 常用。
9 什么是 CAP 理论和 BASE 思想?
CAP:分布式系统最多同时满足两个:
- C 一致性、A 可用性、P 分区容错性分布式必须保证 P,所以只能选 CP 或 AP。
BASE:对 CAP 的妥协,追求最终一致性。
- 基本可用、软状态、最终一致。
10 项目中碰到过分布式事务问题吗?怎么解决的?
项目里用 Seata AT 模式:
- 一阶段执行本地事务,记录 undo 日志,提交本地事务。
- 二阶段根据全局事务结果,统一提交或自动回滚。优点:无侵入、开发简单,适合大多数业务场景
11AT 模式如何解决脏读和脏写问题的?
- 更新数据时,Seata 会对数据行加全局锁。
- 其他事务想要修改必须等待锁释放。
- 结合数据库本地行锁,保证并发安全。
- 避免了一阶段提交后、回滚前的数据被其他事务篡改。
12TCC 模式与 AT 模式对比,有哪些优缺点
AT 模式
- 优点:无侵入、自动回滚、开发简单
- 缺点:依赖数据库,不适合非数据库操作
TCC 模式
- 优点:不依赖数据库,灵活,支持跨中间件
- 缺点:开发量大,要写 Try/Confirm/Cancel,处理幂等、悬挂等问题
13OpenFeign 是如何实现负载均衡的?
- OpenFeign 集成了 LoadBalancer。
- 发起调用时,从注册中心获取服务实例列表。
- 根据负载均衡策略(轮询、随机等)选择一个实例。
- 自动构造 HTTP 请求,完成远程调用。
14RabbitMQ 是如何确保消息的可靠性的?
- 生产者用 confirm 机制,确保消息发到交换机。
- 队列、消息都做持久化,宕机不丢失。
- 消费者使用手动 ACK,处理完再确认。
- 配合死信队列处理失败消息。
15RabbitMQ 是如何解决消息堆积问题的?
- 增加消费者数量,提高消费速度。
- 提高消费者并发线程数。
- 业务异步化、批量处理消息。
- 清理无用消息,临时扩容队列。
