与第三方系统打通的N种进阶方式

第一级别
  1. 使用HTTP协议,来进行交互,对失败的请求进行内存重试3次,3次后丢弃
第二级别
  1. 对失败的数据进行持久化重试,存放于数据库中,用定时任务来对失败的数据进行重新处理,重试3次以后丢弃,3次的间隔时间固定
第三级别
  1. 优化重试策略,考虑到如果重试时间间隔设置得太短,第三方宕机短时间内无法恢复,会跳过3次重试时间隔离。
  2. 如果重试次数太多,比如设置10次,1是耗资源(对方服务短时间内能恢复的就已经恢复了,恢复不了的,短时间内重试这么多次也没有意义),2是定时任务不能很快的处理到新产生的数据
  3. 如果重试时间间隔太长,第三方系统恢复后,又需要很长时间才能接收到。
  4. 折中的方案是优化策略为指数级别的重试方式,第1次失败1分钟,第2次失败2分钟后重试,第3次失败4分钟后重试,以此累加
第四级别
  1. 重试是由定时任务发起,为了不重复执行,所以执行线程只有1个,数据量过大,可能会显得力不从心
  2. 这时候可能考虑多开几个线程并行跑,来加快数据的传输
  3. 想要多开线程,就需要考虑线程之间的任务分配,可以通过取模,范围等方式来做任务分配,来达到加快同步效率的目的
第五级别
  1. 单机情况下的线程任务,存在线程中断,阻塞与单机瓶颈问题,
  2. 线程中断是指,程序业务逻辑出现未知异常导致线程中断,中断后该线程所负责的任务不能得到执行(比如该线程负责的1-100条之间的记录)
  3. 线程阻塞是指,HTTP网络阻塞(比如 restTemplate的超时时间会导致此问题),或者CPU未分配到执行此任务的片短,CPU在忙着搞其他具有更高优先级的事情,或者有其他线程一直占用着CPU使用权导致该任务线程一直挂起
  4. 单机瓶颈是指该服务一台机器处理能力有限 或者 由于异常问题导致宕机,假死,等不可控因素时任务得不到执行
  5. 考虑到以上问题,可能需求使用到分布式任务系统,当一个线程死掉后,有其他线程来完成他的工作,当一台机器死掉后,有其他机器来完成这台机器的工作
第六级别
  1. 与第三方同步发生异常时研发团队得不到通知,发生问题不能得到及时处理,等到用户发现,或者第三方研发发现,再返馈到我方,就太晚了,所以需要一套完整的业务监控系统,通过先于用户,先于第三方发现问题,并解决问题
第七级别
  1. 公司团队的业务很多,只要不是孤岛,很多业务都需要与第三方对接,每一次的对接成本都做到这种程度,是一件即废人力,又废物力,又浪费时间的做法
  2. 如果能将这一套流程平台化,抽象为一个与第三方对接的公共平台,那业务团队只需要做一件事,那就是将“需要同步的数据存在自己业务的数据库里",后面的事情交给专门的系统来做专业的事情
  3. 来达到每一次对接都是最高级别的对接,每一次对接的成本都是最低
第八级别
  1. 既然做了平台化,那似乎还可以做更多的事情
  2. 任务可以实现动态分配,线程数,任务数,频次,重试策略,延迟投放,去重 等,来满足不停变化的需求与数据
  3. 每一条数据的来往,三方的处理结果都清晰的存在平台数据库中,能够实现后期排查定位和分析
  4. 第三方团队研发能力或需求理解能力不一,常常程序运行一段时间后,希望我们重新推送,以往是遇到这种情况,可能需求手动刷库,一是不安全,二是不方便。平台可以通过可视化操作,对指定数据来重放,实现重新推送
  5. 能够监控到每一个与第三方的同步情况,同步了多少数据,还剩多少,有多少成功的,有多少失败的,同步的性能怎么样,第三方的处理能力怎么样,等等执行情况
第九级别 - 待完善

欢迎补充

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值