关单改造图
2024-09-12 17:06:39 0 举报
关单流程改造
作者其他创作
大纲/内容
批量取数据
删除redis
失败改动点:此时mongoDb有问题,需要修改成存redis(补数据)。新起task扫描redis捞取全量数据存mongoDB,存入失败则直接通过redis消费处理业务
查询mongoDb中5天内过期订单
基于数据获取新的主键ID
成功
结束
查询MONGODB是否有数据
失败
改动点:去掉30s延时,因为要改成基于db去做主要的业务逻辑处理,而不是做兜底扫描了
存关单消息到mongodb
存mongoDB失败代表mongoDB出现了问题,此时redis可以接替mongoDB的工作直接处理业务发通知
存入redis
dubbo接口调用
发送消息到rabbitMQ
1-2 重构:redis(补DB)定时任务调度
存回到定时任务扫描redis进行重试
存回到redis(消息补发)
定时任务异步扫DB
2.重构前:mongoDb定时任务处理
定时任务异步扫redis(消息补发)
2-2:重构后:redis(消息补发定时任务)
看是否需要增加重试上限机制
2-1:重构后:mongoDb定时任务处理
问题:锁依赖redis,造成单点故障改动点:去掉redis锁,改成xxl-job分片调度,根据dbID分片
成功改动点:去掉mongodb保存成功存储redis这个动作
发送MQ
问题:主键生成依赖redisfont color=\"#e74f4c\
定时任务异步扫
更新mongoDB订单send状态为true
放入redis(消息补发)
问题:mongoDb只作为兜底扫描,不承担主要的量改动点:mongoDb作为主要任务扫描,如果涉及到跨库,需要判断是否是1号,根据定时任务扫描时间间隔切割查询范围
mongoDb数据关单时间延时30秒
dbID分片查询扫描时间范围内过期数据
是
存入redis(补DB)
注意:监控redis余量,如果超过5000条日志告警,并且不再接受数据
1.重构前:接口调入处
判断是否需要通知关单
否
返回失败
基于redis获取新的主键ID
删除redis的对应key
获取redis锁
扫描发送失败的数据
改动点:如果消费失败需要修改mongoDB状态,并发送到新的redis key中进行扫描消费
关单项目:升级springboot【2.7.18】包括:1. mongodb升级,初始化修改2. lettuce客户端3. 普罗米修斯监控4. 添加dubbo消费者,改成通用的文件配置
注意:mongodb跑全量数据,要注意观察性能,与数据量有关,现在按月分库,还有建好索引
有
定时任务异步扫redis(补DB)
1-1 重构:接口调入处
改造理念:1、投递到mongoDB的待处理数据不丢失2、往消息队列发送的消息不丢失3、解决中间件redis单点故障问题,redis异常,mongoDB支持跑业务不受影响4、mongoDB异常,redis中间件没发生异常的情况下,支持跑因为db异常存到redis的数据
0 条评论
下一页