# tenthoundsqps-qry **Repository Path**: beautysunchensh/tenthoundsqps-qry ## Basic Information - **Project Name**: tenthoundsqps-qry - **Description**: 高性能订单查询系统,能够支持高达10万QPS的查询请求。 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-31 - **Last Updated**: 2025-10-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 高性能订单查询系统 (支持10万QPS) 本系统是一个专为外卖/电商场景设计的高性能订单查询系统,能够支持高达10万QPS的查询请求。 ## 系统架构特点 ### 1. 读写分离 + 分库分表 - 按用户ID哈希分为16个数据库 - 每个数据库包含16张订单表,实现水平分片 - 有效分散数据库压力,提升查询性能 ### 2. 多级缓存策略 - **本地缓存**: 使用Caffeine实现,缓存热点数据 - **分布式缓存**: 使用Redis实现,支持集群部署 - 缓存穿透、击穿、雪崩防护机制 ### 3. 冷热数据分离 - 3个月前的订单自动归档到历史库 - 前端入口分离,提升热数据查询效率 ### 4. Elasticsearch辅助搜索 - 订单ID、手机号、商户名等字段同步到ES - 支持全文检索和复杂条件查询 - 先通过ES查询订单ID,再批量查询Redis/DB ### 5. 限流熔断机制 - 使用Sentinel实现限流和熔断 - 数据库慢查询时自动降级,只查缓存 - 保障系统稳定性 ## 技术栈 - Spring Boot 2.7 (兼容JDK 8) - MyBatis Plus + ShardingSphere - Redis + Caffeine (多级缓存) - Elasticsearch 7.17 - Sentinel 1.8 - MySQL 8.0 - Kafka (异步消息处理) ## JDK版本要求 本项目已调整为兼容JDK 8环境: - 使用兼容JDK 8的依赖版本 - Caffeine版本降级为2.9.3以支持JDK 8 - Spring Boot 2.7版本完全兼容JDK 8 ## Elasticsearch数据同步机制 为了确保Elasticsearch中的订单数据与数据库保持一致,系统实现了多种数据同步机制: ### 1. 应用层同步 在订单创建、更新或删除时,直接同步数据到Elasticsearch: - 实时性强,数据一致性好 - 增加应用层处理负担 - 适用于对实时性要求高的场景 ### 2. Kafka异步同步 通过Kafka消息队列实现异步数据同步: - 解耦订单服务与ES同步服务 - 提高系统整体性能 - 支持批量处理和错误重试 ### 3. 批量同步 定时任务批量同步数据: - 确保数据最终一致性 - 修复数据不一致问题 - 支持全量和增量同步 ## 性能验证方案 ### JMeter阶梯压测 - 逐步增加并发用户数 - 监控响应时间和错误率 - 确定系统最大承载能力 ### Prometheus/Grafana监控 - JVM指标监控 - 数据库连接池状态 - 缓存命中率统计 - 接口响应时间分布 ## 部署架构 ``` 用户请求 -> 负载均衡(Nginx) -> 应用服务器集群(Spring Boot) | |-- 本地缓存(Caffeine) |-- 分布式缓存(Redis集群) |-- 数据库集群(16分库x16分表) |-- 搜索引擎(Elasticsearch) |-- 消息队列(Kafka) |-- 监控系统(Prometheus+Grafana) |-- 限流熔断(Sentinel) ``` ## API接口 ### 订单查询接口 - `GET /api/orders/{id}` - 根据订单ID查询详情 - `GET /api/orders/no/{orderNo}` - 根据订单号查询详情 - `GET /api/orders/user/{userId}` - 根据用户ID查询订单列表 ### 搜索接口 - `GET /api/orders/search/phone/{phone}` - 根据手机号搜索订单 - `GET /api/orders/search/merchant/{merchantName}` - 根据商户名搜索订单 ### 归档订单接口 - `GET /api/orders/archived/user/{userId}` - 查询归档订单 ## 配置说明 系统配置文件位于 `src/main/resources/application.yml`,主要配置项包括: 1. 数据库分片配置 2. Redis连接配置 3. Elasticsearch连接配置 4. Kafka连接配置 5. Sentinel限流规则配置 ## 性能优化要点 1. **数据库优化** - 合理的索引设计 - 分库分表减少单表数据量 - 读写分离减轻主库压力 2. **缓存优化** - 多级缓存减少数据库访问 - 合理设置缓存过期时间 - 缓存预热机制 3. **查询优化** - 批量查询减少网络开销 - 异步处理非核心业务 - 连接池优化 4. **JVM优化** - 合理设置堆内存大小 - GC参数调优 - 线程池配置优化 ## 部署指南 1. 准备16个MySQL数据库实例 2. 部署Redis集群 3. 部署Elasticsearch集群 4. 部署Kafka集群 5. 部署Sentinel控制台 6. 部署Prometheus和Grafana 7. 启动应用服务器集群 ## 压测方案 使用JMeter进行阶梯压测: 1. 从100并发用户开始 2. 每轮增加100并发用户 3. 监控响应时间、错误率、系统资源使用情况 4. 确定系统最大承载能力 监控指标: - 接口响应时间 < 50ms (99%请求) - 系统CPU使用率 < 80% - 内存使用率 < 80% - 数据库连接数 < 80% - 缓存命中率 > 95%