Azkaban系列(一):Azkaban简介

前言

工作流调度器现在是每家公司必备,通过组织复杂的工作流计划,实现任务的自动触发,释放繁重的工作。

当前业界工作流调度系统也比较多,比如:airflow、apache oozie、azkaban等

首先,需要承认azkaban并不是一个完美的工作流调度器,但对于我们学习和熟悉分布式任务调度系统是值得借鉴的。

Azkaban整体介绍

Azkaban是LinkedIn开的的一个Java的工作流调度项目,主要负责任务的执行以及定时执行,是一个不错的调度系统。

工作流调度系统对比

以下对业界常见的工作流调度系统做一个对比

Azkaban架构介绍

整体架构

架构图如下:

Azkaban的架构比较简单,整体分为WebServer和ExectorServer,任务的元数据通过mysql来存储

当然,实际上项目会比这复杂,还是需要一定的耐心才能看懂整个项目

模块介绍

这里分别介绍一下各个模块

WebServer

WebServer是整个架构中的大脑,负责与前端交互,包括任务的提交、任务的分发、权限控制等,用户的一切操作都是由WebServer进行处理或者分发。

那么这里问题就来了,WebServer是不是会有单点问题?我的结论是确实会存在单点问题。

但很很多地方都没提azkaban的单点问题,我理解是基于几方面:

1、WebServer只是负责请求转发、定时触发,不责任重操作的任务执行,所以整体比较轻量,挂掉的风险比较低;

2、即使WebServer宕机,重启能够恢复任务,所以做好报警是可能一定程度及时发现的;

不管怎样,从技术的角度出发,单点问题还是很耗研发精力的,所以,结合单点问题,我后面会讲讲解决方案。

ExectorServer

ExectorServer是任务的实际执行的地方,任务用WebServer判断是否需要执行,然后分发给ExectorServer,由ExectorServer来负责具体的执行。

用户的处理逻辑就是在这里执行的。

ExectorServer内部其实就是一个线程池来执行这些任务,也比较简单,在后续的文章中会详细介绍。

Mysql

Mysql是整个系统的元数据存储地方,共涉及10+张表,后续会详细介绍这些表具体是做什么的。

除Mysql外,azkaban还提供h2作为内存数据库,便于调试

总结

Azkaban是一个比较不错的工作流调度平台,但它并不是完美的,在功能上,也有一些能够完善的地方。但对于一个开源平台来说,并不能苛求太多,我们可以基于azkaban系统来探索分布式调度平台的技术和发展,就是一件很不错的事情了

附录

azkaban官网:azkaban.github.io/

azkaban github地址:github.com/azkaban/azk...

azkaban快速入手:azkaban.readthedocs.io/en/latest

相关推荐
用户别睡觉23 分钟前
自己搭的中文 PDF RAG 接了 Redis 缓存、跑了 RAGAS,以为能写“提速多少、准确率多少”,结果两个都没按预期来。
后端
彭亚川Allen29 分钟前
985 在职研究生到底怎么样?是不是水硕?是不是.....?
前端·后端·程序员
乘风24832 分钟前
# 我做了个会遗忘的 AI 记忆,召回率反而从 8% 涨到 100%
后端
Rain的Java大神之路1 小时前
面试被LeetCode 27(移除元素)问懵?别再用两层 for 循环了:一道“简单题”吃透双指针原地删除,附面试加分话术 + 11 个避坑清单
后端·leetcode·面试
利威尔xu1 小时前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
猿究院--Cu-Sn合金2 小时前
Spring Boot + DeepSeek 求职 Agent 实践:工具注册、多轮调用与简历 JD 对比
数据库·人工智能·spring boot·后端·deepseek
程序员cxuan2 小时前
别学 subagent 了,很可能要凉了。
后端·agent·ai编程
小咕聊编程2 小时前
基于Django的个人摄影博客网站设计与开发
后端·python·django
未秃头的程序猿2 小时前
@ConditionalOnMissingBean 把我配好的 RabbitMQ 手动 ack 吃掉了
后端·rabbitmq
回家路上绕了弯3 小时前
当 AI 成为队友:团队协作使用 AI 的实践与思考
后端