电商商城微服务架构设计方案(SpringCloud/Go+Vue3+MySQL+ES+RocketMQ)

电商商城微服务架构设计方案(SpringCloud/Go+Vue3+MySQL+ES+RocketMQ)

一、方案概述

本方案基于主流云原生微服务技术栈,搭建一套支持PC网页+H5移动端双端访问的分布式电商商城系统,采用前后端分离架构,结合高并发缓存、全文检索、异步消息队列、容器化部署能力,解决电商场景的商品检索、下单支付、订单履约、用户管理、售后维权等核心业务,同时保障系统高可用、高并发、可扩展、易运维的特性。

技术栈核心约束:后端微服务(Java SpringCloud / Go)、数据层(MySQL+Redis+Elasticsearch)、前端(Vue3/React 双端适配)、中间件(RocketMQ)、基础设施(对象存储+CDN+Docker/K8s)。

二、整体架构分层设计

系统采用标准分布式分层架构,从上至下分为接入层、前端应用层、网关层、微服务业务层、数据持久层、中间件层、基础设施层,层级解耦清晰,支持独立迭代、扩容、运维。

1. 接入层

面向终端用户,承接所有用户访问请求,实现静态资源加速、流量分发、负载均衡:

  • 终端:PC官网、H5移动端网页
  • 基础设施:CDN(静态资源、商品图片加速)、SLB负载均衡(统一流量入口,分发后端服务)

2. 前端应用层(双端统一)

采用前后端分离架构,无业务逻辑,仅负责页面渲染、交互适配、请求转发:

  • 技术选型:Vue3 / React 自由选型,适配PC宽屏布局、H5移动端自适应布局
  • 核心能力:双端路由适配、状态管理、静态资源打包、接口统一请求封装、权限前端校验
  • 部署方式:静态资源托管至对象存储+CDN加速,提升页面访问速度

3. API网关层

基于SpringCloud Gateway,作为所有微服务的统一入口,实现流量管控与通用能力剥离:

  • 核心功能:路由转发、负载均衡、鉴权拦截、Token校验、限流熔断、跨域处理、请求日志、灰度发布
  • 价值:统一收口非业务通用逻辑,业务服务专注核心业务,降低开发复杂度

4. 微服务业务层(核心拆分)

严格按照业务领域边界拆分5大核心微服务,支持Java SpringCloud/Go双技术栈开发,高并发轻量场景可选用Go,复杂业务场景选用Java SpringCloud,服务间通过注册中心、Feign/HTTP调用通信。

4.1 用户服务(User Service)

承载平台所有用户相关核心业务,是系统基础支撑服务。核心能力:用户注册、手机号登录、密码找回、Token签发与刷新、用户信息管理、会员等级、收货地址管理、用户权限控制、登录态校验。

适配优化:用户登录态、会员信息缓存至Redis,减少MySQL查询压力。

4.2 商品服务(Goods Service)

商城核心基础服务,支撑商品全生命周期管理。核心能力:商品上架/下架、商品分类、规格SKU管理、商品详情、价格管理、库存管理、品牌管理、商品参数配置。

适配优化:商品基础信息、热门商品、分类数据缓存至Redis;商品详情、标题、参数同步至Elasticsearch,支撑全文模糊搜索、精准筛选、排序分页。

4.3 订单服务(Order Service)

交易核心服务,处理下单、订单履约全流程。核心能力:创建订单、订单状态流转(待付款/待发货/待收货/已完成/已取消)、订单列表查询、订单库存锁定、订单拆分与合并、订单日志记录。

适配优化:核心高并发服务,采用RocketMQ实现订单超时自动取消、异步库存释放,避免超卖与资源占用。

4.4 支付服务(Pay Service)

资金交易专属服务,独立拆分保障资金安全与稳定性。核心能力:对接第三方支付(微信/支付宝)、生成支付链接/二维码、支付结果异步回调解析、订单支付状态更新、退款申请、退款结果同步、支付流水记录。

适配优化:支付流程异步化,通过RocketMQ同步支付结果至订单、售后服务,避免同步阻塞。

4.5 售后服务(After Service)

用户售后维权专属服务,解耦主交易流程。核心能力:退货/换货/退款申请、售后单状态流转、售后审核、物流信息对接、售后纠纷处理、售后记录查询。

适配优化:售后通知、审核结果推送通过RocketMQ异步处理,提升响应速度。

5. 数据持久层

采用MySQL主存+Redis缓存+ES检索的三层数据架构,各司其职:

  • MySQL:核心业务数据持久化(用户、订单、商品基础、支付流水、售后数据),支持主从分离,读写分离提升并发能力
  • Redis:热点数据缓存、分布式锁、登录态、限流计数、库存缓存、临时数据存储,抗高并发查询
  • Elasticsearch:商品全文检索核心组件,支持关键词搜索、模糊匹配、价格筛选、销量排序、分词检索,解决MySQL模糊查询性能瓶颈

6. 中间件层

核心中间件以RocketMQ为核心,实现系统异步解耦、削峰填谷、定时任务能力:

  • RocketMQ 核心场景:订单超时未支付自动取消、异步更新库存、支付结果异步通知、用户消息推送、售后状态同步、高并发流量削峰(下单峰值流量)
  • SpringCloud 配套中间件:注册中心(Nacos/Eureka)、配置中心、熔断降级(Sentinel)、服务监控

7. 基础设施层

  • 对象存储:统一存储商品图片、用户头像、售后凭证图片等静态文件
  • CDN:加速PC/H5静态资源、图片资源分发,降低源站压力,提升用户访问速度
  • 容器编排:Docker容器打包应用,K8s集群实现服务自动部署、弹性扩容、故障自愈、负载均衡、版本回滚

三、核心业务流程架构设计

1. 商品搜索流程

用户PC/H5端输入关键词 → 前端请求网关 → 商品服务 → Elasticsearch执行全文检索、筛选排序 → 返回结果(优先缓存热点搜索结果)→ 前端渲染页面,实现毫秒级商品搜索响应。

2. 下单交易核心流程

  1. 用户选择商品提交订单 → 网关路由至订单服务 → Redis校验库存、分布式锁防超卖 → 锁定库存、创建待支付订单;

  2. 订单服务调用支付服务生成支付订单 → 返回支付信息至前端;

  3. 同步发送RocketMQ延时消息,监听订单超时事件;

  4. 用户支付成功后,第三方回调支付服务 → 支付服务更新支付状态 → 发送MQ消息同步至订单服务、积分服务;

  5. 若超时未支付,RocketMQ触发延时任务,订单自动取消、异步释放库存。

3. 售后流程

用户发起售后申请 → 售后服务创建售后单 → 后台审核 → 审核通过后调用支付服务执行退款 → MQ异步推送售后通知、更新订单售后状态,全程不阻塞主交易链路。

四、部署架构方案

1. 前端部署

Vue3/React双端项目打包静态资源,上传至对象存储,绑定CDN域名,实现全球加速访问,无需服务器部署,降低运维成本。

2. 后端服务部署

所有微服务通过Docker打包镜像,推送镜像仓库,由K8s集群统一调度部署,根据业务峰值自动弹性扩缩容:秒杀、大促时段自动扩容订单、商品服务,低峰期缩容,节省资源。

3. 数据与中间件部署

  • MySQL:主从架构,主库写、从库读,保障数据高可用
  • Redis:集群部署,支持缓存高可用、数据持久化
  • ES:集群部署,保障商品检索服务稳定
  • RocketMQ:集群部署,保证消息不丢失、高并发吞吐

五、架构核心优势

  • 业务解耦:五大核心服务领域边界清晰,独立开发、部署、迭代,互不影响,适合团队分工协作
  • 高并发高性能:Redis缓存热点数据、ES支撑海量商品检索、RocketMQ削峰异步处理,完美适配电商大促、秒杀高并发场景
  • 高可用可扩展:K8s容器化部署,支持弹性扩容、故障自愈;服务无状态,可横向无限扩展
  • 双端适配:一套后端服务同时支撑PC网页、H5移动端,降低开发运维成本
  • 数据分层合理:MySQL存持久化数据、Redis扛并发、ES做检索,规避单一数据库性能瓶颈

六、风险优化与落地建议

  • 缓存一致性:商品信息更新后,同步更新Redis缓存与ES索引,避免缓存、检索数据与数据库不一致
  • 消息幂等性:RocketMQ消费场景全部实现幂等处理,防止重复下单、重复退款、重复通知问题
  • 库存防超卖:结合Redis分布式锁+数据库乐观锁+MQ异步回滚,三重保障解决电商超卖核心问题
  • 服务熔断降级:接入Sentinel熔断降级,大促时段保护核心服务,非核心服务降级,避免雪崩效应
  • 日志监控:基于K8s搭建统一日志、监控、告警体系,实时监控服务状态、接口性能、异常报错

七、方案总结

本架构方案完全基于既定技术栈搭建,贴合电商核心业务场景,实现了前后端分离、微服务解耦、缓存加速、全文检索、异步削峰、容器化云原生部署的完整能力。系统可支撑中小型电商平台全业务流程,同时具备极强的扩展性,可后续拓展秒杀、优惠券、购物车、分销、商家后台等增值业务,满足业务迭代升级需求。

八、系统代码架构设计(可直接落地)

本章节统一规范后端Java微服务工程结构、Go轻服务结构、前端工程结构、通用分层代码规范、核心组件代码示例,所有服务遵循统一编码分层、依赖规范、目录约束,适配团队协同开发。

8.1 后端整体代码架构规范

所有微服务统一遵循 DDD领域分层 + MVC架构 ,分层自上而下:Controller(接入层)→ Service(业务层)→ Manager(组件层)→ DAO(数据层),杜绝跨层调用,所有通用能力下沉至公共依赖。

8.1.1 微服务全局依赖工程(父工程)

采用Maven多模块聚合工程,统一版本管控、依赖收敛,避免版本冲突,目录结构如下:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java mall-parent ├── mall-common // 全局公共依赖 │ ├── mall-common-core // 核心工具、统一返回、异常、常量、工具类 │ ├── mall-common-redis// Redis缓存封装、分布式锁工具 │ ├── mall-common-es // Elasticsearch检索封装 │ ├── mall-common-mq // RocketMQ消息封装、生产者/消费者模板 │ ├── mall-common-security // 鉴权、Token、权限工具 │ └── mall-common-storage // 对象存储、文件上传工具 ├── mall-gateway // 网关服务(独立工程) ├── mall-user // 用户微服务 ├── mall-goods // 商品微服务 ├── mall-order // 订单微服务 ├── mall-pay // 支付微服务 ├── mall-aftersale // 售后微服务 └── mall-config // 统一配置中心 |

8.1.2 单个Java微服务标准目录结构

五大核心业务服务统一目录规范,无特殊自定义目录,保证代码统一规整:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java mall-goods ├── controller // 接口接入层,接收前端请求、参数校验、返回结果 ├── service // 业务接口层 │ └── impl // 业务实现层,核心业务逻辑、事务控制 ├── manager // 通用组件层,封装缓存、MQ、ES、第三方调用 ├── dao // 数据访问层 │ ├── mapper // Mybatis Mapper接口 │ └── xml // SQL映射文件 ├── entity // 实体类 │ ├── po // 数据库持久化对象 │ ├── dto // 业务传输对象(服务间调用) │ ├── vo // 前端返回视图对象 │ └── query // 分页、查询参数对象 ├── config // 配置类(ES、Redis、MQ、线程池配置) ├── exception // 自定义业务异常、异常处理器 ├── util // 服务内专属工具类 └── resource // 配置文件(yml、mybatis配置) |

8.1.3 轻量Go服务代码架构(高并发场景专用)

针对订单、商品等高并发场景,可选Go重构,采用标准Gin分层架构,极简高效:

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------|
| go mall-goods-go ├── api // 接口层 ├── service // 业务逻辑层 ├── dao // 数据层 ├── model // 数据模型、请求响应结构体 ├── config // 全局配置 ├── pkg // 公共工具、缓存、MQ、ES封装 └── main.go // 服务入口 |

8.2 核心分层代码规范(Java)

8.2.1 Controller层规范

只做参数校验、请求接收、结果封装、权限拦截,不写任何业务逻辑,统一返回Result格式。

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java @RestController @RequestMapping("/api/goods") public class GoodsController { @Autowired private GoodsService goodsService; // 商品全文搜索接口 @GetMapping("/search") public Result<PageVO<GoodsVO>> searchGoods(GoodsQuery query) { // 基础参数校验 QueryUtil.checkPage(query); // 调用业务层 PageVO<GoodsVO> pageVO = goodsService.searchGoods(query); return Result.success(pageVO); } } |

8.2.2 Service业务层规范

承载核心业务逻辑、事务控制、业务规则校验,调用Manager、DAO层,支持事务回滚。

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java @Service public class GoodsServiceImpl implements GoodsService { @Autowired private GoodsManager goodsManager; @Override public PageVO<GoodsVO> searchGoods(GoodsQuery query) { // 1.优先查询Redis热点缓存 PageVO<GoodsVO> cachePage = goodsManager.getGoodsSearchCache(query); if (Objects.nonNull(cachePage)) { return cachePage; } // 2.缓存未命中,查询ES全文检索 PageVO<GoodsVO> esPage = goodsManager.searchGoodsByES(query); // 3.写入缓存,设置过期时间 goodsManager.setGoodsSearchCache(query, esPage); return esPage; } } |

8.2.3 Manager组件层规范

封装Redis、ES、RocketMQ、对象存储、第三方支付等通用组件,解耦业务层,可复用。

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java @Service public class GoodsManager { @Autowired private ElasticsearchRestTemplate esTemplate; @Autowired private RedisTemplate<String, Object> redisTemplate; // ES商品检索封装 public PageVO<GoodsVO> searchGoodsByES(GoodsQuery query) { // 构建ES分词查询、筛选、排序条件 NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder(); queryBuilder.withQuery(QueryBuilders.matchQuery("title", query.getKeyword())); // 分页、排序、过滤逻辑 // ...省略通用检索逻辑 return new PageVO<>(); } // Redis缓存查询与更新封装 public PageVO<GoodsVO> getGoodsSearchCache(GoodsQuery query) { String cacheKey = CacheKeyUtil.getGoodsSearchKey(query); return (PageVO<GoodsVO>) redisTemplate.opsForValue().get(cacheKey); } } |

8.2.4 DAO数据层规范

仅做数据库CRUD操作,无业务逻辑,基于Mybatis实现,对应数据库实体PO。

|-----------------------------------------------------------------------------------------------------------------------------|
| java @Mapper public interface GoodsMapper extends BaseMapper<GoodsPO> { // 自定义复杂商品查询SQL List<GoodsPO> listHotGoods(); } |

8.3 核心中间件代码实现

8.3.1 RocketMQ延时订单取消代码(核心场景)

实现订单超时未支付自动取消、库存异步释放,解决高并发订单超时问题。

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java // 订单生产者:创建订单发送15分钟延时消息 @Component public class OrderMqProducer { @Autowired private RocketMQTemplate rocketMQTemplate; public void sendOrderDelayMsg(String orderNo) { // 延时等级:15分钟 rocketMQTemplate.syncSend("order-delay-topic", MessageBuilder.withPayload(orderNo).build(), 3000, 16); } } // 订单消费者:超时取消订单 @Component @RocketMQMessageListener(topic = "order-delay-topic", consumerGroup = "order-delay-consumer") public class OrderDelayConsumer implements RocketMQListener<String> { @Autowired private OrderService orderService; @Override public void onMessage(String orderNo) { // 幂等判断:避免重复消费 if (orderService.isOrderClosed(orderNo)) { return; } // 关闭订单、释放库存 orderService.closeTimeoutOrder(orderNo); } } |

8.3.2 Redis分布式锁防超卖核心代码

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| java @Service public class OrderServiceImpl implements OrderService { @Autowired private RedisLockUtil redisLockUtil; @Override public void createOrder(OrderDTO orderDTO) { String lockKey = "stock:lock:" + orderDTO.getSkuId(); // 尝试获取分布式锁 boolean lock = redisLockUtil.tryLock(lockKey, 30, 3); if (!lock) { throw new BusinessException("库存繁忙,请稍后重试"); } try { // 校验库存、创建订单、锁定库存 // ...核心下单逻辑 } finally { // 释放锁 redisLockUtil.unLock(lockKey); } } } |

8.4 前端代码架构(Vue3/React双端统一)

8.4.1 Vue3 工程目录(PC+H5通用)

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| vue mall-vue ├── public // 静态资源 ├── src │ ├── api // 统一接口请求(按服务拆分:user、goods、order、pay) │ ├── assets // 图片、样式、字体 │ ├── components // 公共组件、业务组件 │ ├── router // 双端路由、权限路由 │ ├── store // Pinia状态管理 │ ├── utils // 请求封装、工具方法、权限校验 │ ├── views // 页面视图(PC页面、H5页面分开目录) │ └── App.vue ├── vite.config.js // 打包配置、CDN配置 └── .env // 环境变量 |

8.4.2 React 工程目录规范

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| js mall-react ├── src │ ├── api // 服务接口统一封装 │ ├── components // 通用组件、业务组件 │ ├── pages // 页面组件 │ ├── router // 路由配置 │ ├── store // 状态管理 │ ├── utils // 全局工具、请求拦截 │ └── styles // 全局样式 └── config // 打包、环境配置 |

8.5 统一代码编码规范

  • 统一返回格式 :所有接口强制返回 Result<T>,包含code、msg、data,统一异常拦截
  • 事务规范 :新增、修改、删除业务必须加 @Transactional,只读接口禁止加事务
  • 缓存规范 :查询优先走缓存,更新操作先改库、后删缓存、同步更新ES
  • MQ规范 :所有消费者必须实现幂等性、重试机制、死信队列配置
  • 参数规范:所有前端入参必须做非空、长度、格式校验,后端不接收非法参数
  • 分层规范:禁止Controller写业务、禁止Service操作缓存/MQ、所有组件能力下沉Manager层

8.6 容器化代码部署规范

每个微服务独立编写Dockerfile,统一镜像打包规范,适配K8s部署:

|------------------------------------------------------------------------------------------------------------------------------------------------------|
| dockerfile # 通用Java服务Dockerfile FROM openjdk:11-jre-slim WORKDIR /mall COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT "java","-jar","app.jar" |

前端项目打包后生成静态资源,直接推送对象存储,绑定CDN,无需容器部署,最大化节省资源。

相关推荐
码农大叔的博客1 小时前
golang示例:for九九乘法表
开发语言·算法·golang
SL-staff1 小时前
AB测试数据失真根因与变量热替换实战:JVS-Rules函数计算器架构解析
java·运维·微服务·函数式编程·规则引擎·变量管理·营销技术
m0_640602441 小时前
2026 年餐饮收银系统前后端技术实现——核心架构与原理详解
后端·微服务·云原生·架构
圣殿骑士-Khtangc2 小时前
Go-sync-Pool对象池最佳实践与源码分析
golang
互联网中的一颗神经元2 小时前
01. Go 内存管理全景架构
java·jvm·golang
有脚就行2 小时前
第24篇-Go-gRPC推理服务-高性能跨语言通信
开发语言·人工智能·后端·golang
一直都在5723 小时前
Sleuth--链路追踪
spring cloud
童谣13 小时前
越华碳能:V3.0 多模态物联网碳核算微服务平台架构设计与落地实践
物联网·微服务·架构
圣殿骑士-Khtangc15 小时前
Go-Mutex源码解析从自旋到饥饿模式的完整演进
golang