(一)日志补偿

假如有两个系统,

在分布式系统情况下怎办保证双方数据的一致性,一般情况下都会做日志进行补偿.比如说我A系统调用B系统,只要有调用失败的情况下,就会存到日志里面去,然后每天晚上使用定时任务去执行程序补偿.

(二)分布式幂等问题

为了能解决上百万流量,弄个集群,放置多个tomcat,每个tomcat都有一个war包,这多个war包里面代码都是相同的,在分布式集群的情况下怎么解决任务调度幂等性(幂等性说白了就是不被重复执行).如果不解决的话,默认情况下就是部署了两个war包就会分别执行两个war包里面的定时任务,那么就会出现重复执行的问题.

解决思路

在集群的情况下让job只能被一台服务器执行,原理就是让多个jvm进行通讯,只能让jvm去执行这个job.

实现方式

  1. 分布式锁,但是缺点是假如说开发系统非常庞大,使用定时任务需求非常多,分布式锁不利于扩展,效率也不高.编写代码复杂.

  2. 使用数据库表的唯一约束,比如多个服务在执行定时任务调度的时候,谁能在数据库里面插入成功谁就能执行.缺点是不靠谱
    上面两种方式缺点是没有容错机制,容易崩溃,而且不能解决高并发.资源没有利用到(只让一台服务器执行定时任务,这样资源没利用到.)

  3. 使用分布式任务调度平台,大公司都会专门有一个任务调度平台,任务调度平台解决分布式幂等问题,以及高可用问题.同时也支持集群.还有很多管理机制,支持负载均衡,类似nginx,当服务挂掉的时候会有报警方案,自动管理平台.任务调度平台有很多种,比如说xxl-job.