系列导读:本篇将深入讲解电商系统的架构设计与核心实现。
文章目录
目录
一、电商系统概述
1.1 业务架构
┌─────────────────────────────────────────────────────────────┐
│ 电商业务架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 用户中心:注册、登录、会员 │
│ 商品中心:商品、库存、分类 │
│ 订单中心:下单、支付、退款 │
│ 营销中心:优惠券、活动、秒杀 │
│ 物流中心:发货、配送、签收 │
│ │
└─────────────────────────────────────────────────────────────┘
1.2 技术架构
┌─────────────────────────────────────────────────────────────┐
│ 电商技术架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 网关层 │ │
│ │ Nginx + Kong / APISIX │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 应用层 │ │
│ │ 用户服务 │ 商品服务 │ 订单服务 │ 支付服务 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 数据层 │ │
│ │ MySQL │ Redis │ ES │ MongoDB │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
二、核心架构设计
2.1 微服务拆分
电商微服务拆分:
用户服务 (user-service)
├── 用户注册/登录
├── 用户信息管理
└── 会员等级
商品服务 (product-service)
├── 商品管理
├── 库存管理
└── 分类管理
订单服务 (order-service)
├── 订单创建
├── 订单查询
└── 订单状态管理
支付服务 (payment-service)
├── 支付处理
├── 退款处理
└── 支付渠道管理
营销服务 (marketing-service)
├── 优惠券
├── 活动
└── 秒杀
2.2 数据库设计
sql
-- 用户表
CREATE TABLE user (
id BIGINT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL,
phone VARCHAR(20),
email VARCHAR(100),
level INT DEFAULT 1,
create_time DATETIME
);
-- 商品表
CREATE TABLE product (
id BIGINT PRIMARY KEY,
name VARCHAR(200) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT NOT NULL,
category_id BIGINT,
status INT DEFAULT 1,
create_time DATETIME
);
-- 订单表
CREATE TABLE `order` (
id BIGINT PRIMARY KEY,
order_no VARCHAR(50) NOT NULL,
user_id BIGINT NOT NULL,
total_amount DECIMAL(10,2) NOT NULL,
status INT DEFAULT 0,
create_time DATETIME
);
-- 订单明细表
CREATE TABLE order_item (
id BIGINT PRIMARY KEY,
order_id BIGINT NOT NULL,
product_id BIGINT NOT NULL,
product_name VARCHAR(200),
price DECIMAL(10,2),
quantity INT,
create_time DATETIME
);
三、关键模块设计
3.1 订单模块
java
// 订单服务
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private StockService stockService;
@Autowired
private MQProducer mqProducer;
@Transactional
public Order createOrder(OrderDTO dto) {
// 1. 校验库存
for (OrderItemDTO item : dto.getItems()) {
if (!stockService.checkStock(item.getProductId(), item.getQuantity())) {
throw new BusinessException("库存不足");
}
}
// 2. 创建订单
Order order = new Order();
order.setOrderNo(generateOrderNo());
order.setUserId(dto.getUserId());
order.setStatus(OrderStatus.CREATED);
orderMapper.insert(order);
// 3. 扣减库存
for (OrderItemDTO item : dto.getItems()) {
stockService.deduct(item.getProductId(), item.getQuantity());
}
// 4. 发送订单创建消息
mqProducer.send("order.created", order);
return order;
}
}
3.2 库存模块
java
// 库存服务
@Service
public class StockService {
@Autowired
private StringRedisTemplate redisTemplate;
// 预扣库存
public boolean deductStock(Long productId, Integer quantity) {
String key = "stock:" + productId;
// Lua 脚本保证原子性
String script =
"if tonumber(redis.call('GET', KEYS[1])) >= tonumber(ARGV[1]) then " +
" redis.call('DECRBY', KEYS[1], ARGV[1]) " +
" return 1 " +
"else " +
" return 0 " +
"end";
Long result = redisTemplate.execute(
new DefaultRedisScript<>(script, Long.class),
Collections.singletonList(key),
String.valueOf(quantity)
);
return result != null && result == 1;
}
}
四、高并发解决方案
4.1 秒杀架构
┌─────────────────────────────────────────────────────────────┐
│ 秒杀架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 用户请求 ──► CDN ──► Nginx ──► 网关 ──► 秒杀服务 │
│ │ │
│ ▼ │
│ Redis 预减库存 │
│ │ │
│ ▼ │
│ MQ 异步下单 │
│ │ │
│ ▼ │
│ 数据库持久化 │
│ │
└─────────────────────────────────────────────────────────────┘
4.2 限流熔断
java
// 限流配置
@RateLimiter(value = 1000, timeout = 1, timeUnit = TimeUnit.SECONDS)
@PostMapping("/seckill/{id}")
public Result seckill(@PathVariable Long id) {
return seckillService.doSeckill(id);
}
// 熔断配置
@CircuitBreaker(name = "seckill", fallbackMethod = "seckillFallback")
public Result doSeckill(Long id) {
// 秒杀逻辑
}
public Result seckillFallback(Long id, Exception e) {
return Result.fail("系统繁忙,请稍后重试");
}
总结
✅ 电商系统概述 :业务架构、技术架构
✅ 核心架构设计 :微服务拆分、数据库设计
✅ 关键模块设计 :订单、库存
✅ 高并发解决方案:秒杀架构、限流熔断
下篇预告 :秒杀系统架构设计
作者 :刘~浪地球
系列 :技术选型与实战(二)
更新时间:2026-04-23