【微服务】面试 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(总分片数),利用这两个参数按照取模规则执行任务代码,从而实现将大数据量任务分摊到多个实例同时执行,确保任务快速完成。
相关推荐
一條狗36 分钟前
随笔 20250402 分布式 ID 生成器 Snowflake 里面的坑
分布式
小马爱打代码39 分钟前
Kubernetes 中部署 Ceph,构建高可用分布式存储服务
分布式·ceph·kubernetes
高 朗40 分钟前
2025高频面试设计模型总结篇
设计模式·面试·职场和发展
码熔burning43 分钟前
【Spring Cloud Alibaba】:Nacos 入门讲解
分布式·spring cloud·微服务
Alo36510 小时前
面试考点复盘(二)
面试
拉不动的猪11 小时前
简单回顾下pc端与mobile端的适配问题
前端·javascript·面试
拉不动的猪11 小时前
刷刷题49(react中几个常见的性能优化问题)
前端·react.js·面试
极客先躯12 小时前
高级java每日一道面试题-2025年3月22日-微服务篇[Nacos篇]-Nacos的主要功能有哪些?
java·开发语言·微服务
仙人掌_lz13 小时前
机器学习ML极简指南
人工智能·python·算法·机器学习·面试·强化学习
低头不见14 小时前
一个服务器算分布式吗,分布式需要几个服务器
运维·服务器·分布式