电商系统架构设计实战

系列导读:本篇将深入讲解电商系统的架构设计与核心实现。


文章目录


目录


一、电商系统概述

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

相关推荐
zhz52143 小时前
一个简单、轻量级且安全的离线GIS 系统架构设计
安全·系统架构·vue·gis·fastapi
Eyfcom18 小时前
快递管理系统:从“功能实现”到“人性化体验”与“客户洞察”的技术跃迁
c语言·系统架构·快递管理系统
mmWave&THz1 天前
技术解析:Bolicom-mmWave高速毫米波通信设备赋能港口机械智能化升级
网络·人工智能·系统架构·信息与通信·智能硬件
2603_954708311 天前
多能互补微电网:六大发展趋势,助力新型电力系统多能协同升级
人工智能·物联网·架构·系统架构·能源
mmWave&THz1 天前
传统微波IDU与数字IP微波ODU扩展单元(数字微波IDU)技术对比分析
大数据·运维·网络·tcp/ip·系统架构·信息与通信·智能硬件
剑飞的编程思维1 天前
系统架构评审报告(正式交付模板)
java·系统架构
C++ 老炮儿的技术栈1 天前
工业视觉检测:用 C++ 和 Snap7 库快速读写西门子 S7-1200
c语言·c++·git·qt·系统架构·visual studio·snap
2603_954708312 天前
如何确保微电网标准化架构设计流程的完整性?
网络·人工智能·物联网·架构·系统架构
pingao1413782 天前
物联网+边缘计算:新一代一体化水雨情监测系统架构解析
物联网·系统架构·边缘计算