微服务技术栈一文串讲
微服务串讲-用户下单
假设我们要做一个电商下单功能,会拆成 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管稳定,链路追踪管排查——共同支撑起高可用的微服务系统。