一人工程 · solus opus

← 全部作品

solo-engineerinfrastructurecanary-deploydeploymenthn-show

Canary deploy 不必要:准备好就 deploy

solo engineer 没有 canary deploy。simedw 一个人 iPhone app——准备好就 deploy,11 天苹果审核期就是天然 canary。canary deploy 是大公司灰度发布工具,一人工程的审核期 = canary。

solo engineer 没有 canary deploy。

大公司做 canary deploy:

  • 5% rollout:1 万用户先试新版本
  • 25% rollout:5 万用户
  • 50% rollout:50 万用户
  • 100% rollout:所有用户
  • metric gate:每个阶段看 error rate / latency / business metric
  • auto rollback:metric 恶化 → 自动回滚
  • Spinnaker / Argo Rollouts:CD 平台自动 canary
  • Flagger:Kubernetes 自动 canary 工具

一人工程做 canary deploy:

  • 没有 5% rollout
  • 没有 25% rollout
  • 没有 metric gate
  • 没有 auto rollback
  • 没有 Spinnaker

simedw 的 canary 哲学

simedw 是 iPhone piano app。他没有 canary deploy:

  • simedw 准备好就提交:simedw 写完 + 自己测 + 提交 App Store
  • 苹果审核 11 天 = 天然 canary:苹果审核员先试(≈ 5% 用户)
  • 审核通过 = 100% rollout:所有用户立即收到
  • 审核拒绝 = rollback:simedw 修复 + 重新提交
  • TestFlight beta = canary:simedw 用 TestFlight 给少量用户先试(如果需要)

simedw 的"canary"在 App Store 审核 + TestFlight + Crashlytics:

  • App Store 审核 11 天:苹果审核员先试新版本 = 5% 用户试
  • TestFlight beta:simedw 给 10 个 beta 用户先试 = 10% 用户试
  • Crashlytics:simedw 看 crash rate = metric gate
  • App Store release notes:所有用户更新 = 100% rollout

不需要 Spinnaker,因为:

  • 苹果审核期 = canary 阶段
  • TestFlight beta = canary 工具
  • Crashlytics = metric gate
  • 加急审核 = rollback

一人工程的 canary 工具

  • App Store 审核:11 天天然 canary
  • TestFlight beta:10-100 用户先试
  • Crashlytics:crash rate metric gate
  • 加急审核 24 小时:rollback 速度
  • App Store release notes:100% rollout 通知

不需要 Spinnaker / Argo Rollouts / Flagger,因为:

  • 苹果审核已经做 canary
  • simedw 没有 server deployment
  • iPhone app 本地安装,不需要流量切分

5% rollout 在大公司的细节

大公司 5% rollout:

  • 5% user segment:1 万用户先试
  • metric 监控:error rate / latency / business metric
  • duration:24-48 小时观察
  • success criteria:error rate < 0.1% / latency < 100ms / conversion > baseline
  • auto rollback:metric 恶化 → 自动回滚到 0%

每个 5% rollout:

  • 1-2 天观察
  • oncall 工程师监控
  • PM / VP 看 dashboard

一人工程没有 5% rollout。一人工程有:

  • simedw TestFlight 5 用户:simedw 给 5 个 beta 用户先试 = 5% user segment
  • simedw 自己看 Crashlytics:crash rate = metric
  • simedw 不需要 oncall:simedw 自己看
  • simedw 不需要 dashboard:simedw 自己看 Crashlytics 够了

25% / 50% / 100% rollout 在大公司的细节

大公司 rollout 阶段:

  • 25% rollout:5 万用户 = 25% traffic
  • 50% rollout:50 万用户 = 50% traffic
  • 100% rollout:所有用户 = 100% traffic

每个阶段:

  • 24-48 小时观察
  • metric 验证
  • auto rollback

一人工程没有 25% / 50% rollout。一人工程有:

  • simedw 100% rollout:iPhone app 没有流量切分,新版本审核通过后 100% 用户立即收到
  • simedw 不需要阶段:iPhone app 没有阶段
  • simedw 加急审核 = rollback:如果有问题 simedw 加急审核 24 小时修复

metric gate 在大公司的细节

大公司 metric gate——canary 必须 metric 通过:

  • error rate:canary error rate < baseline + 0.1%
  • latency p99:canary p99 latency < baseline + 50ms
  • conversion rate:canary conversion > baseline - 0.5%
  • business metric:canary revenue > baseline + 0%

每个 metric:

  • 自动计算
  • dashboard 显示
  • auto rollback

一人工程没有 metric gate。一人工程有:

  • simedw 自己看 Crashlytics:crash rate < 1% = metric gate
  • simedw 自己看 App Store 评论:用户反馈 = metric
  • simedw 不需要 dashboard:simedw 自己 = dashboard
  • simedw 不需要 auto rollback:simedw 加急审核 = rollback

auto rollback 在大公司的细节

大公司 auto rollback——canary metric 恶化自动回滚:

  • error rate 上升:5% 上升到 0.5% → auto rollback
  • latency 上升:p99 上升 100ms → auto rollback
  • conversion 下降:conversion 下降 1% → auto rollback
  • rollback 时间:1 秒(k8s 自动回滚)

每个 auto rollback:

  • 1 秒完成
  • 不需要人工
  • 不需要 dashboard

一人工程没有 auto rollback。一人工程有:

  • simedw 加急审核 24 小时:iPhone app 没有 auto rollback,但 simedw 加急审核 24 小时 = rollback 速度
  • simedw 不需要 1 秒:iPhone app 没有 1 秒 SLA
  • simedw 24 小时够:simedw 改完 bug + 加急审核 = 24 小时 rollback

Spinnaker / Argo Rollouts 在大公司的细节

大公司 CD 平台:

  • Spinnaker:Netflix 开源 CD 平台,支持 canary / blue-green / traffic shifting
  • Argo Rollouts:Kubernetes 原生 CD 平台,支持 canary
  • Flagger:Kubernetes 自动 canary 工具
  • Harness / Octopus Deploy:商业 CD 平台

每个 CD 平台:

  • 几百万美元 / 年 license
  • 5-10 个 SRE 维护
  • 100 个工程师使用

一人工程没有 CD 平台。一人工程有:

  • 苹果 App Store = CD 平台:苹果审核 + 部署
  • TestFlight = canary 工具:beta 测试
  • Crashlytics = metric 工具:crash rate
  • simedw 0 美元 / 年:iPhone app 部署免费

Flagger 在大公司的细节

大公司 Flagger——Kubernetes 自动 canary:

  • metric collection:自动收集 metric
  • analysis:自动分析 canary vs baseline
  • promote:metric 通过 → promote 到下一阶段
  • rollback:metric 失败 → rollback

每个 Flagger:

  • 1-2 小时配置
  • 持续监控 metric
  • auto rollback

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

  • simedw 自己看 Crashlytics:simedw 自己分析
  • simedw 24 小时 fix:simedw 修复 + 加急审核
  • simedw 不需要自动:simedw 1 个人不需要自动

canary duration 在大公司的细节

大公司 canary duration:

  • 5% canary:24-48 小时观察
  • 25% canary:24-48 小时观察
  • 50% canary:24-48 小时观察
  • 100% canary:永久

每个 canary duration:

  • 24-48 小时
  • oncall 工程师监控
  • PM / VP 看 dashboard

一人工程没有 canary duration。一人工程有:

  • simedw 11 天苹果审核:App Store 审核 11 天 = 5% canary 阶段
  • simedw 24 小时加急审核:加急审核 24 小时 = rollback 速度
  • simedw 100% rollout:审核通过后 100% 用户立即收到

iPhone app vs server 的 canary 区别

iPhone app 和 server 根本不同:

  • server:24 小时在线,部署立即生效(用户立即收到新版本)→ 需要 canary deploy(5% → 100%)
  • iPhone app:用户本地安装,新版本需要苹果审核(11 天)→ 苹果审核就是天然 canary

simedw 的 iPhone piano app:

  • 部署不立即生效(苹果审核 11 天)
  • 苹果审核 = 5% canary 阶段
  • 审核通过 = 100% rollout
  • 审核拒绝 = rollback

不需要 Spinnaker canary,因为:

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

TestFlight beta 在 simedw 的角色

simedw 用 TestFlight beta 做 canary:

  • TestFlight 内部测试:simedw 自己 + 1-2 个朋友(1% 用户)
  • TestFlight 外部测试:10-100 个 beta 用户(5-10% 用户)
  • TestFlight duration:1-2 周观察
  • metric 收集:Crashlytics 看 crash rate
  • feedback:beta 用户反馈

每个 TestFlight:

  • 1-2 周
  • 10-100 beta 用户
  • simedw 自己看 feedback

不需要 Spinnaker canary,因为 TestFlight 已经做了。

canary 失败在大公司的细节

大公司 canary 失败模式:

  • canary metric 恶化:error rate 上升 → rollback
  • canary false positive:metric 暂时恶化但实际正常 → 误判 rollback
  • canary false negative:metric 正常但实际有问题 → 没发现
  • canary 时间不够:canary 时间不够 → metric 没暴露

每个 canary 失败:

  • 重新 canary
  • 调整 metric gate
  • 延长 canary 时间

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

  • simedw TestFlight 用户反馈:beta 用户直接反馈
  • simedw Crashlytics 看 crash:crash rate 直接看
  • simedw 不需要 false positive:iPhone app 没有 false positive
  • simedw 11 天审核:审核期足够长

一人工程的 canary 哲学

大公司 canary deploy 是因为他们有:

  • 100 万用户(一次 bad deploy = 100 万用户受影响)
  • 100 个工程师(需要协调 canary)
  • 5 分钟 rollback SLA(需要 auto rollback)
  • $XX,XXX revenue impact(bad deploy 损失钱)

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

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

canary deploy 在一人工程里 = 苹果审核 + TestFlight + Crashlytics

我就是 canary

大公司 canary 是多角色协作的

  • SRE 配置 Spinnaker
  • oncall 监控 metric
  • PM 看 dashboard
  • VP 决定 promote
  • engineer 改代码

一人工程 canary 是一个人做的

  • simedw 自己配置 TestFlight
  • simedw 自己看 Crashlytics
  • simedw 自己看 App Store 评论
  • simedw 自己决定 promote(提交 App Store)
  • simedw 自己改代码(修复 bug)

没有 SRE,没有 oncall,没有 PM,没有 VP,没有 engineer。

一人工程 + 准备好就 deploy

simedw 不做 5% rollout。 simedw 不做 25% rollout。 simedw 不做 metric gate。 simedw 不做 auto rollback。 simedw 准备好就 deploy。

canary deploy 在一人工程里不是工具,是苹果审核 + TestFlight + Crashlytics


solo engineer 没有 canary deploy。 solo engineer 的 canary deploy = 苹果审核 11 天 + TestFlight beta + Crashlytics。

solus opus.