第一级别
- 使用HTTP协议,来进行交互,对失败的请求进行内存重试3次,3次后丢弃
第二级别
- 对失败的数据进行持久化重试,存放于数据库中,用定时任务来对失败的数据进行重新处理,重试3次以后丢弃,3次的间隔时间固定
第三级别
- 优化重试策略,考虑到如果重试时间间隔设置得太短,第三方宕机短时间内无法恢复,会跳过3次重试时间隔离。
- 如果重试次数太多,比如设置10次,1是耗资源(对方服务短时间内能恢复的就已经恢复了,恢复不了的,短时间内重试这么多次也没有意义),2是定时任务不能很快的处理到新产生的数据
- 如果重试时间间隔太长,第三方系统恢复后,又需要很长时间才能接收到。
- 折中的方案是优化策略为指数级别的重试方式,第1次失败1分钟,第2次失败2分钟后重试,第3次失败4分钟后重试,以此累加
第四级别
- 重试是由定时任务发起,为了不重复执行,所以执行线程只有1个,数据量过大,可能会显得力不从心
- 这时候可能考虑多开几个线程并行跑,来加快数据的传输
- 想要多开线程,就需要考虑线程之间的任务分配,可以通过取模,范围等方式来做任务分配,来达到加快同步效率的目的
第五级别
- 单机情况下的线程任务,存在线程中断,阻塞与单机瓶颈问题,
- 线程中断是指,程序业务逻辑出现未知异常导致线程中断,中断后该线程所负责的任务不能得到执行(比如该线程负责的1-100条之间的记录)
- 线程阻塞是指,HTTP网络阻塞(比如 restTemplate的超时时间会导致此问题),或者CPU未分配到执行此任务的片短,CPU在忙着搞其他具有更高优先级的事情,或者有其他线程一直占用着CPU使用权导致该任务线程一直挂起
- 单机瓶颈是指该服务一台

本文详细介绍了不同级别的重试策略,包括简单的内存重试、数据库持久化重试、指数级增加重试时间的方法,以及如何通过分布式任务系统解决单机瓶颈问题。此外,还探讨了业务监控系统的必要性和平台化的解决方案。
最低0.47元/天 解锁文章
1621





