第3章 架构执行器与调度循环


第 3 章 · 架构、执行器与调度循环

章节摘要:你已经会写 DAG。本章回答它如何变成一次次真正的进程。调度器负责解析、按窗口创建运行、把就绪任务标成入队;执行器把入队变成本机进程、Celery Worker 或 Kubernetes Pod;元数据库是双方的共享账本。读完应能解释:界面延迟几秒为什么正常,以及 queued 卡住该查谁。

本节目标

阅读完本章,你应当能够:

  1. 画出 Web、调度器、执行器、元数据库、日志的职责边界
  2. 按隔离与规模在 Sequential、Local、Celery、Kubernetes 之间选型
  3. 描述一次调度循环里解析、建 Run、推进实例的顺序
  4. 用数据区间解释“为什么到点了还没跑”

核心概念速览

金句:调度器是指挥,不搬箱子;执行器搬箱子,不改乐谱。乐谱和搬箱子的记录都写在同一本账上。

图 指挥与搬运

图 指挥与搬运

子章节导航

3.1 整体架构设计

组件地图、状态三类、为何 SQLite 只能开发用。

3.2 Executor 选型

BaseExecutor 的入队与同步、各执行器的隔离与故障域。

3.3 调度机制与时间语义

文件处理器、窗口闭合才建 Run、事件与周期检查如何配合。

子章节之间的逻辑关系

先看房子怎么隔间,再选谁去施工,最后看指挥按什么钟点发令。

3.1 隔间 ──► 3.2 施工队 ──► 3.3 发令钟 ​

本章动手节奏

3.1 先在纸上画四块:Web、Scheduler、Executor/Worker、元数据库,再加日志箭头。问自己:Web 挂了任务还跑吗?库挂了呢?答案必须能脱口而出。3.2 把同一条最小 DAG 在 Sequential 与 Local 上各跑一次,记下从点触发到 success 的墙钟时间,这个数字是以后对比 Celery/K8s 的尺子。3.3 把 start_date 设到明确的过去,关掉 catchup,观察“为什么现在还不建 Run”——直到你能用窗口右端解释它,才允许读第 4 章。

调度器与执行器的分工,用乐队类比:指挥不拉琴,乐手不改谱。心跳是乐手向指挥报到“我还能接几小节”。槽位报低时,指挥少发新小节,这是背压,不是怠工。把槽位报低当成“调度器坏了”去重启,只会让正在同步的状态更乱。

本章会提到 DagFileProcessor 子进程、DagModel 字段、BaseExecutor 的 execute_async 与 sync。这些名字来自原文对架构的拆解,不是为了让你去读源码文件路径。记住职责即可:用户代码在子进程里 import,完成态在 sync 里写回。

本章常见误判

“界面卡就是任务没跑”:Web 与执行路径只共享账本,不同命运。 “加 Web 副本任务会变快”:售票窗口变多,车间不变。 “queued 很久就是调度器死了”:更常见是池满或 Worker 未订阅队列。 “K8s 一定比 Local 快”:短任务上镜像税会反过来。 “解析失败等于暂停”:导入错误与 is_paused 是两套开关。把这五句贴在架构图旁边,排障会少绕路。

本章要留下的能力不是画出漂亮的组件图,而是故障时按积木提问。问错积木,会重启不该重启的进程,让 sync 中的状态更脏。指挥与搬运的分工一旦内化,第 4 章的部署表只是把积木放到机架上。

和后文如何接线

第 4 章的状态-责任表,格子来自本章三类状态。第 6 章的变慢分段,第一段解析、第二段推演,都是调度循环的内部。读本章时做一次 Local 计时,把数字写下来,第 4 章选型才有尺子。没有尺子的架构讨论会变成品牌偏好。指挥不搬箱、搬运不改谱,这两句要能用 queued 与 running 解释。能解释,心跳槽位、sync 延迟、导入错误才会各归其位。归不了位,部署只会复制一份更贵的混乱。

把 Local 对照数字写在章末笔记里,单位秒。以后每一次“Airflow 慢”都先减这个数。减完仍大,才查集群。不减就查集群,会把镜像税当成产品罪。产品罪一旦立案,团队会改选型而不是改镜像。改选型的会议很长,改镜像的工单很短。本章站在短工单这一边。短工单需要数字。数字来自对照。对照来自你愿意先用土办法跑同一条 DAG。土办法是 Local。Local 不丢人。丢人的是没有对照还开会。

本章作业不是画组件,是留下 Local 秒数和一张停机影响表。两样都缺,第 4 章的探针会变成仪式。仪式绿不代表你知道该给谁打电话。电话来自影响表。秒数来自对照。对照来自土办法。土办法允许存在于生产讨论里。讨论若以品牌开头,把人拉回秒数。秒数在笔记。笔记在章末。章末作业不做,组件图只是壁纸。壁纸不能值班。值班需要表与秒。表与秒是本章的毕业证。毕业证比会背 BaseExecutor 方法名有用。方法名在排障时只需要入队、同步、心跳三句。三句能用 queued 与 running 解释,才算懂协议。懂协议再选品牌。品牌在协议之后。之后才是部署。部署引用本章作业。作业要做。做完才翻页。翻页去 4.1。4.1 问格子。格子来自三类状态。状态来自 3.1。3.1 在本章。本章把作业写死。写死才能结束名词瀑布。瀑布在第 1 章就警告过。警告在此兑现:没有秒数不要开会。开会结束于拿出笔记。笔记结束本章。

前置知识与后续延伸

  • 前置:第 2 章的 DAG 对象与任务状态词;至少手动成功过一次最小链
  • 后续:第 4 章把这些进程部署成可活过机器故障的形态;第 6 章用解析耗时和锁来解释“加机器无效”
  • 学完自检:能说明 queued 卡住该查池还是查 Worker,能说明界面延迟数秒为何可能正常
作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U