架构师之路--高并发系统架构设计实战
系列导读本篇将深入讲解高并发系统架构设计的核心原理与实战经验帮助架构师构建稳定、高效的高并发系统。文章目录一、高并发系统概述1.1 什么是高并发1.2 高并发面临的挑战二、高并发核心指标2.1 性能指标2.2 稳定性指标三、架构设计原则3.1 核心设计原则3.2 高并发设计原则四、分层架构设计4.1 经典分层架构4.2 各层职责五、高并发核心策略5.1 缓存策略5.2 限流策略5.3 熔断降级策略5.4 异步处理策略六、实战案例分析6.1 秒杀系统架构6.2 核心代码实现总结一、高并发系统概述1.1 什么是高并发高并发是指系统在短时间内遇到大量请求需要同时处理多个任务的能力。┌─────────────────────────────────────────────────────────────┐ │ 高并发场景特征 │ ├─────────────────────────────────────────────────────────────┤ │ 大量请求QPS 达到万级甚至百万级 │ │ ⚡ 突发流量秒杀、抢购等场景流量激增 │ │ 并发处理多用户同时操作共享资源 │ │ ⏱️ 低延迟用户对响应时间要求高 │ └─────────────────────────────────────────────────────────────┘1.2 高并发面临的挑战挑战说明解决思路性能瓶颈单机资源有限水平扩展、分布式数据一致性分布式事务复杂最终一致性、分布式锁系统稳定性流量洪峰导致宕机限流、熔断、降级资源竞争并发访问共享资源缓存、队列、锁机制二、高并发核心指标2.1 性能指标指标说明优秀标准QPS每秒查询数 10000TPS每秒事务数 5000RT响应时间 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 缓存策略// 多级缓存架构publicclassMultiLevelCache{// L1: 本地缓存privateCachelocalCacheCaffeine.newBuilder().maximumSize(10000).expireAfterWrite(5,TimeUnit.MINUTES).build();// L2: 分布式缓存AutowiredprivateRedisTemplateredisTemplate;// L3: 数据库AutowiredprivateUserRepositoryuserRepository;publicUsergetUser(Longid){// 1. 查本地缓存UseruserlocalCache.getIfPresent(id);if(user!null)returnuser;// 2. 查Redisuser(User)redisTemplate.opsForValue().get(user:id);if(user!null){localCache.put(id,user);returnuser;}// 3. 查数据库useruserRepository.findById(id);if(user!null){redisTemplate.opsForValue().set(user:id,user,30,TimeUnit.MINUTES);localCache.put(id,user);}returnuser;}}5.2 限流策略// 令牌桶限流publicclassTokenBucketLimiter{privatefinallongcapacity;// 桶容量privatefinallongrate;// 令牌生成速率privatelongtokens;// 当前令牌数privatelonglastRefillTime;// 上次填充时间publicsynchronizedbooleantryAcquire(){refillTokens();if(tokens0){tokens--;returntrue;}returnfalse;}privatevoidrefillTokens(){longnowSystem.currentTimeMillis();longtokensToAdd(now-lastRefillTime)*rate/1000;tokensMath.min(capacity,tokenstokensToAdd);lastRefillTimenow;}}// 滑动窗口限流publicclassSlidingWindowLimiter{privatefinallongmaxRequests;privatefinallongwindowSizeMs;privatefinalQueueLongrequestTimesnewLinkedList();publicsynchronizedbooleantryAcquire(){longnowSystem.currentTimeMillis();longwindowStartnow-windowSizeMs;// 移除过期请求while(!requestTimes.isEmpty()requestTimes.peek()windowStart){requestTimes.poll();}if(requestTimes.size()maxRequests){requestTimes.offer(now);returntrue;}returnfalse;}}5.3 熔断降级策略// 熔断器实现publicclassCircuitBreaker{privateenumState{CLOSED,OPEN,HALF_OPEN}privateStatestateState.CLOSED;privateintfailureCount0;privatefinalintfailureThreshold5;privatefinallongtimeout30000;// 30秒privatelonglastFailureTime;publicTTexecute(SupplierTsupplier){if(stateState.OPEN){if(System.currentTimeMillis()-lastFailureTimetimeout){stateState.HALF_OPEN;}else{thrownewCircuitBreakerException(熔断器已打开);}}try{Tresultsupplier.get();onSuccess();returnresult;}catch(Exceptione){onFailure();throwe;}}privatevoidonSuccess(){failureCount0;stateState.CLOSED;}privatevoidonFailure(){failureCount;lastFailureTimeSystem.currentTimeMillis();if(failureCountfailureThreshold){stateState.OPEN;}}}5.4 异步处理策略// 消息队列异步处理ServicepublicclassOrderService{AutowiredprivateRabbitTemplaterabbitTemplate;// 下单 - 异步处理库存扣减publicvoidcreateOrder(Orderorder){// 1. 创建订单orderRepository.save(order);// 2. 异步扣减库存rabbitTemplate.convertAndSend(order.exchange,stock.deduct,order);// 3. 异步发送通知rabbitTemplate.convertAndSend(order.exchange,notification.send,order);}}// 消费者处理ComponentpublicclassStockConsumer{RabbitListener(queuesstock.queue)publicvoiddeductStock(Orderorder){stockService.deduct(order.getProductId(),order.getQuantity());}}六、实战案例分析6.1 秒杀系统架构┌─────────────────────────────────────────────────────────────┐ │ 秒杀系统架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 用户请求 ──► CDN ──► Nginx ──► 网关 ──► 秒杀服务 │ │ │ │ │ ▼ │ │ Redis 预减库存 │ │ │ │ │ ▼ │ │ MQ 异步下单 │ │ │ │ │ ▼ │ │ 数据库持久化 │ │ │ └─────────────────────────────────────────────────────────────┘6.2 核心代码实现// 秒杀核心逻辑ServicepublicclassSeckillService{AutowiredprivateStringRedisTemplateredisTemplate;AutowiredprivateRabbitTemplaterabbitTemplate;// 预热将库存加载到RedispublicvoidprepareSeckill(LongproductId,intstock){redisTemplate.opsForValue().set(seckill:stock:productId,String.valueOf(stock));}// 秒杀Redis原子操作预减库存publicResultdoSeckill(LonguserId,LongproductId){// 1. 检查是否重复购买BooleanisMemberredisTemplate.opsForSet().isMember(seckill:users:productId,userId);if(isMember){returnResult.fail(不能重复购买);}// 2. 预减库存原子操作LongstockredisTemplate.opsForValue().decrement(seckill:stock:productId);if(stock0){redisTemplate.opsForValue().increment(seckill:stock:productId);returnResult.fail(库存不足);}// 3. 记录购买用户redisTemplate.opsForSet().add(seckill:users:productId,userId);// 4. 异步创建订单SeckillMessagemessagenewSeckillMessage(userId,productId);rabbitTemplate.convertAndSend(seckill.queue,message);returnResult.success(排队中请稍后查询结果);}}总结本文我们介绍了✅高并发概述定义、特征、挑战✅核心指标QPS、TPS、RT、可用性✅设计原则单一职责、无状态、异步处理✅分层架构客户端、网关、应用、数据层✅核心策略缓存、限流、熔断、异步✅实战案例秒杀系统架构设计下篇预告微服务架构从入门到落地作者刘~浪地球系列架构设计一更新时间2026-04-07