1.如何避免定时任务的重复调度?

利用分布式任务调度技术,如XXL-Job
XXL-Job创建任务时可以设置任务调度规则,规则可以设置为轮询或随机或分片广播.

2.能不能大概解释一下Seata的AT模式的执行原理

  1. AT模式是一种AP模式(强可用,弱一致性)<br /> SeataAT模式的执行流程大概为:<br /> 首先,有TMTC发出开始全局事务的请求,TC在全局事务表中记录数据<br /> 然后,由TM通知各个的RM调度各自的分支事务,这时分支事务开始执行.分支事务先向TC进行注册分支事务,开始执行SQL并提交,在SQL执行的前后,AT模式会把更新记录的前后数据保存到undo_log日志表中作为数据快照,再上报执行结果给TC.<br /> 最后,TC收集到所有分支事务的执行状态,进行分析,决定是否提交还是回滚,如果提交.则TC向所有RM发出删除undo_log日志记录的请求.如果回滚,则TC向所有RM发出读取undo_log数据做数据恢复的请求.<br />在AT的执行过程中,我了解到会有脏写的情况存在,Seata考虑到了这一点,利用全局事务锁,决定是否提交,最后整个全局事务结束时释放全局事务锁.这个就控制了脏写.

3.了解分布式ID吗?说说它的原理?

为什么要用分布式ID:在单表数据量过大时,采用了数据分片(水平分表)时,如何保证每张表的主键ID值是唯一的,这时需要用到分布式ID.
我相对了解的分布式ID算法是雪花算法.
雪花算法是由64为二进制生成的数字,用来办证时间不同,ID不同
第1位为0,暂时没有使用
后41位,为当前时间的毫秒值的二进制表示,用来保证时间不同,ID不同
后10位,为工作机器ID,前5位代表数据中心的ID,后5位代表工作服务器的ID,在项目中需要自行指定这10位的值
最后12位,为序列号,在时间相同且工作且工作机器ID相同的情况下,利用序列化保证ID的唯一性.