跳到主要内容

服务治理

问题

微服务的服务治理包含哪些核心组件?注册发现、配置中心、网关、熔断限流是如何协同工作的?

答案

服务治理全景

核心组件

组件职责主流方案
注册发现服务注册与发现,健康检查Nacos、Eureka、Consul
配置中心集中管理配置,动态刷新Nacos、Apollo、Spring Cloud Config
API 网关路由、鉴权、限流、日志Spring Cloud Gateway、Kong
负载均衡分发请求到多个服务实例Spring Cloud LoadBalancer
熔断降级防止级联故障Sentinel、Resilience4j
链路追踪全链路调用追踪与排查SkyWalking、Zipkin

服务注册与发现

API 网关核心功能

功能说明
路由转发根据路径/Header 将请求路由到对应服务
认证鉴权JWT 验证、OAuth2、API Key
限流熔断基于 IP/用户/接口 的限流
请求聚合聚合多个后端请求,减少前端调用
日志记录统一的访问日志和审计
协议转换HTTP → gRPC 等
灰度发布按规则将部分流量路由到新版本

健康检查与优雅停机

Spring Boot Actuator 健康检查
// application.yml
// management:
// endpoints:
// web:
// exposure:
// include: health, info
// endpoint:
// health:
// show-details: always

// 自定义健康检查
@Component
public class DatabaseHealthIndicator implements HealthIndicator {
@Override
public Health health() {
if (isDatabaseUp()) {
return Health.up().withDetail("database", "MySQL is running").build();
}
return Health.down().withDetail("error", "Cannot connect to MySQL").build();
}
}

Spring Cloud 技术栈选型

组件Spring Cloud AlibabaSpring Cloud Netflix(已停更)
注册中心NacosEureka
配置中心NacosSpring Cloud Config
网关Spring Cloud GatewayZuul
负载均衡Spring Cloud LoadBalancerRibbon
远程调用OpenFeignOpenFeign
熔断限流SentinelHystrix
链路追踪SkyWalkingSleuth + Zipkin
当前主流选型

Spring Cloud Alibaba + Nacos + Sentinel + Gateway + OpenFeign 是国内 Java 微服务的事实标准。


常见面试问题

Q1: Nacos 和 Eureka 的区别?

答案

对比NacosEureka
CAPCP + AP 可切换AP
配置中心内置无(需额外组件)
健康检查TCP/HTTP/MySQL客户端心跳
雪崩保护有(自我保护)
维护状态活跃(阿里)停更

Nacos 功能更全面(注册 + 配置 + 服务管理),是当前首选。

详见 注册中心

Q2: 网关的作用是什么?没有网关行不行?

答案

没有网关可以运行,但会有以下问题:

  1. 客户端需要知道每个服务的地址(耦合)
  2. 每个服务都需要实现鉴权、限流、日志等横切关注点(重复)
  3. 跨域、协议转换等需要每个服务处理

网关作为统一入口,集中处理这些横切关注点,让业务服务专注于业务逻辑。

Q3: 服务调用链路过长怎么优化?

答案

  1. 减少调用层级:避免 A→B→C→D 的长链路,考虑 BFF 聚合
  2. 异步化:非关键路径改为异步消息
  3. 缓存:频繁查询的数据本地缓存/Redis 缓存
  4. 并行调用:CompletableFuture 并行调用多个服务
  5. 链路追踪:使用 SkyWalking 定位慢调用

相关链接