当前位置: 首页 > news >正文

微服务技术栈一文串讲

微服务串讲-用户下单

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

http://www.dtcms.com/a/392400.html

相关文章:

  • 从浅入深:自编码器(AE)与变分自编码器(VAE)的核心原理与Pytorch代码讲解
  • 低功耗超宽带收发器:DW1000设备驱动API指南
  • 2012/07 JLPT听力原文 问题四
  • Redis最佳实践——性能优化技巧之集群与分片
  • springboot的注解
  • iOS App 混淆与热更新兼容实战 混淆后如何安全可靠地推送热修复(Hotfix)与灰度回滚
  • 从 0 到 1 保姆级实现C语言双向链表
  • 2 IP地址规划与设计案例分析
  • Vue 中 8 种组件通信方式
  • 十三、vue3后台项目系列——sidebar的实现,递归组件
  • LeetCode 383 - 赎金信
  • compose multiplatform reader3
  • Redis 入门与实践
  • 【OpenGL】texture 纹理
  • agentscope以STUDIO方式调用MCP服务
  • 无公网 IP 访问群晖 NAS:神卓 N600 的安全解决方案(附其他方法风险对比)
  • Redis最佳实践——性能优化技巧之Pipeline 批量操作
  • Java-130 深入浅出 MySQL MyCat 深入解析 核心配置文件 server.xml 使用与优化
  • 业主信息查询功能测试指南
  • WinDivert学习文档之四-————卸载
  • 分布式链路追踪关键指标实战:精准定位服务调用 “慢节点” 全指南(二)
  • DuckDB客户端API之ADBC官方文档翻译
  • 区块链技术应用开发:智能合约进阶与多链生态落地实践
  • 分布式专题——13 RabbitMQ之高级功能
  • 神经风格迁移(Neural Style Transfer)
  • Chromium 138 编译指南 Ubuntu 篇:源码获取与版本管理(四)
  • R 语言入门实战|第九章 循环与模拟:用自动化任务解锁数据科学概率思维
  • [论文阅读] 人工智能 + 软件工程 | 4907个用户故事验证!SEEAgent:解决敏捷估计“黑箱+不协作”的终极方案
  • 鸿蒙Next ArkTS卡片开发指南:从入门到实战
  • 【绕过disable_function】