微服务常见面试题
→ 返回 面试
微服务 = 小服务独立部署 + 分布式治理。Java 落地见 Spring Cloud;架构见 系统全貌。
单体 vs 微服务
| 单体 | 微服务 | |
|---|---|---|
| 部署 | 一次全量 | 独立发布 |
| 扩展 | 整体扩容 | 按服务扩容 |
| 复杂度 | 低 | 分布式事务、链路、运维高 |
| 适用 | 小团队、早期 | 大团队、高并发、多域 |
典型调用链
Client
▼
API Gateway(鉴权、限流、路由)
▼
注册中心(Nacos)发现实例
▼
Service A ──Feign/gRPC──► Service B
▼
DB / Redis / MQ
核心组件
| 组件 | 作用 | 常见实现 |
|---|---|---|
| 注册发现 | 服务实例注册与发现 | Nacos、Eureka、Consul |
| 配置中心 | 动态配置、多环境 | Nacos Config、Apollo |
| 网关 | 统一入口、路由、鉴权 | Spring Cloud Gateway |
| 负载均衡 | 客户端选实例 | LoadBalancer、Ribbon |
| 远程调用 | HTTP/RPC | OpenFeign、Dubbo、gRPC |
| 限流熔断 | 流量治理 | Sentinel、Resilience4j |
| 分布式事务 | 跨服务一致 | Seata、SAGA、本地消息表 |
| 链路追踪 | 调用链排查 | SkyWalking、Zipkin、OTel |
Nacos 常问
| 功能 | 说明 |
|---|---|
| 服务注册 | 实例心跳、健康检查 |
| 配置管理 | 动态刷新 @RefreshScope |
| AP/CP | 注册发现偏 AP;配置可读 CP 模式 |
Gateway vs Nginx
| Gateway | Nginx | |
|---|---|---|
| 层 | 应用层(Java 生态) | 七层/四层 |
| 能力 | 与 Spring 集成、路由断言、Filter | 高性能、静态、反向代理 |
| 场景 | 微服务 API 网关 | 流量入口、TLS、静态资源 |
生产常 Nginx + Gateway 分层。
Feign 原理(简)
接口 + 注解 → 动态代理 → HTTP 调用;整合 LoadBalancer 选实例、Sentinel 熔断。
分布式事务
| 方案 | 说明 |
|---|---|
| Seata AT | 自动 undo log,侵入小 |
| TCC / SAGA | 最终一致,业务实现复杂 |
| 本地消息表 | 实用、异步 |
服务拆分原则
- 按业务域(订单、库存、用户)
- 高内聚低耦合
- 避免过度拆分(分布式 monolith)
- 数据能不分就不分;分了避免跨库 JOIN
常见面试题
Q:微服务之间怎么通信?
A:同步 REST/gRPC(Feign);异步 MQ(解耦、削峰)。
Q:配置改了怎么生效?
A:Nacos 推送 + @RefreshScope / @ConfigurationProperties 刷新。
Q:如何排查跨服务慢请求?
A:链路追踪 traceId;网关日志;Arthas;各服务 metrics。
Q:注册中心挂了?
A:客户端有本地缓存实例列表;新实例无法注册;集群部署 Nacos。
Q:和 Spring Boot 区别?
A:Boot 单应用;Cloud 在 Boot 上加服务治理组件集。