网络宝典
第二套高阶模板 · 更大气的阅读体验

微服务治理平台常见问题及应对方法

发布时间:2025-12-24 01:31:24 阅读:406 次

服务发现失败怎么办

在使用微服务治理平台时,经常遇到服务注册后无法被其他服务发现的情况。比如订单服务启动后,在日志里看到注册成功,但支付服务却调用不到它。这通常是因为配置中心的地址写错了,或者网络不通导致心跳检测失败。可以先检查 application.yml 中的注册中心 URL,确认是否指向正确的 Nacos 或 Eureka 地址。

spring:
cloud:
nacos:
discovery:
server-addr: 192.168.1.100:8848

如果地址没问题,再查看防火墙设置,确保 8848 端口是开放的。有时候开发人员在本地测试,忘了开公司内网权限,也会出现这类问题。

调用链追踪看不到数据

线上出了问题,想查哪个环节耗时最长,结果打开 SkyWalking 页面,调用链一片空白。这种情况多半是客户端探针没装好。Spring Boot 项目需要引入 skywalking-agent.jar 并在启动命令里加上 -javaagent 参数。

java -javaagent:/opt/skywalking/agent/skywalking-agent.jar 
-Dskywalking.agent.service_name=order-service
-jar order-service.jar

少了这个参数,服务就不会上报链路数据。也有人把环境变量写错了,比如把 collector.backend_service 写成了本地 IP,而实际后端服务部署在 Kubernetes 集群内部,网络不通自然收不到数据。

限流规则不生效

大促期间怕系统扛不住,提前在 Sentinel 控制台上配了限流规则,结果流量一来还是崩了。排查后发现,原来只在控制台配置了规则,却没有在代码里接入 @SentinelResource 注解。

@RestController
public class OrderController {

@GetMapping("/create")
@SentinelResource(value = "createOrder", blockHandler = "handleBlock")
public String createOrder() {
return "订单创建成功";
}
}

没有这个注解,Sentinel 就不知道要监控哪个方法,规则自然不会触发。还有些团队用了 Spring Cloud Gateway 做统一入口,但忘了在网关层配置路由级流控,导致请求直接打穿到下游。

配置更新不及时

改了个数据库连接超时时间,通过 Nacos 发布了新配置,可服务重启前一直用的还是旧值。这是因为很多项目默认没开启自动刷新。需要在类上加 @RefreshScope 注解才能让配置动态更新。

@Component
@RefreshScope
public class DbConfig {
@Value("${db.timeout:5000}")
private int timeout;
}

不然就得重启服务才能加载新配置。有些老系统甚至压根没引入 spring-cloud-starter-alibaba-nacos-config 依赖,根本没法监听配置变化,这种只能手动改完重启了事。

服务雪崩怎么防

一个核心服务挂了,结果整个系统都卡住,用户刷不出页面。这就是典型的服务雪崩。比如商品详情页依赖库存、价格、评论三个服务,其中一个响应慢,线程池被占满,其他请求全堵着。这时候应该启用熔断机制,Hystrix 或 Sentinel 都能设置熔断策略。

// 设置 10 秒内错误率超过 50% 就熔断
@HystrixCommand(fallbackMethod = "getDefaultPrice")
public String getPrice() {
// 调用远程服务
}

一旦触发熔断,后续请求直接走降级逻辑,返回默认值,避免拖垮整个调用链。同时配合线程隔离,不同服务用不同的线程池,就算某个服务出问题,也不影响别的功能正常使用。