章节摘要:部署不是“把 Airflow 跑起来”,而是给元数据、调度、Worker、日志四类东西选故障域。本章覆盖单机到 Celery/K8s 的形态、调度器与数据库如何做高可用、以及该盯哪些状态与 SLA。读完应能画出自己环境的状态-责任图,而不是只复制一份安装命令。
阅读完本章,你应当能够:
金句:容器救不了 SQLite,副本数救不了没有 owner 的红任务。
状态主权、单机/队列/集群/托管怎么选,DAG 代码如何分发。
数据库、调度器、Worker、Broker 各自的扩与备。
指标、日志、SLA、谁在值班。
先选形态,再补活过故障的件,最后让违约发声。
4.1 形态 ──► 4.2 活过故障 ──► 4.3 违约要响
4.1 不要从安装包清单入手,从一张表入手:元数据、调度心跳、任务进程、日志,四行四列“放哪、谁备份、挂了怎样”。填不满就还没资格谈高可用。十人团队的第一套生产,优先托管 PostgreSQL、远程日志、Celery 或托管运行时,而不是双可用区双调度器。4.2 扩展顺序写在墙上:减解析 → 养库 → 加 Worker。任何人提“再加两台调度器”时,先问锁等待是不是已经很高。4.3 把告警拆成平台频道与 DAG owner 频道,SLA miss 不要和 failed 挤在同一个半夜电话里。
类比换成建筑工地:数据库是图纸档案室,烧了就无法验收;Worker 是脚手架上的人,少几个还能干,档案室塌了全停。监控是监理日志,不写窗口与责任人的监理日志,等于没监理。
托管服务(云厂商托管 Airflow、专业运行时)在原文第七章出现过,本章只吸收一句:进程可以外包,catchup 误开的后果不能外包。选型对比里的 Prefect、Argo、Temporal、Kubeflow 已在 1.3 划过边界,部署章不再展开竞品,避免写成演化史。
把容器化当成高可用:同一 Pod 里塞调度器与 Worker,容器只是把共命运打包得更整齐。把多副本 Web 当成吞吐:点击变顺,建 Run 不变。把托管当成可以乱写 catchup:进程在别人家,连接池照样会被你抽干。把成功率当成唯一 SLO:绿而晚的债务会在重叠窗口爆掉。把日志留在本地盘:多 Worker 后 UI 必然“没日志”。误判清单对应 4.1 到 4.3 的验收项,章页不展开操作,只防止跳节。
部署验收通过的标志,不是进程都在跑,而是三张探针 DAG 能走完、日志能打开、停 Web 不影响正在跑的任务。达不到这三条,后面的安全与测试会建立在沙上。
第 5 章的 RBAC 与 Provider 清单,要求已经有分环境的部署,否则权限模型会画在同一套大开的认证上。第 6 章的导入测试,要求执行镜像已经存在,而镜像来自本章的代码分发决策。监控章交出的 owner 路由,来自第 2 章 default_args,但没有本章的回调通道,owner 只是字符串。把通道建好,规范才有牙齿。探针三张不过,不准进入安全加固,以免在沙上装门禁。门禁很漂亮,风一吹连门框一起走。
探针甲乙丙是本章的毕业考试。甲验证账本与日志,乙验证出口,丙验证告警。三张不过,高可用配置只是 YAML 文学。文学不能在磁盘损坏时顶上。顶上的是演练过的剧本与分对的状态责任。责任表空着的格子,用“我们用了容器”填,等于没填。容器不是格子。格子是:库、心跳、进程、日志、密钥。五格填满,才允许讨论双可用区。可用区救不了没填的格。没填的格会在单可用区先爆。先爆的问题更便宜。便宜时不修,贵时同样的洞。
探针不过,不准讨论双可用区,也不准讨论 Dataset。Dataset 在门内。门是探针。探针是甲乙丙。甲账本日志,乙出口,丙告警。三张是毕业考试。考试不过,YAML 里的 replicas 是文学。文学不能切主。切主要剧本。剧本要格子。格子要填。填完五格:库、心跳、进程、日志、密钥。五格是本章入学条件,三张探针是毕业条件。入学毕业都不过,中间的高可用段落不要读成已拥有的能力。能力是演练过。演练在 4.2。演练引用格子。格子在 4.1。告警在 4.3。三节咬合。咬合失败的标志是只有进程在跑。在跑不等于可值班。可值班要能停 Web 而任务仍跑。仍跑要靠拆开。拆开要靠格子。格子要填。填完再谈副本。副本不是格子。格子先。先结束入学。入学结束才能考试。考试是探针。探针结束毕业。毕业结束本章。本章结束于可值班。可值班结束文学。文学结束于三张绿。绿要真。真来自日志能打开。打开来自远程日志。远程日志在格子里。格子在 4.1。回到格子。格子填完,本章才不是安装清单。清单能装进程。格子能值班。值班是目标。目标结束本章。