微服务常见面试题

返回 面试

微服务 = 小服务独立部署 + 分布式治理。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/RPCOpenFeign、Dubbo、gRPC
限流熔断流量治理Sentinel、Resilience4j
分布式事务跨服务一致Seata、SAGA、本地消息表
链路追踪调用链排查SkyWalking、Zipkin、OTel

Nacos 常问

功能说明
服务注册实例心跳、健康检查
配置管理动态刷新 @RefreshScope
AP/CP注册发现偏 AP;配置可读 CP 模式

Gateway vs Nginx

GatewayNginx
应用层(Java 生态)七层/四层
能力与 Spring 集成、路由断言、Filter高性能、静态、反向代理
场景微服务 API 网关流量入口、TLS、静态资源

生产常 Nginx + Gateway 分层。


Feign 原理(简)

接口 + 注解 → 动态代理 → HTTP 调用;整合 LoadBalancer 选实例、Sentinel 熔断。


分布式事务

方案说明
Seata AT自动 undo log,侵入小
TCC / SAGA最终一致,业务实现复杂
本地消息表实用、异步

分布式事务Seata


服务拆分原则

  • 业务域(订单、库存、用户)
  • 高内聚低耦合
  • 避免过度拆分(分布式 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 上加服务治理组件集。


相关笔记