微服务不是拆完就完事了
很多团队一开始上微服务,觉得把大应用拆成十几个小服务就万事大吉了。结果没几个月,调用链乱成一团,某个服务一挂,整个系统跟着瘫痪。就像小区里水管各自为政,一家漏水,整栋楼停水,谁也别想好过。
这时候才意识到:拆只是开始,治理才是关键。
注册与发现:让服务自己报到
微服务之间要通信,得先知道对方在哪。手动配置IP和端口?那改一次就得改一堆配置文件,迟早出错。所以得有个“通讯录”,每个服务启动时自动登记,其他服务要用时去查就行。
比如用 Nacos 或 Consul 做注册中心,服务启动后主动上报自己的地址,消费者通过名字就能找到它。就算这个实例挂了,注册中心也能感知并剔除,避免请求发到空壳上。
负载均衡:别让一个扛所有
同一个服务可能有多个实例,请求不能只往其中一个砸。得有策略地分摊压力,比如轮询、随机或根据响应时间选最快的。
在 Spring Cloud 里,Ribbon 或 LoadBalancer 可以自动帮你做这件事。你只需要写:restTemplate.getForObject("http://user-service/api/users/1", User.class);,后面的负载逻辑它都包了。
熔断与降级:别让雪崩压垮系统
用户下单时要查库存、扣优惠券、发消息。如果优惠券服务卡住了,订单服务一直等,最后线程耗尽,连正常的查询都打不开了——这就是连锁故障。
引入 Hystrix 或 Sentinel,设定超时和失败阈值。一旦调用失败率超过50%,立刻熔断,后续请求直接走降级逻辑,比如返回默认优惠信息,保证主流程能走通。
sentinel.rules =
<rule>
<resource>get-coupon</resource>
<count>50</count>
<grade>1</grade>
</rule>配置统一管理:别再散落各处
开发说测试环境连 A 数据库,运维说配置文件里写的是 B。这种低级错误在服务多了之后天天上演。
用 Config Server 或 Apollo 把配置集中起来,按环境隔离。改个参数不用重启,推送一下就生效。就像空调遥控器统一收在茶几上,谁要用都知道去哪拿。
链路追踪:看清请求的完整路径
一个请求经过七八个服务,最后慢了三秒。到底是哪个环节拖后腿?靠日志拼接太费劲。
集成 Sleuth + Zipkin,每个请求生成唯一 trace ID,每一步都记录耗时。打开页面一看,哪个服务响应最慢一目了然。就像快递物流信息,从发货到签收每一步都清清楚楚。
限流与鉴权:防止被自己人搞崩
促销活动刚上线,内部脚本疯狂刷接口,把数据库打挂了。这种情况不设防,再好的架构也扛不住。
在网关层用 Spring Cloud Gateway 配合 Redis 做限流,比如每个用户每秒最多10次请求。同时加上 JWT 鉴权,确保只有合法调用才能进。
spring.cloud.gateway.routes[0].filters[0] = RequestRateLimiter=10, 20微服务治理不是加几个组件就完事,而是从设计、部署到监控形成闭环。就像城市交通,光修路不行,还得有红绿灯、摄像头、应急调度,才能保证车流顺畅。”}