由于公司业务扩展,需要对接话费充值运营商,开发一套话费充值系统来扩展公司业务。该系统由推单系统和配单系统两个项目组使用,同时给三方渠道商提供对接接口。最高Tps300,峰值Qps700。
1. 充值请求处理
功能描述:接收渠道商通过API发起的话费充值请求,验证参数(如手机号、金额),快速生成订单。
特点:
支持高并发请求,QPS峰值700,响应时间控制在几十毫秒。
验证渠道商身份(通过API密钥)和业务规则(如金额范围10-1000元)。
使用Redis Set防止重复订单,确保幂等性。
业务价值:为渠道商提供稳定、快速的充值入口,提升用户体验。
2. 订单生成与管理
功能描述:生成唯一订单,存储订单信息(订单ID、手机号、金额、状态等),支持订单查询和状态更新。
特点:
订单按月分表(orders_YYYYMM),降低单表压力。
提供管理后台,支持按渠道、时间等条件查询订单,优化深分页性能。
业务价值:确保订单数据一致,方便渠道商和管理员跟踪充值状态。
3. 运营商对接与充值
功能描述:通过配单系统对接运营商接口,拉取支付凭证(Token,有效期30分钟),完成话费充值。
特点:
使用ReentrantLock和Redisson分布式锁防止重复拉取Token。
支持异步重试(最多3次),提高充值成功率至95%。
支付凭证存储在Redis List,快速读取和消费。
业务价值:高效对接运营商,确保充值快速到账。
4. 记账与财务管理
功能描述:记录每笔订单的流水信息(金额、渠道费用等),支持财务对账和审计。
特点:
异步批量记账(每批100条),性能提升5倍。
渠道费率(0.5%-1%)存储在Redis Hash,动态计算。
流水表按月分表(transactions_YYYYMM),支持长期归档。
业务价值:提供准确的财务数据,支持渠道商与平台的对账。
5. 异步回调通知
功能描述:充值完成后,通过回调URL异步通知渠道商结果(成功/失败)。
特点:
使用RabbitMQ解耦通知流程,回调响应时间低至毫秒级。
支持失败重试(最多3次),确保通知可靠送达。
业务价值:及时更新渠道商前端,增强用户体验。
6. 失败重试机制
功能描述:处理支付失败的订单,自动触发重试(最多3次),并记录失败原因。
特点:
失败订单存储在Redis List和MySQL(failed_orders表),支持批量重试。
使用RabbitMQ延迟队列实现异步重试,降低系统压力。
业务价值:提高充值成功率,减少人工干预。
7. 管理后台
功能描述:提供管理员界面,查看订单、流水、统计报表,管理渠道商配置。
特点:
报表查询使用Redis预 ascent
System: 缓存预聚合,查询时间从秒级降到毫秒级(简历中提到)。
支持深分页优化,管理员可快速查询历史订单。
业务价值:便于运维管理和业务分析,提升运营效率。
系统架构
1. 技术栈
后端框架:SpringBoot(RESTful API、依赖注入、事务管理)。
数据库:MySQL(分表设计,索引优化)。
缓存:Redis(存储订单、配置、支付凭证)、Caffeine(本地缓存)。
消息队列:RabbitMQ(异步处理记账、回调、重试)。
分布式锁:Redisson(基于Redis,控制并发)。
日志:Logback(记录请求和错误)。
测试工具:APIfox(接口性能测试)。
2. 模块划分
推单系统:接收渠道商API请求,验证参数,生成订单。
配单系统:对接运营商,拉取支付凭证,完成充值。
核心业务模块:异步处理记账、失败重试、回调通知。
管理后台:提供订单查询、报表统计、配置管理。
核心实现方案
1. 高并发API处理
实现:
使用SpringBoot RESTful API,Nginx负载均衡处理QPS 700。
参数校验(Spring Validation)和Redis Set(order_set)防止重复订单。
热点配置(如费率)存储在Caffeine+Redis多级缓存,响应时间降至几十毫秒。
效果:
支持高并发请求,QPS峰值700,接口稳定运行。
2. 订单生成与存储
实现:
订单存储在MySQL(orders_YYYYMM表),按月分表。
使用MyBatis-Plus批量插入(每批100条),性能提升5倍。
复合索引(channel_id, create_time)和游标分页优化查询。
Spring事务(@Transactional)确保订单和流水一致性。
效果:
订单生成和查询效率高,深分页查询从秒级降到毫秒级。
3. 运营商对接
实现:
配单系统通过HttpClient调用运营商接口,拉取支付凭证(Token,30分钟有效)。
使用ReentrantLock