微服务技巧栈一文串讲

微服务串讲-用户下单

假设我们要做一个电商下单功能,会拆成 3 个核心微服务:用户服务(查用户信息)、订单服务(创建订单)、库存服务(扣减商品库存),流程如下:

微服务:业务拆成独立小服务

  • 不再是把 “用户、订单、库存” 堆在一个大系统里,而是拆成 3 个独立运行的微服务:
    • 用户服务:只负责查用户是否存在、是否有下单权限(接口:<font style="color:rgb(0, 0, 0);">/user/check/{userId}</font>);
    • 订单服务:只负责生成订单号、记录订单信息(是 “消费者”,要调用用户服务和库存服务);
    • 库存服务:只负责扣减商品库存(接口:<font style="color:rgb(0, 0, 0);">/stock/deduct/{goodsId}</font>)。
  • 每个服务单独开发、部署,比如订单服务用 Java 写,库存服务用 Go 写,互不影响。

完整业务场景

1. 网关(Spring Cloud Gateway):统一入口,“门卫+导航”

  • 作用:所有用户请求(如下单、查订单)必须先经过网关,负责路由转发、身份认证、限流、日志记录等。
  • 具体操作
    用户点击下单,请求https://api.mall.com/order/create先到达网关。
    • 网关验证用户token(判断是否登录),无效则直接返回“请登录”;
    • 验证通过后,根据请求路径/order/create,转发到“订单服务”(从注册中心查订单服务的实例地址);
    • 同时网关会记录这条请求的日志(方便后期排查问题)。

2. 注册中心(Nacos):服务“通讯录”

  • 作用:管理所有服务的实例地址(如订单服务、库存服务的IP+端口),让服务间能互相发现。
  • 具体操作
    订单服务启动时,会把自己的地址(如192.168.1.20:8001)注册到Nacos;库存服务的3个实例(192.168.1.21:8003等)也已注册。
    网关转发请求时,从Nacos拿到订单服务的实例地址,再把请求发过去。

3. 配置中心(Nacos Config):配置“中央仓库”

  • 作用:集中管理所有服务的配置(如数据库地址、超时时间、业务参数),避免每个服务本地配置混乱,支持动态更新。
  • 具体操作
    库存服务有个配置“单次最大扣减数量=10”(防止恶意下单),这个设置保存在Nacos Config中。
    库存服务启动时会从设置中心拉取该配置;假设大促时需调整为“20”,运维直接在Nacos后台修改,库存服务会自动感知并生效(无需重启服务)。

4. 微服务调用(OpenFeign + 负载均衡):服务间“通信员”

  • 作用:服务间经过接口调用协作,OpenFeign简化调用代码,负载均衡分散压力。
  • 具体操作
    订单服务接收到网关的请求后,需要做两件事:
    • 调用用户服务查用户信息(/user/check/123):通过OpenFeign接口,自动从Nacos拿用户服务实例,负载均衡选一个调用;
    • 调用库存服务扣减手机库存(/stock/deduct/456):同样通过OpenFeign,从Nacos拿库存服务的3个实例,轮询选一个(如192.168.1.21:8003)调用。

5. 熔断限流(Sentinel):服务“保险丝”

  • 作用:防止某个服务故障拖垮整个系统(如库存服务卡死后,订单服务一直等,导致订单服务也崩了)。
  • 具体操作
    大促时,库存服务突然收到10万次/秒的扣减请求,处理不过来,响应变慢。
    • Sentinel监测到库存服务的响应时间超过阈值(如500ms),会触发“限流”:只允许5万次/秒的请求通过,剩下的直接返回“系统繁忙,请稍后再试”;
    • 假如库存服务直接崩了(实例下线),Sentinel会触发“熔断”:订单服务调用库存服务时,直接返回“库存服务暂时不可用”,避免订单服务一直等待而耗尽资源。

6. 链路追踪(Sleuth + Zipkin):疑问“追踪器”

  • 作用:记录请求从网关到各个服务的全链路路径、耗时,方便排查问题(如“下单慢”是哪个服务卡了)。
  • 具体操作
    用户反馈“下单要等10秒”,运维通过Zipkin查看链路日志:
    • 网关→订单服务:耗时50ms;
    • 订单服务→用户服务:耗时100ms;
    • 库存服务卡了);就是订单服务→库存服务:耗时9800ms(发现
      定位到问题出在库存服务,进一步排查是数据库慢查询导致。

全流程串起来

用户点击

:::color4
“下单”

→ 网关(验token、转发)

→ 订单服务 → 用OpenFeign调用用户服务(查信息)

→ 用OpenFeign调用库存服务(扣库存,Nacos献出实例,负载均衡选一个)

→ 库存服务从配置中心拿“最大扣减数量”

→ 若库存服务压力大,Sentinel限流/熔断

→ 链路追踪记录全流程耗时

→ 订单服务生成订单

→ 返回“下单成功”。

:::

这些组件各司其职:网关管入口,注册中心管地址,配置中心管配置,OpenFeign管通信,Sentinel管稳定,链路追踪管排查——共同支撑起高可用的微服务框架。

posted @ 2025-09-22 10:08  yfceshi  阅读(9)  评论(0)    收藏  举报