一人工程 · solus opus

← 全部作品

solo-engineerinfrastructurerollbackdeploymenthn-show

Rollback 不必要:我有 backup

solo engineer 没有 rollback。simedw 一个人 iPhone app——bug 发生他自己 fix + 加急审核 24 小时,不需要 k8s rollout undo。rollback 是大公司快速回退工具,一人工程的 fix = rollback。

solo engineer 没有 rollback。

大公司做 rollback:

  • k8s rollout undo:kubectl rollout undo deployment/X(秒级回滚)
  • ECS rollback:aws ecs update-service 回滚到上一个 task definition
  • Spinnaker / ArgoCD:CD 平台一键回滚
  • database migration rollback:migration 回滚(schema 还原)
  • feature flag kill switch:LaunchDarkly / Split / Statsig 一秒关闭 feature
  • 1-click rollback:CEO 点一下按钮回滚
  • git revert:git revert HEAD + push

一人工程做 rollback:

  • 没有 k8s
  • 没有 ECS
  • 没有 Spinnaker
  • 没有 database migration
  • 没有 feature flag

simedw 的 rollback 哲学

simedw 是 iPhone piano app。他没有 rollback:

  • simedw 写代码时知道每个 change:simedw 写代码时知道每个 commit 的影响
  • simedw 不需要回滚:simedw 写代码时已经测过,不需要回滚
  • simedw 加急审核 24 小时 = rollback:如果 bug 发生,simedw 加急审核 24 小时修复(≈ rollback 速度)
  • simedw 用户本地修复:iPhone app 用户重启 app 就能恢复(不像 server 需要回滚)

simedw 的"rollback"在 git log + commit message:

commit 7d29c1b5 (current)
fix: latency 200ms → 50ms after iOS 18 upgrade

commit 8bd813f7 (rollback)
revert: "fix: latency 200ms → 50ms"

但 simedw 不需要 git revert——simedw 加急审核 24 小时 fix 比 revert 快(revert 要重新部署 + 测 + 部署)。

一人工程的 rollback 工具

  • git revert:本地 git log + revert
  • 苹果加急审核:24 小时紧急修复
  • App Store release notes:通知用户修复版本
  • Crashlytics:自动检测 bug + 触发加急

不需要 k8s / ECS / Spinnaker,因为 simedw 没有 server。

k8s rollout undo 在大公司的细节

大公司 k8s rollout undo:

  • kubectl rollout undo:秒级回滚到上一个 deployment
  • kubectl rollout history:看 deployment 历史
  • kubectl rollout restart:强制重启所有 pod
  • kubectl rollout pause / resume:暂停 / 恢复 deployment

每个 rollback:

  • 1 秒完成
  • 不需要改代码
  • 不需要重新部署

一人工程没有 k8s。一人工程有:

  • simedw 加急审核 24 小时:iPhone app 没有 k8s,加急审核 = rollback
  • simedw 自己 fix 比 rollback 快:simedw 写代码时已经知道 fix,24 小时比 k8s 1 秒慢但足够

database migration rollback 在大公司的必要性

大公司 database migration rollback:

  • forward migration:schema 加 column / 加 table / 加 index
  • backward migration:schema 减 column / 减 table / 减 index
  • migration rollback:发现 bug → 回滚 schema
  • data migration rollback:发现 bug → 回滚数据

每个 migration rollback:

  • 几小时到几天
  • DBA 协调
  • 应用代码同步回滚

一人工程没有 database migration rollback。一人工程有:

  • simedw 没有 server database:iPhone app 用 Core ML + 本地存储,不需要 database migration
  • simedw 不需要 DBA:simedw 自己 = DBA
  • simedw 不需要回滚数据:simedw 不存数据

feature flag kill switch 在大公司的细节

大公司 feature flag kill switch:

  • LaunchDarkly / Split / Statsig:一秒关闭 feature
  • kill switch SLA:P0 incident 1 秒 kill switch
  • kill switch 流程:oncall 工程师 → kill switch → 100% 用户关闭 feature
  • kill switch 验证:feature 关闭后 alert 消失

每个 kill switch:

  • 1 秒完成
  • 不需要重新部署
  • 不需要改代码

一人工程没有 feature flag kill switch。一人工程有:

  • simedw 加急审核 24 小时:iPhone app 没有 feature flag,加急审核 = kill switch
  • simedw 不需要 1 秒 SLA:iPhone app 没有 SLA 承诺

1-click rollback 在大公司的细节

大公司 1-click rollback:

  • CEO / VP 按钮:1 个按钮回滚整个 production
  • incident commander 批准:rollback 需要 incident commander 批准
  • rollback doc:rollback 后写 incident doc

每个 1-click rollback:

  • 几秒完成
  • CEO / VP 批准
  • incident doc 记录

一人工程没有 1-click rollback。一人工程有:

  • simedw 自己 = CEO / VP / incident commander:simedw 自己批准
  • simedw 自己 = rollback doc author:simedw 写 commit message
  • simedw 不需要 1-click:simedw 加急审核 24 小时 = rollback

git revert 在大公司的细节

大公司 git revert——发现 bug 后回滚 commit:

  • git revert HEAD:撤销最近一个 commit
  • git revert X:撤销某个 commit
  • git revert X..Y:撤销多个 commit
  • git revert + push:revert 后 push 触发部署

每个 git revert:

  • 几秒完成
  • 不需要改代码
  • 自动触发 CI / CD

一人工程有 git revert,但 simedw 不需要:

  • simedw 写代码时知道 fix:simedw 写代码时知道每个 fix,加急审核比 revert 快
  • simedw 不需要 revert:simedw 改完 bug 比 revert 旧版本好

iPhone app vs server 的 rollback 区别

iPhone app 和 server 根本不同:

  • server:24 小时在线,部署立即生效(用户立即收到新版本)→ 需要快速 rollback(k8s 1 秒)
  • iPhone app:用户本地安装,新版本需要苹果审核(11 天)→ rollback 通过加急审核 24 小时

simedw 的 iPhone piano app:

  • 部署不立即生效(苹果审核 11 天)
  • 加急审核 24 小时 = rollback 速度
  • 用户重启 app 就能恢复(不像 server 需要 rollback)

不需要 k8s rollback,因为:

  • simedw 的 app 没有 server deployment
  • 苹果审核是自然 rollback 屏障
  • 用户本地 app 永远能打开

rollback 失败在大公司的细节

大公司 rollback 失败模式:

  • rollback 失败:rollback 后还是 bug(rollback 版本本身有 bug)
  • rollback 部分:rollback 后部分用户还在新版本(流量没切完)
  • rollback 数据不一致:rollback 后 database schema 不一致
  • rollback 后 alert 不消失:rollback 后 bug 还在(root cause 没找到)

每个 rollback 失败:

  • 重新 incident
  • 写 postmortem
  • 找 root cause

一人工程没有 rollback 失败模式:

  • simedw fix 比 rollback 好:simedw 改完 bug 比 revert 旧版本好
  • simedw 没有部分 rollback:iPhone app 没有流量切分
  • simedw 没有 database 不一致:iPhone app 没有 server database
  • simedw 没有 alert:iPhone app 没有生产监控

rollback 决策在大公司的政治

rollback 不是工具——是政治决策

  • incident commander:决定是否 rollback
  • CTO:决定 rollback 是否影响 SLA
  • PM:决定 rollback 是否影响 feature 发布
  • VP:决定 rollback 是否影响季度目标
  • CEO:决定 rollback 是否影响公司声誉

每个 rollback 决策:

  • 几小时讨论
  • 5-10 个 stakeholder
  • 每个 stakeholder 有不同意见

一人工程没有 rollback 决策。一人工程有:

  • simedw 自己决定:simedw 自己知道 bug 怎么 fix
  • simedw 不需要讨论:simedw 自己 = 5-10 个 stakeholder
  • simedw 24 小时 fix:simedw 加急审核 24 小时比 rollback 快

一人工程的 rollback 哲学

大公司 rollback 是因为他们有:

  • 100 万用户(一次 rollback = 100 万用户受影响)
  • 100 个工程师(需要协调 rollback)
  • 5 分钟内 SLA(需要 1 秒 rollback)
  • $XX,XXX revenue impact(rollback 减少损失)

一人工程没有这些。一人工程有:

  • 100 用户(一次 rollback = 100 用户受影响,simedw 自己通知)
  • 0 个工程师(自己就是工程师)
  • 24 小时苹果加急审核(不需要 1 秒 SLA)
  • $0 revenue impact(iPhone app 免费)

rollback 在一人工程里 = simedw 加急审核 24 小时

我就是 rollback

大公司 rollback 是多角色协作的

  • incident commander 决定
  • DBA 协调 database
  • SRE 协调 server
  • engineer 改代码
  • CEO / VP 批准

一人工程 rollback 是一个人做的

  • simedw 自己决定(看 Crashlytics)
  • simedw 自己协调(fix 代码)
  • simedw 自己改代码(commit + 加急审核)
  • simedw 自己批准(自己 = CEO / VP)

没有 incident commander,没有 DBA,没有 SRE,没有 engineer,没有 CEO。

一人工程 + 我有 backup

simedw 不做 k8s rollout undo。 simedw 不做 ECS rollback。 simedw 不做 Spinnaker。 simedw 不做 migration rollback。 simedw 不做 feature flag kill switch。 simedw 加急审核 24 小时 = rollback。

rollback 在一人工程里不是工具,是simedw 加急审核 24 小时


solo engineer 没有 rollback。 solo engineer 的 rollback = 加急审核 24 小时 + 自己 fix。

solus opus.