TT Lab
开始
学习 学习路径 课程

容量规划与变更管理 — 算出何时写满,先写下何时停手

写变更申请并用演练验证

在 TT Lab 中继续学习

目标

区分三个变更申请的类型,把 DB 重启的影响范围沿依赖追踪到底,在作业窗口中倒扣回滚时间求出中止决策时间,再用这些数字编写 JSON 变更申请单,并用演练记录判定计划是否过于乐观。

为什么重要

生产故障有很大一部分来自变更。变更申请单是在作业之前就在纸面上确认这种风险的工具,审阅者驳回的理由通常是一样的——回滚标准只有“出问题的话”,影响列表只有直接依赖,没有计算回滚时间所以窗口看起来很宽裕。本实验用数字填上这三件事,并养成用演练记录检验计划的习惯。

材料在 /opt/lab/capacity/change/ 中,评分器根据原始材料计算期望值。

步骤

  1. 把 /opt/lab/capacity/change/ 中的五个文件复制到 /root/chg/。
  2. 把请求 A、B、C 的类型以 A=、B=、C= 写到 /root/chg/01-type.txt(standard、normal、emergency)。
  3. 把 db01 重启所影响的服务沿依赖追踪到底,以 impacted= 写到 /root/chg/02-impact.txt。
  4. 在 /root/chg/03-window.txt 中写入 total_min=、rollback_min=、nogo_at=、fits=。
  5. 在 /root/chg/cr.json 中写入 id、type、summary、window、impact、precheck。
  6. 在 cr.json 中加上 steps(S1…S5,每个都有 verify)和 rollback(trigger、max_min、steps)。
  7. 根据演练记录,在 /root/chg/04-rehearsal.txt 中写入 slowest_step=、over_min=、finished_at=、past_nogo=。

参考

复制材料

把 /opt/lab/capacity/change/ 中的五个文件(requests.txt、inventory.json、plan.csv、window.env、rehearsal.log)复制到 /root/chg/。

用 cp 搬运目录内容。请先从 requests.txt 读起。

区分变更类型

把 requests.txt 中的三个请求 A、B、C 分别归类为 standard、normal、emergency 之一,以 A=、B=、C= 三行写到 /root/chg/01-type.txt。

看它是原样重复已批准的操作规程,还是需要重新评估,还是现在不做很快就会变成故障。

追踪影响范围

把 inventory.json 中的 depends_on 追踪到底,找出受 db01 重启影响的全部服务,以 impacted=<이름들, 쉼표로>(占位符为以逗号分隔的名称)一行写到 /root/chg/02-impact.txt(不含 db01 本身)。

先找出直接使用 db01 的服务,再找使用这些服务的服务,如此重复,直到不再增加为止。

作业窗口与中止决策时间

根据 plan.csv 和 window.env,在 /root/chg/03-window.txt 中写四行:total_min=<minutes 합>、rollback_min=<rollback_minutes 합>、nogo_at=<WINDOW_END − rollback_min − BUFFER_MIN, HH:MM>、fits=<WINDOW_START + total_min 이 nogo_at 이하면 yes, 아니면 no>(占位符依次为:minutes 之和;rollback_minutes 之和;WINDOW_END 减去 rollback_min 再减去 BUFFER_MIN,格式为 HH:MM;WINDOW_START 加上 total_min 不晚于 nogo_at 则为 yes,否则为 no)。

回滚按最坏情况(所有步骤都回滚)计算。从窗口结束往回扣,就得到中止决策时间。

变更申请单的头部

把请求 B 的变更申请单写成 /root/chg/cr.json。顶层对象中必须有 id、type(B 的类型)、summary、window({"start": "02:00", "end": "04:00"})、impact(第 3 步的服务名称列表)、precheck(不为空的句子两条以上,其中一条是确认备份或快照)。

JSON 的语法可以用 python3 -m json.tool cr.json 确认。影响列表不要手工抄写,请从 02-impact.txt 中读取后放入。

每步的确认方法与回滚标准

给 cr.json 加上 steps 和 rollback。steps 是按 plan.csv 的顺序、每个都带有 id(S1…S5)和不为空的 verify(判断已完成的确认方法)的对象列表。rollback 是带有 trigger(包含第 4 步的 nogo_at 时间的、可衡量的标准)、max_min(第 4 步的 rollback_min)、steps(三步以上的列表)的对象。

trigger 中不能写“出问题的话”,而要写时间、比率、条数。中止决策时间请从 03-window.txt 中读取后放入。

阅读演练记录

根据 rehearsal.log,在 /root/chg/04-rehearsal.txt 中写四行:slowest_step=<계획보다 가장 많이 늦은 단계 id>、over_min=<그 단계가 늦은 분, 소수 첫째 자리>、finished_at=<마지막 done 의 HH:MM>、past_nogo=<리허설이 끝난 시각이 nogo_at 보다 늦으면 yes, 아니면 no>(占位符依次为:比计划晚得最多的步骤 id;该步骤晚了多少分钟,保留一位小数;最后一个 done 的 HH:MM;演练结束时间晚于 nogo_at 则为 yes,否则为 no)。

对每个步骤用 done 时间减去 start 时间,得到实际耗时,再与 plan.csv 的 minutes 比较。因为精确到秒,换算成分钟时要除以 60。