【微服务】面试 8、分布式任务调度

分布式任务调度简介

  • 主流工具:在分布式任务调度技术中,XXL - Job 是目前较为主流的工具。
  • 应用场景 :在 Java 后台项目中,任务调度技术应用广泛。以 XXL - Job 为例,它主要解决了以下四个常见问题:
    • 集群任务重复执行:相比 Spring Task 在集群环境下可能出现多个实例执行同一任务的冲突情况,XXL - Job 能有效避免此类问题。
    • Cron 表达式管理:Spring Task 将 Cron 表达式定义在代码中,而 XXL - Job 可在页面上定义,管理和修改更灵活便捷。
    • 定时任务失败处理:提供统一管理页面,能收集错误信息,支持故障转移和邮件告警功能,便于对定时任务失败情况进行处理和监控。
    • 任务量大的分片执行:像支付宝花呗每月通知大量用户还款的场景,任务量巨大时,XXL - Job 的分片执行功能可实现高效任务处理。

XXL - Job 路由策略

  • 策略定义 :路由策略是指在分布式任务调度中,确定任务分配到哪台机器执行的方式。在 XXL - Job 中创建任务时可指定路由策略,常见的有以下多种:
    • 轮询:任务按顺序轮流分配到不同实例执行,例如任务依次分配到实例一、实例二,再循环。
    • 固定选择:可固定选择第一台或最后一台实例执行任务,简单直接。
    • 随机:任务随机分配到某台机器执行,无特定规律。
    • 一致性哈希:依据哈希算法将任务固定分配到某台机器,且能保证任务均匀分布在不同机器上。
    • 最不经常使用:优先选择使用频率较低的机器执行任务,有助于均衡机器负载。
    • 最近最久未使用:优先选择最久未执行任务的机器,提高资源利用率。
    • 故障转移:当任务执行实例出现故障时,自动将任务转移到健康实例执行,保障任务顺利进行,在实际应用中使用较多。
    • 忙碌转移:若某实例太忙无法执行当前任务,会将任务转移到空闲实例执行,优化任务分配。
    • 分片广播:适用于大数据量任务,会广播触发集群中所有机器执行一次任务。例如在大规模用户通知场景中,可确保所有用户都能被及时通知到。

XXL - Job 任务执行失败的解决办法

  • 初步设置:首先可设置路由策略为故障转移,并在创建任务时设置失败重试次数。当任务执行失败时,系统会按照设置进行重试,增加任务成功执行的概率。
  • 进一步处理 :若上述设置后任务仍失败,可查看调度日志分析原因。调度日志详细记录了任务执行过程,有助于定位问题所在。同时,可设置邮件告警通知相关负责人。在创建任务页面可设置告警邮件及指定接收邮箱,并且在部署调度中心代码时,需在 spring.mail 配置相关邮箱信息,确保邮件能正常发送,以便负责人及时知晓任务失败情况并进行处理。

XXL - Job 大数据量任务执行方案

  • 策略选择:对于大数据量任务,需采用分片广播路由策略。通过这种策略,能充分利用集群资源,提高任务执行效率。
  • 执行逻辑 :在任务执行时,按照取模方式(任务项取模总分片数)将任务分配到对应的机器。例如,若有三台机器(总分片数为 3),任务 1、4、7 会分配到分片一的机器执行,任务 2、5、8 分配到分片二的机器,任务 3、6 分配到分片零的机器。在具体代码中,可获取两个关键参数:index(当前分片号)和 total(总分片数),利用这两个参数按照取模规则执行任务代码,从而实现将大数据量任务分摊到多个实例同时执行,确保任务快速完成。
相关推荐
独行soc4 小时前
#渗透测试#批量漏洞挖掘#HSC Mailinspector 任意文件读取漏洞(CVE-2024-34470)
linux·科技·安全·网络安全·面试·渗透测试
掘金-我是哪吒5 小时前
分布式微服务系统架构第156集:JavaPlus技术文档平台日更-Java线程池使用指南
java·分布式·微服务·云原生·架构
亲爱的非洲野猪6 小时前
Kafka消息积压的多维度解决方案:超越简单扩容的完整策略
java·分布式·中间件·kafka
活跃家族6 小时前
分布式压测
分布式
小飞悟6 小时前
你以为 React 的事件很简单?错了,它暗藏玄机!
前端·javascript·面试
掘金安东尼7 小时前
技术解析:高级 Excel 财务报表解析器的架构与实现
前端·javascript·面试
前端世界7 小时前
HarmonyOS开发实战:鸿蒙分布式生态构建与多设备协同发布全流程详解
分布式·华为·harmonyos
天天扭码7 小时前
AI时代,前端如何处理大模型返回的多模态数据?
前端·人工智能·面试
阳火锅8 小时前
都2025年了,来看看前端如何给刘亦菲加个水印吧!
前端·vue.js·面试
DavidSoCool8 小时前
RabbitMQ使用topic Exchange实现微服务分组订阅
分布式·微服务·rabbitmq