java微服务项目的架构和链路串联
目录
Java 微服务项目:架构、链路串联、常见问题 & 解决方案
一、先搞懂:Java 微服务标准架构(企业通用)
1. 接入层
2. 业务服务层(核心)
3. 基础设施层(所有服务共用)
4. 部署 & 运维层
二、微服务链路串联:一次请求怎么走?(最关键)
核心串联技术
三、微服务一定会遇到的 8 大问题 + 解决方案(高频面试 + 实战)
1. 服务调用故障:超时、异常、调用失败
2. 服务雪崩(最危险)
3. 分布式事务问题(数据不一致)
4. 链路混乱,无法排查问题
5. 网关问题:路由、跨域、限流、认证
6. 分布式会话 & 登录状态共享
7. 分布式缓存问题:缓存穿透、击穿、雪崩
8. 微服务部署 & 运维复杂
Java 微服务项目:架构、链路串联、常见问题 & 解决方案
一、先搞懂:Java 微服务标准架构(企业通用)
微服务不是乱拆,标准分层架构如下(从上到下):
1. 接入层
- Nginx / Gateway(Spring Cloud Gateway)
- 作用:统一入口、路由、限流、认证、跨域
2. 业务服务层(核心)
按业务域拆分的独立 Java 服务:
- 用户服务(user-service)
- 订单服务(order-service)
- 支付服务(pay-service)
- 商品服务(product-service)
- 库存服务(stock-service)每个服务 = 独立 SpringBoot 项目 + 独立数据库
3. 基础设施层(所有服务共用)
- 注册中心:Nacos / Eureka
- 配置中心:Nacos / Apollo
- 服务调用:OpenFeign
- 流量控制:Sentinel
- 分布式事务:Seata
- 消息队列:RocketMQ / RabbitMQ / Kafka
- 链路追踪:SkyWalking / Pinpoint
- 缓存:Redis
- 数据库:MySQL(分库分表用 ShardingSphere)
4. 部署 & 运维层
- Docker + Kubernetes(K8s)
- Jenkins 自动化部署
- ELK 日志收集
二、微服务链路串联:一次请求怎么走?(最关键)
以用户下单这个最经典流程举例:
plaintext
前端请求 ↓ Gateway(网关)→ 认证/路由 ↓ order-service(订单服务) ↓ Feign调用 → product-service(查商品) ↓ Feign调用 → stock-service(扣库存) ↓ order-service(生成订单) ↓ MQ异步通知 → pay-service(发起支付)核心串联技术
- 服务注册发现:服务启动时把自己注册到 Nacos,调用方直接从注册中心拿地址
- OpenFeign:Java 服务之间 HTTP 调用的 “声明式接口”,像调用本地方法一样调用远程服务
- 负载均衡:Ribbon / SpringCloud LoadBalancer,自动轮训 / 权重分发请求
- 链路追踪:全局 traceId,贯穿整个请求链路,方便查问题
三、微服务一定会遇到的 8 大问题 + 解决方案(高频面试 + 实战)
这部分是企业真实踩坑总结,必须掌握。
1. 服务调用故障:超时、异常、调用失败
现象:
- 调用超时
- 服务宕机导致调用失败
- 网络波动调用失败
解决方案:
- Feign 超时配置:设置合理的连接 / 读取超时
- 熔断器(Sentinel / Hystrix):失败直接降级,返回兜底数据,不雪崩
- 重试机制:幂等接口允许重试(查询接口)
- 心跳 + 健康检查:注册中心自动剔除故障节点
2. 服务雪崩(最危险)
现象:一个服务挂了 → 调用它的所有服务都阻塞 → 线程耗尽 → 整个系统瘫痪
解决方案:
- 熔断降级:故障时切断调用
- 线程池隔离:每个调用方独立线程池,互不影响
- 限流:Sentinel 限制 QPS,防止压垮服务
3. 分布式事务问题(数据不一致)
场景:订单创建成功 → 库存扣减失败 → 数据不一致
解决方案:
- Seata(AT 模式):无侵入分布式事务,保证最终一致
- 可靠消息最终一致性:MQ 确保消息必达
- TCC 模式:适合核心金融场景(Try-Confirm-Cancel)
4. 链路混乱,无法排查问题
现象:一个请求跨 5 个服务,报错了不知道哪一步出问题
解决方案:
- SkyWalking / Pinpoint:全链路追踪
- 全局 traceId:日志统一打印,快速定位整条链路
- ELK 日志聚合:一键搜索日志
5. 网关问题:路由、跨域、限流、认证
问题:
- 路由规则错误
- 跨域不生效
- 恶意流量攻击
- 未认证访问接口
解决方案:
- Spring Cloud Gateway 统一管理路由
- 网关层统一 JWT 认证
- 网关层限流、黑名单、IP 封禁
- CORS 跨域配置
6. 分布式会话 & 登录状态共享
问题:用户在 A 服务登录,B 服务取不到登录信息
解决方案:
- Redis 统一存储 Session
- JWT 无状态令牌(最常用)
7. 分布式缓存问题:缓存穿透、击穿、雪崩
现象:大量请求直接打库,数据库宕机
解决方案:
- 空值缓存 → 解决穿透
- 互斥锁 / 热点数据永不过期 → 解决击穿
- 过期时间随机 → 解决雪崩
- 多级缓存(Caffeine+Redis)
8. 微服务部署 & 运维复杂
问题:服务多、配置多、发布麻烦解决方案:
- Docker 容器化
- K8s 编排、自动扩缩容
- 配置中心统一管理配置
- Jenkins CICD 自动发布
