架构师之路--高并发系统架构设计实战

系列导读:本篇将深入讲解高并发系统架构设计的核心原理与实战经验,帮助架构师构建稳定、高效的高并发系统。


文章目录

    • 一、高并发系统概述
      • [1.1 什么是高并发?](#1.1 什么是高并发?)
      • [1.2 高并发面临的挑战](#1.2 高并发面临的挑战)
    • 二、高并发核心指标
      • [2.1 性能指标](#2.1 性能指标)
      • [2.2 稳定性指标](#2.2 稳定性指标)
    • 三、架构设计原则
      • [3.1 核心设计原则](#3.1 核心设计原则)
      • [3.2 高并发设计原则](#3.2 高并发设计原则)
    • 四、分层架构设计
      • [4.1 经典分层架构](#4.1 经典分层架构)
      • [4.2 各层职责](#4.2 各层职责)
    • 五、高并发核心策略
      • [5.1 缓存策略](#5.1 缓存策略)
      • [5.2 限流策略](#5.2 限流策略)
      • [5.3 熔断降级策略](#5.3 熔断降级策略)
      • [5.4 异步处理策略](#5.4 异步处理策略)
    • 六、实战案例分析
      • [6.1 秒杀系统架构](#6.1 秒杀系统架构)
      • [6.2 核心代码实现](#6.2 核心代码实现)
    • 总结

一、高并发系统概述

1.1 什么是高并发?

高并发是指系统在短时间内遇到大量请求,需要同时处理多个任务的能力。

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    高并发场景特征                            │
├─────────────────────────────────────────────────────────────┤
│  🌊 大量请求:QPS 达到万级甚至百万级                         │
│  ⚡ 突发流量:秒杀、抢购等场景流量激增                       │
│  🔄 并发处理:多用户同时操作共享资源                         │
│  ⏱️ 低延迟:用户对响应时间要求高                             │
└─────────────────────────────────────────────────────────────┘

1.2 高并发面临的挑战

挑战 说明 解决思路
性能瓶颈 单机资源有限 水平扩展、分布式
数据一致性 分布式事务复杂 最终一致性、分布式锁
系统稳定性 流量洪峰导致宕机 限流、熔断、降级
资源竞争 并发访问共享资源 缓存、队列、锁机制

二、高并发核心指标

2.1 性能指标

指标 说明 优秀标准
QPS 每秒查询数 > 10000
TPS 每秒事务数 > 5000
RT 响应时间 < 100ms
并发数 同时处理请求数 根据业务定
成功率 请求成功比例 > 99.9%

2.2 稳定性指标

指标 说明 优秀标准
可用性 系统正常运行时间占比 > 99.99%
MTBF 平均故障间隔时间 越长越好
MTTR 平均恢复时间 < 5分钟

三、架构设计原则

3.1 核心设计原则

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    架构设计黄金法则                          │
├─────────────────────────────────────────────────────────────┤
│  1. 单一职责:每个组件只做一件事                             │
│  2. 开闭原则:对扩展开放,对修改关闭                         │
│  3. 依赖倒置:高层不依赖底层,都依赖抽象                     │
│  4. 接口隔离:接口要小而专一                                 │
│  5. 迪米特法则:最少知识原则                                 │
└─────────────────────────────────────────────────────────────┘

3.2 高并发设计原则

原则 说明
无状态设计 服务节点无状态,便于水平扩展
服务拆分 大系统拆小服务,独立部署扩展
异步处理 非核心流程异步化,提升吞吐
缓存优先 多级缓存减少数据库压力
限流熔断 保护系统不被流量打垮

四、分层架构设计

4.1 经典分层架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      客户端层                               │
│              (Web/App/小程序/PC客户端)                       │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      网关层                                 │
│           (Nginx/Kong/APISIX/负载均衡)                      │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      应用层                                 │
│              (微服务集群/API服务)                            │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                      数据层                                 │
│           (MySQL/Redis/MongoDB/ES)                          │
└─────────────────────────────────────────────────────────────┘

4.2 各层职责

层级 职责 技术选型
客户端层 用户交互、请求发起 Vue/React/Flutter
网关层 路由、限流、认证 Nginx/Kong/APISIX
应用层 业务逻辑处理 Spring Cloud/Go
数据层 数据存储与查询 MySQL/Redis/ES

五、高并发核心策略

5.1 缓存策略

java 复制代码
// 多级缓存架构
public class MultiLevelCache {
    
    // L1: 本地缓存
    private Cache localCache = Caffeine.newBuilder()
        .maximumSize(10000)
        .expireAfterWrite(5, TimeUnit.MINUTES)
        .build();
    
    // L2: 分布式缓存
    @Autowired
    private RedisTemplate redisTemplate;
    
    // L3: 数据库
    @Autowired
    private UserRepository userRepository;
    
    public User getUser(Long id) {
        // 1. 查本地缓存
        User user = localCache.getIfPresent(id);
        if (user != null) return user;
        
        // 2. 查Redis
        user = (User) redisTemplate.opsForValue()
            .get("user:" + id);
        if (user != null) {
            localCache.put(id, user);
            return user;
        }
        
        // 3. 查数据库
        user = userRepository.findById(id);
        if (user != null) {
            redisTemplate.opsForValue()
                .set("user:" + id, user, 30, TimeUnit.MINUTES);
            localCache.put(id, user);
        }
        return user;
    }
}

5.2 限流策略

java 复制代码
// 令牌桶限流
public class TokenBucketLimiter {
    
    private final long capacity;      // 桶容量
    private final long rate;          // 令牌生成速率
    private long tokens;              // 当前令牌数
    private long lastRefillTime;      // 上次填充时间
    
    public synchronized boolean tryAcquire() {
        refillTokens();
        if (tokens > 0) {
            tokens--;
            return true;
        }
        return false;
    }
    
    private void refillTokens() {
        long now = System.currentTimeMillis();
        long tokensToAdd = (now - lastRefillTime) * rate / 1000;
        tokens = Math.min(capacity, tokens + tokensToAdd);
        lastRefillTime = now;
    }
}

// 滑动窗口限流
public class SlidingWindowLimiter {
    
    private final long maxRequests;
    private final long windowSizeMs;
    private final Queue<Long> requestTimes = new LinkedList<>();
    
    public synchronized boolean tryAcquire() {
        long now = System.currentTimeMillis();
        long windowStart = now - windowSizeMs;
        
        // 移除过期请求
        while (!requestTimes.isEmpty() 
               && requestTimes.peek() < windowStart) {
            requestTimes.poll();
        }
        
        if (requestTimes.size() < maxRequests) {
            requestTimes.offer(now);
            return true;
        }
        return false;
    }
}

5.3 熔断降级策略

java 复制代码
// 熔断器实现
public class CircuitBreaker {
    
    private enum State { CLOSED, OPEN, HALF_OPEN }
    
    private State state = State.CLOSED;
    private int failureCount = 0;
    private final int failureThreshold = 5;
    private final long timeout = 30000; // 30秒
    private long lastFailureTime;
    
    public <T> T execute(Supplier<T> supplier) {
        if (state == State.OPEN) {
            if (System.currentTimeMillis() - lastFailureTime > timeout) {
                state = State.HALF_OPEN;
            } else {
                throw new CircuitBreakerException("熔断器已打开");
            }
        }
        
        try {
            T result = supplier.get();
            onSuccess();
            return result;
        } catch (Exception e) {
            onFailure();
            throw e;
        }
    }
    
    private void onSuccess() {
        failureCount = 0;
        state = State.CLOSED;
    }
    
    private void onFailure() {
        failureCount++;
        lastFailureTime = System.currentTimeMillis();
        if (failureCount >= failureThreshold) {
            state = State.OPEN;
        }
    }
}

5.4 异步处理策略

java 复制代码
// 消息队列异步处理
@Service
public class OrderService {
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    // 下单 - 异步处理库存扣减
    public void createOrder(Order order) {
        // 1. 创建订单
        orderRepository.save(order);
        
        // 2. 异步扣减库存
        rabbitTemplate.convertAndSend(
            "order.exchange", 
            "stock.deduct", 
            order
        );
        
        // 3. 异步发送通知
        rabbitTemplate.convertAndSend(
            "order.exchange", 
            "notification.send", 
            order
        );
    }
}

// 消费者处理
@Component
public class StockConsumer {
    
    @RabbitListener(queues = "stock.queue")
    public void deductStock(Order order) {
        stockService.deduct(order.getProductId(), order.getQuantity());
    }
}

六、实战案例分析

6.1 秒杀系统架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    秒杀系统架构                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  用户请求 ──► CDN ──► Nginx ──► 网关 ──► 秒杀服务          │
│                                            │                │
│                                            ▼                │
│                                       Redis 预减库存        │
│                                            │                │
│                                            ▼                │
│                                       MQ 异步下单           │
│                                            │                │
│                                            ▼                │
│                                       数据库持久化          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

6.2 核心代码实现

java 复制代码
// 秒杀核心逻辑
@Service
public class SeckillService {
    
    @Autowired
    private StringRedisTemplate redisTemplate;
    
    @Autowired
    private RabbitTemplate rabbitTemplate;
    
    // 预热:将库存加载到Redis
    public void prepareSeckill(Long productId, int stock) {
        redisTemplate.opsForValue()
            .set("seckill:stock:" + productId, String.valueOf(stock));
    }
    
    // 秒杀:Redis原子操作预减库存
    public Result doSeckill(Long userId, Long productId) {
        // 1. 检查是否重复购买
        Boolean isMember = redisTemplate.opsForSet()
            .isMember("seckill:users:" + productId, userId);
        if (isMember) {
            return Result.fail("不能重复购买");
        }
        
        // 2. 预减库存(原子操作)
        Long stock = redisTemplate.opsForValue()
            .decrement("seckill:stock:" + productId);
        if (stock < 0) {
            redisTemplate.opsForValue()
                .increment("seckill:stock:" + productId);
            return Result.fail("库存不足");
        }
        
        // 3. 记录购买用户
        redisTemplate.opsForSet()
            .add("seckill:users:" + productId, userId);
        
        // 4. 异步创建订单
        SeckillMessage message = new SeckillMessage(userId, productId);
        rabbitTemplate.convertAndSend("seckill.queue", message);
        
        return Result.success("排队中,请稍后查询结果");
    }
}

总结

本文我们介绍了:

高并发概述 :定义、特征、挑战

核心指标 :QPS、TPS、RT、可用性

设计原则 :单一职责、无状态、异步处理

分层架构 :客户端、网关、应用、数据层

核心策略 :缓存、限流、熔断、异步

实战案例:秒杀系统架构设计

下篇预告微服务架构从入门到落地


作者 :刘~浪地球
系列 :架构设计(一)
更新时间:2026-04-07

相关推荐
safestar201221 小时前
Agent系统架构中的「注意力聚焦模式」:从理论到工程实践
人工智能·ai·系统架构·ai编程
__土块__3 天前
一次会员积分系统改造复盘:从本地缓存到多级缓存的架构演进
redis·性能优化·系统架构·caffeine·多级缓存·缓存一致性·本地缓存
宁波阿成4 天前
族谱管理系统架构分析与亮点总结
java·系统架构·vue·ruoyi-vue·族谱
全栈技术负责人4 天前
Claw Code 系统架构与 Agent 运行机制解析
前端·系统架构·ai编程
寰宇的行者4 天前
软考高级系统架构设计师 | SOA核心考点全解析:从原理到案例,附记忆口诀与真题
系统架构
roman_日积跬步-终至千里4 天前
【后端】业务逻辑与应用逻辑:构建可维护软件的关键分离
系统架构
半夏映浮光5 天前
系统架构设计师知识点41-60
系统架构