快易惠话费充值系统
java技术负责人
项目介绍:
快易惠话费充值系统为公司主营业务,由推单系统和配单系统两个项目组合使用,同时给三方渠道商提供对接接口。其中推单项目对接话费渠道商(提供用户话费充值订单),配单项目对接运营商(提供支付凭证)和支付商户(进行话费充值),话费充值成功后支付商户将订单回调我们的推单系统和配单系统,然后通知渠道商话费充值成功;由于充话费业务的特殊性,月初月末都会有较大单量,最高Tps500,峰值Qps2000
我的职责:
负责项目开发,解决项目遇到的并发问题,主导业务设计和数据库设计
利用ReentrantLock+自旋锁机制(三次自旋兜底)解决RefreshToken重复刷新问题,后续迭代为Redisson分布式锁,从根本上节约项目成本(刷新Token需要收费)
使用Redis的Hash结构存储系统参数(灵活配置的信息),话费订单充值需要拉取支付凭证,使用LIst结构存储支付凭证,使用左进左出策略防止拉取的支付凭证都是过期凭证,使用Set结构来保证订单的幂等性,解决订单重复提交问题
解决项目中遇到的锁表死锁问题,将批量update时根据订单号排序升级为热点数据垂直分表,避免了业务对代码的侵入性,提升了系统的可维护性解决因为网络抖动造成的线程池任务堆积进而产生连锁反应的OOM问题,提高了系统的稳定性;定时扫描订单状态,使用RocketMQ延迟消息处理超时订单,防止失败订单堆积
由于每月订单都会有百万左右的数据,导致数据库性能急剧下降,所以每个月订单表都会进行数据归档操作,只保留当月的数据,使得数据库查速度提升了50%