# Miaosha **Repository Path**: baoyulei/miaosha ## Basic Information - **Project Name**: Miaosha - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-22 - **Last Updated**: 2025-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 秒杀通 - 高性能秒杀系统 ## 项目简介 秒杀通是一个基于微服务架构的高并发秒杀系统,旨在解决电商场景中高并发秒杀业务的技术挑战。系统通过一系列优化措施,能够在单机环境下实现2000-3000 QPS的秒杀处理能力,平均响应时间控制在50ms以内,99%响应时间在100ms以内。 ## 技术栈 - **后端框架**: Spring Boot 3.5.3 - **数据库**: MySQL 8.0 - **缓存**: Redis 6.x - **RPC框架**: 基于Netty自研RPC框架 - **ORM框架**: MyBatis-Plus 3.5.5 - **JSON处理**: FastJSON2 2.0.53 - **工具库**: Hutool 5.8.25 - **AI框架**: Spring AI 1.0 (集成Ollama) - **其他**: Lombok 1.18.30 ## 核心功能 ### 1. 微服务架构 - 网关服务:负责路由转发和权限校验 - 用户服务:处理用户注册、登录等用户相关功能 - 商品服务:管理商品信息和库存 - 订单服务:处理订单创建和状态管理 - 日志服务:提供高性能异步日志处理 - AI服务:集成AI分析能力 ### 2. 高并发处理优化 - 多层限流策略:网关层、服务层、接口层三级限流 - Redis缓存预扣减:将库存放在Redis中预扣减,大幅降低数据库压力 - 分布式锁:基于Redis实现的分布式锁,防止超卖 - 异步处理:订单创建等耗时操作异步化,提升响应速度 ### 3. 分布式事务处理 - 基于Redis原子操作 + 可靠消息表 + 消息队列的最终一致性方案 - 通过定时任务扫描消息表,发送消息到消息队列 - 实现消息重试机制确保远程事务最终执行成功 ### 4. 高性能日志系统 - 异步批量日志处理机制,降低对主业务流程的影响 - 支持多目的地输出(控制台、文件、数据库) - 钩子机制支持AI日志分析扩展 ### 5. AI智能分析 - 集成AI分析模块,提供日志智能分析、异常检测、性能分析等功能 - 通过AI分析钩子与日志处理模块解耦集成 ## 性能表现 在单机环境下(配置:Intel i7-9750H CPU @ 2.60GHz,16GB内存),经过压力测试和优化,系统可以达到以下性能指标: | 接口类型 | QPS | 平均响应时间 | 99%响应时间 | |---------|-----|-------------|------------| | 普通查询接口 | 5000-8000 | < 20ms | < 50ms | | 秒杀接口 | 2000-3000 | < 50ms | < 100ms | ### Docker容器化部署性能估算 在基于Docker的容器化部署环境中,假设部署配置如下: - 网关服务:1个容器实例 - 用户、商品、订单服务:各2个容器实例 - Redis:2个实例 - MySQL:2个实例 - 总内存:32GB(实际Docker分配) 在这种部署环境下,系统性能将有显著提升: | 接口类型 | QPS | 平均响应时间 | 99%响应时间 | |---------|-----|-------------|------------| | 普通查询接口 | 15000-25000 | < 15ms | < 30ms | | 秒杀接口 | 8000-12000 | < 25ms | < 50ms | 性能提升原因: 1. **服务水平扩展**:用户、商品、订单服务均部署了2个实例,通过负载均衡分发请求,有效提升整体处理能力 2. **数据库读写分离**:MySQL部署2个实例,可实现主从复制和读写分离,提升数据库处理能力 3. **缓存集群部署**:Redis部署2个实例,可分片存储热点数据,提升缓存访问性能 4. **资源隔离**:每个服务独立部署在容器中,避免资源争用,提升系统稳定性 ## 系统架构图 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ API Gateway │ └─────────────────────────────────────────────────────────────────────┘ │ ┌───────────────────────────┼───────────────────────────┐ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ User Service │ │ Product Service │ │ Order Service │ │ (2 instances) │ │ (2 instances) │ │ (2 instances) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ RPC Framework│◄────►│ RPC Framework│◄────►│ RPC Framework│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Redis Cluster │ │ MySQL 8.0 │ │ Message Queue │ │ (2 instances) │ │ (2 instances) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Log Service │ │ AI Service │ │ Monitor System │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` ## 快速开始 ### 环境准备 1. JDK 17 2. Maven 3.11.0 3. MySQL 8.0 4. Redis 6.x ### 项目构建 ```bash mvn clean package ``` ### 数据库初始化 执行 [init_data.sql](init_data.sql) 文件初始化数据库表结构和基础数据 ### 配置修改 修改各服务模块下的 `application.yml` 文件,配置数据库和Redis连接信息 ### 启动服务 1. 启动 Redis 服务 2. 启动 MySQL 服务 3. 依次启动各微服务模块: - miaosha-user-provider - miaosha-product-provider - miaosha-order-provider - miaosha-gateway ## 项目亮点 ### 1. 自研分布式锁 基于Redis实现类似Redisson的分布式锁,保证库存扣减的原子性,防止超卖 ### 2. 多层限流策略 在网关层、服务层、接口层均设置相应的限流措施,采用滑动窗口算法有效防止系统被冲垮 ### 3. 可靠消息表机制 通过可靠消息表和消息队列确保分布式事务的最终一致性 ### 4. 分布式链路追踪 实现完整的分布式链路追踪功能,支持基于TraceId的请求链路查询 ### 5. 自定义RPC框架 基于Netty实现服务间通信,深入理解分布式通信原理 ## 项目结构 ``` MiaoShaFrame ├── miaosha-common // 公共模块 ├── miaosha-gateway // 网关模块 ├── miaosha-user-provider // 用户服务 ├── miaosha-product-provider// 商品服务 ├── miaosha-order-provider // 订单服务 ├── miaosha-rpc // RPC框架 ├── miaosha-log // 日志模块 ├── miaosha-ai // AI模块 ├── init_data.sql // 数据库初始化脚本 └── README.md // 项目说明文档 ``` ## 性能测试方法 ### 压力测试工具 推荐使用 JMeter 或 wrk 进行压力测试 ### 测试指标 - QPS(每秒查询数) - 响应时间(平均响应时间、95%响应时间、99%响应时间) - 吞吐量 - 错误率 ### 测试环境 - CPU: Intel i7-9750H @ 2.60GHz - 内存: 16GB - JVM参数: -Xms2g -Xmx2g -XX:+UseG1GC ### 测试脚本示例(wrk) ```bash # 普通查询接口测试 wrk -t12 -c100 -d30s --timeout 10s http://localhost:8080/api/product/list # 秒杀接口测试 wrk -t12 -c100 -d30s --timeout 10s -s seckill.lua http://localhost:8080/api/order/seckill ``` ## 优化建议 ### 数据库优化 1. 合理设计索引 2. 使用连接池 3. 读写分离 ### 缓存优化 1. 合理设置缓存过期时间 2. 使用多级缓存 3. 缓存预热 ### JVM优化 1. 合理设置堆内存大小 2. 选择合适的垃圾收集器 3. 调整GC参数 ### 网络优化 1. 使用长连接 2. 减少网络传输数据量 3. 使用压缩传输 ## 联系方式 如有任何问题或建议,请联系项目维护者。