【架构实战】从零搭建电商微服务平台:Spring Cloud Alibaba 全栈实践
本文分享一个完整的电商微服务系统设计与实现,涵盖 10+ 核心服务模块,采用 Spring Cloud Alibaba 技术栈,支持高并发、高可用场景。
一、项目概述
1.1 业务背景
随着业务规模扩大,单体架构已无法满足电商系统的高并发需求。本项目将单体应用拆分为微服务架构,实现服务独立部署、弹性伸缩。
1.2 核心数据
- 服务数量:10+ 个微服务
- 技术栈:Spring Cloud Alibaba + Nacos + Gateway + Seata
- 部署方式:Docker 容器化 + Docker Compose
- 数据库:MySQL + Redis
二、架构设计
2.1 整体架构图
┌─────────────────────────────────────────────────────────┐
│ 前端层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Web 商城 │ │ 管理后台 │ │ Flutter APP │ │
│ │ (React) │ │ (React) │ │ │ │
│ └──────┬──────┘ └──────┬──────┘ └────────┬────────┘ │
└─────────┼────────────────┼──────────────────┼──────────┘
│ │ │
└────────────────┴──────────────────┘
│
┌────────┴────────┐
│ API Gateway │ ← 统一入口、鉴权、限流
│ (Spring Cloud)│
└────────┬────────┘
│
┌────────────────────┼────────────────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ 用户服务 │ │ 商品服务 │ │ 订单服务 │
│ (User) │ │(Product)│ │ (Order) │
└────┬────┘ └────┬────┘ └────┬────┘
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ 购物车 │ │ 分类服务 │ │ 支付服务 │
│ (Cart) │ │(Category)│ │(Payment)│
└─────────┘ └─────────┘ └─────────┘
2.2 服务划分
| 服务名 | 职责 | 关键技术 |
|---|---|---|
| gateway | API 网关 | Spring Cloud Gateway、限流、鉴权 |
| user-service | 用户管理 | JWT、OAuth2、短信登录 |
| product-service | 商品管理 | 商品 SKU、库存管理 |
| order-service | 订单处理 | 订单状态机、幂等性设计 |
| cart-service | 购物车 | Redis 缓存、合并逻辑 |
| payment-service | 支付中心 | 支付宝/微信接入、回调处理 |
| category-service | 商品分类 | 树形结构、层级缓存 |
| admin-service | 管理后台 | RBAC 权限、数据报表 |
| shop | Web 前端 | React、Ant Design |
三、核心技术亮点
3.1 分布式事务 - Seata TCC 模式
电商场景下,订单创建涉及库存扣减、优惠券使用等多个服务。采用 Seata TCC 模式保证数据一致性:
// TCC 三阶段:Try - Confirm - Cancel
@LocalTCC
public interface InventoryTccAction {
@TwoPhaseBusinessAction(name = "inventoryDeduct")
boolean tryDeduct(@BusinessActionContextParameter(paramName = "productId") Long productId,
@BusinessActionContextParameter(paramName = "count") Integer count);
boolean commit(BusinessActionContext context);
boolean rollback(BusinessActionContext context);
}
3.2 熔断限流 - Sentinel
防止雪崩效应,保护核心服务:
- QPS 限流:商品详情接口限流 1000 QPS
- 线程隔离:订单服务独立线程池
- 熔断降级:库存服务异常时返回默认库存
3.3 服务注册与配置中心 - Nacos
- 服务动态发现与注册
- 配置集中管理,支持热更新
- 命名空间隔离(开发/测试/生产)
3.4 API 网关统一入口
- 路由转发:根据路径路由到不同服务
- 统一鉴权:JWT Token 验证
- 限流控制:基于 Sentinel 的网关限流
架构设计亮点
四、数据库设计
4.1 分库分表策略
- 用户库:按用户 ID 分片
- 订单库:按时间维度分表(每月一表)
- 商品库:读写分离,主从同步
4.2 缓存策略
- Redis 缓存:商品详情、分类树
- 本地缓存:Caffeine 缓存热点数据
- 缓存一致性:Canal 监听 MySQL binlog 同步
五、部署架构
5.1 Docker Compose 一键部署
version: '3'
services:
gateway:
image: ecommerce/gateway:latest
ports:
- "8080:8080"
depends_on:
- nacos
- redis
- mysql
user-service:
image: ecommerce/user-service:latest
environment:
- NACOS_SERVER=nacos:8848
# ... 其他服务
5.2 环境隔离
- 开发环境:本地 Docker Compose
- 测试环境:独立命名空间
- 生产环境:K8s 集群部署(预留)
六、项目成果
✅ 已完成功能
- 完整的用户注册/登录体系(手机号+验证码)
- 商品管理(SPU/SKU、库存、上下架)
- 购物车(增删改查、全选、合并)
- 订单系统(创建、支付、发货、收货、退款)
- 支付接入(支付宝沙箱环境)
- 管理后台(商品/订单/用户管理、数据报表)
✅ 技术亮点
- 微服务架构,服务独立部署
- 分布式事务保证数据一致性
- 多级缓存提升性能
- 熔断限流保障稳定性
七、总结与展望
本项目从零搭建了一个完整的电商微服务系统,通过服务拆分解决了单体应用的扩展性问题。在实际开发中,我们深刻体会到:
- 服务粒度:不宜过细,避免分布式事务复杂度
- 监控告警:微服务需要完善的链路追踪和监控
- 团队协作:API 契约管理很重要
技术交流:欢迎在评论区交流微服务架构设计心得!