Auto scaling 不必要:我手动 scale
solo engineer 没有 auto scaling。simedw 一个人 iPhone app——没有 AWS Auto Scaling Group,没有 CPU threshold,没有 scale up/down。iPhone 用户自己升级 = 手动 scale。auto scaling 是大公司弹性伸缩工具,一人工程的我 = auto scaling。
solo engineer 没有 auto scaling。
大公司做 auto scaling:
- AWS Auto Scaling Group (ASG):根据 CPU / memory / network 自动加 server
- GCP Instance Group:GCP 自动 instance group
- Azure VMSS:Azure virtual machine scale set
- k8s HPA:Horizontal Pod Autoscaler
- k8s VPA:Vertical Pod Autoscaler
- k8s KEDA:Kubernetes Event-Driven Autoscaling
- CPU threshold:CPU > 70% → 加 server
- memory threshold:memory > 80% → 加 server
- min / desired / max:最小 2 台 / 期望 5 台 / 最大 20 台
- scale up / scale down:加 / 减 server
- cool down:scale 完等 5 分钟再 scale
一人工程做 auto scaling:
- 没有 ASG
- 没有 CPU threshold
- 没有 scale up / scale down
- 没有 cool down
simedw 的 auto scaling 哲学
simedw 是 iPhone piano app。他没有 auto scaling:
- simedw 没有 server:iPhone app 没有 server,没有 auto scaling
- simedw 的 iPhone = 一个 server:每个用户的 iPhone = 一个 server
- simedw 的"scale up" = 用户买新 iPhone:用户 iPhone 旧了 / 满了 → 用户买新 iPhone
- simedw 的"scale down" = 用户卸载 app:用户不用 app → 卸载 = scale down
- simedw 不需要自动:simedw 不能控制用户买 iPhone 的速度
simedw 的"auto scaling"在 App Store + 用户决策:
- App Store 下载量:用户主动下载 = scale up
- App Store 卸载量:用户主动卸载 = scale down
- App Store 自动更新:苹果自动推送 = 升级 model
- iPhone 升级:用户买新 iPhone = scale up 硬件
不需要 AWS Auto Scaling,因为:
- iPhone app 没有 server
- 用户自己买 iPhone = 手动 scale
- 用户自己卸载 app = 手动 scale down
- simedw 不能控制 scale 速度
一人工程的 auto scaling 工具
- App Store 下载量:用户主动下载
- App Store 卸载量:用户主动卸载
- App Store 自动更新:苹果自动推送
- iPhone 升级:用户买新 iPhone
- TestFlight:beta 用户
不需要 AWS Auto Scaling,因为 iPhone app 没有 server。
AWS Auto Scaling Group 在大公司的细节
大公司 AWS Auto Scaling Group:
- launch template:AMI + instance type + security group + IAM role
- min / desired / max:min 2 / desired 5 / max 20
- CPU threshold:CPU > 70% → scale up
- memory threshold:memory > 80% → scale up
- network threshold:network > 50% → scale up
- custom metric:queue length / request latency / business metric
- scale up cooldown:scale up 后等 5 分钟
- scale down cooldown:scale down 后等 10 分钟
每个 ASG:
- 2-20 台 server
- $200-2000 / 月
- 1 个 SRE 配置
一人工程没有 ASG。一人工程有:
- simedw 0 台 server:iPhone app 没有 server
- simedw 0 美元 / 月:iPhone app 没有 ASG 成本
- simedw 自己 = SRE:simedw 自己配置
k8s HPA 在大公司的细节
大公司 k8s Horizontal Pod Autoscaler (HPA):
- CPU threshold:CPU > 70% → 加 pod
- memory threshold:memory > 80% → 加 pod
- custom metric:queue length / request latency
- min / max replicas:min 2 / max 50
- scale up:加 pod 副本
- scale down:减 pod 副本
- scaleUp behavior:30 秒内 +50% pod
- scaleDown behavior:5 分钟内 -10% pod
每个 HPA:
- 2-50 个 pod
- k8s controller
- 5 个 SRE 维护
一人工程没有 HPA。一人工程有:
- simedw 没有 pod:iPhone app 没有 server pod
- simedw 0 个 SRE:simedw 自己 = SRE
- simedw 没有 k8s:iPhone app 没有 k8s
k8s VPA 在大公司的细节
大公司 k8s Vertical Pod Autoscaler (VPA):
- CPU request / limit:动态调整 pod CPU
- memory request / limit:动态调整 pod memory
- recommendation:根据历史使用推荐
- auto apply:自动应用推荐
- min / max allowed:CPU 100m-2000m, memory 128Mi-4Gi
每个 VPA:
- k8s controller
- 自动调整 pod resource
- 5 个 SRE 维护
一人工程没有 VPA。一人工程有:
- simedw 没有 pod:iPhone app 没有 server pod
- simedw 固定 CPU / memory:iPhone 固定 CPU / memory,没有 VPA
- simedw 0 美元 / 月:iPhone app 没有 VPA 成本
k8s KEDA 在大公司的细节
大公司 k8s KEDA (Kubernetes Event-Driven Autoscaling):
- event-driven:根据外部事件 scale
- Kafka lag:Kafka consumer lag > 100 → 加 consumer pod
- RabbitMQ queue:queue depth > 1000 → 加 consumer pod
- SQS queue:SQS message count > 100 → 加 consumer pod
- Cron schedule:每天 9 点加 pod 处理报表
- Prometheus metric:基于 Prometheus 指标
每个 KEDA:
- k8s controller
- event-driven scale
- 5 个 SRE 维护
一人工程没有 KEDA。一人工程有:
- simedw 没有 event:iPhone app 没有 Kafka / RabbitMQ / SQS
- simedw 没有 server pod:iPhone app 没有 pod
- simedw 0 美元 / 月:iPhone app 没有 KEDA 成本
CPU threshold 在大公司的细节
大公司 CPU threshold:
- target 70%:CPU 70% 是 target
- scale up:CPU > 70% 持续 5 分钟 → 加 server
- scale down:CPU < 30% 持续 10 分钟 → 减 server
- scale fast / slow:scale up 快(30 秒)+ scale down 慢(5 分钟)
每个 CPU threshold:
- 70% target
- 5-10 分钟观察期
- 几秒 scale 时间
一人工程没有 CPU threshold。一人工程有:
- simedw 没有 server CPU:iPhone app 没有 server CPU
- simedw iPhone CPU:iPhone 有 CPU,但 simedw 不能 scale iPhone CPU
- simedw iPhone 散热:iPhone 过热 → 降低性能(不是 simedw 控制)
memory threshold 在大公司的细节
大公司 memory threshold:
- target 80%:memory 80% 是 target
- scale up:memory > 80% 持续 5 分钟 → 加 server
- scale down:memory < 30% 持续 10 分钟 → 减 server
每个 memory threshold:
- 80% target
- 5-10 分钟观察期
- 几秒 scale 时间
一人工程没有 memory threshold。一人工程有:
- simedw 没有 server memory:iPhone app 没有 server memory
- simedw iPhone memory:iPhone 有 memory(4-8 GB),但 simedw 不能 scale iPhone memory
- simedw OOM:iPhone app OOM = app crash(重启 = 内存清空)
scale up / scale down 在大公司的细节
大公司 scale up / scale down:
- scale up:CPU 上升 → 加 server(30 秒内)
- scale down:CPU 下降 → 减 server(5 分钟内,避免抖动)
- scale up cooldown:30 秒(避免频繁 scale up)
- scale down cooldown:5 分钟(避免频繁 scale down)
每个 scale up / scale down:
- 几秒时间
- 几美元成本
- 1 个 SRE 配置
一人工程没有 scale up / scale down。一人工程有:
- simedw 没有 server:iPhone app 没有 server,没有 scale
- simedw 用户升级 iPhone:用户自己买新 iPhone = scale up
- simedw 用户卸载 app:用户自己卸载 = scale down
min / desired / max 在大公司的细节
大公司 ASG min / desired / max:
- min 2:最少 2 台 server(保证高可用)
- desired 5:期望 5 台 server(基于平均负载)
- max 20:最多 20 台 server(防止成本失控)
每个 ASG:
- 2-20 台 server
- 弹性伸缩
- 5 个 SRE 配置
一人工程没有 min / desired / max。一人工程有:
- simedw 0 台 server:iPhone app 没有 server
- simedw iPhone 用户数:用户数 = server 数(1 个用户 = 1 个 iPhone = 1 个"server")
- simedw 没有最大:iPhone app 用户数没有 max(苹果 App Store 全球分发)
auto scaling 失败在大公司的细节
大公司 auto scaling 失败模式:
- scale up 太慢:流量激增 → scale up 5 分钟 → 用户已经离开
- scale up 太多:scale up 一次 +10 台 → 成本爆炸
- scale down 太快:scale down 5 分钟 → 流量回升 → 再次 scale up(抖动)
- scale down 误判:scale down 时 server 正在处理 → 用户失败
- metric 错误:用错 metric scale → 浪费钱
每个 auto scaling 失败:
- 重新配置 threshold
- 调整 cooldown
- 5 个 SRE 调试
一人工程没有 auto scaling 失败模式:
- simedw 没有 server:iPhone app 没有 auto scaling
- simedw 没有 scale 失败:iPhone app 不需要 scale
- simedw 不需要 threshold:iPhone app 没有 threshold
auto scaling 成本在大公司的细节
大公司 auto scaling 成本:
- min 2 × $100 / 月 = $200 / 月:最小 server
- avg 5 × $100 / 月 = $500 / 月:平均 server
- peak 20 × $100 / 月 = $2000 / 月:peak server
- 总成本:~$500 - $2000 / 月
每个 auto scaling 成本:
- $500 - $2000 / 月
- 5 个 SRE 维护
- 100 万用户服务
一人工程没有 auto scaling 成本。一人工程有:
- simedw 0 美元 / 月:iPhone app 没有 server
- simedw 0 个 SRE:simedw 自己 = SRE
- simedw 100 用户:simedw 服务 100 用户,0 cost
iPhone app vs server 的 auto scaling 区别
iPhone app 和 server 根本不同:
- server:100 万用户 → 5-20 台 server + auto scaling
- iPhone app:100 用户 → 100 个 iPhone(每个 iPhone = 一个 server)
simedw 的 iPhone piano app:
- 100 个用户 = 100 个 iPhone = 100 个 "server"
- 每个 iPhone 独立运行 app
- iPhone app 不需要 scale up(用户自己买新 iPhone)
- iPhone app 不需要 scale down(用户自己卸载)
- App Store 自动分发新版本
不需要 AWS Auto Scaling,因为:
- simedw 的 app 没有 server
- iPhone 本地运行 = 0 网络依赖
- App Store 全球分发 = 无限 scale
一人工程的 auto scaling 哲学
大公司 auto scaling 是因为他们有:
- 100 万用户 web 请求(流量波动)
- 1000 RPS 峰值(需要弹性伸缩)
- $500 - $2000 / 月 server 成本
- 5 个 SRE 维护 auto scaling
一人工程没有这些。一人工程有:
- 100 用户 iPhone app(每个 iPhone = 一个 server)
- 10 RPS 峰值(iPhone 本地处理,不需要弹性伸缩)
- $0 / 月 server 成本(iPhone app 没有 server)
- 0 个 SRE(simedw 自己 = SRE)
auto scaling 在一人工程里 = 用户自己买新 iPhone / 卸载 app。
我就是 auto scaling
大公司 auto scaling 是专用基础设施:
- AWS Auto Scaling Group
- k8s HPA / VPA / KEDA
- 5 个 SRE 维护
一人工程 auto scaling 是用户自己:
- 用户买新 iPhone = scale up
- 用户卸载 app = scale down
- 用户升级 iOS = model upgrade
没有 AWS Auto Scaling,没有 k8s HPA,没有 VPA,没有 KEDA。
一人工程 + 我手动 scale
simedw 不做 ASG。 simedw 不做 HPA。 simedw 不做 VPA。 simedw 不做 KEDA。 simedw 用户自己买新 iPhone = scale up。
auto scaling 在一人工程里不是工具,是用户自己。
solo engineer 没有 auto scaling。 solo engineer 的 auto scaling = 用户自己买新 iPhone / 卸载 app。
solus opus.