01 · Why AWS Lambda: Idle Cost, Capacity Planning and Risky In-Place Deploys

🇨🇳 中文版 | 📦 GitHub: https://github.com/geekchow/aws-lambda-guide

Where you are: Stage 1 of 6 (Why).

After this file you will know: what hurt before Lambda, why VMs and containers did not fully cure it, and which constraints shaped Lambda's design --- including why versions, aliases and provisioned concurrency had to exist.


1. The world before: you rent a server, you own its problems

Imagine ShopFast in 2012. Its checkout service runs on four EC2 (Elastic Compute Cloud) virtual machines behind a load balancer.

Pain What it looks like concretely
Paying for idle Traffic at 03:00 is 2% of peak, but all four VMs (Virtual Machines) bill 24 × 7. Typical utilization: 10--20%.
Capacity guesswork Black Friday needs 20× capacity for 6 hours. Provision too little → checkout falls over; too much → money burned for weeks of lead time.
Slow elasticity An auto-scaling group boots a new VM in minutes. A traffic spike that peaks in 30 seconds is over before help arrives.
Undifferentiated toil Kernel patches, OS (Operating System) upgrades, log agents, disk-full pages at 02:00 --- none of it is checkout logic.
Risky deploys Deploying = SSH-ing (Secure Shell) or rolling new code in place over running servers. Rollback means re-deploying the old artifact and hoping it still builds.

#mermaid-svg-LXI4zIRB8euYFvCP{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-LXI4zIRB8euYFvCP .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-LXI4zIRB8euYFvCP .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-LXI4zIRB8euYFvCP .error-icon{fill:#552222;}#mermaid-svg-LXI4zIRB8euYFvCP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LXI4zIRB8euYFvCP .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-LXI4zIRB8euYFvCP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LXI4zIRB8euYFvCP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LXI4zIRB8euYFvCP .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-LXI4zIRB8euYFvCP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LXI4zIRB8euYFvCP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LXI4zIRB8euYFvCP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LXI4zIRB8euYFvCP .marker.cross{stroke:#333333;}#mermaid-svg-LXI4zIRB8euYFvCP svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LXI4zIRB8euYFvCP p{margin:0;}#mermaid-svg-LXI4zIRB8euYFvCP .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-LXI4zIRB8euYFvCP .cluster-label text{fill:#333;}#mermaid-svg-LXI4zIRB8euYFvCP .cluster-label span{color:#333;}#mermaid-svg-LXI4zIRB8euYFvCP .cluster-label span p{background-color:transparent;}#mermaid-svg-LXI4zIRB8euYFvCP .label text,#mermaid-svg-LXI4zIRB8euYFvCP span{fill:#333;color:#333;}#mermaid-svg-LXI4zIRB8euYFvCP .node rect,#mermaid-svg-LXI4zIRB8euYFvCP .node circle,#mermaid-svg-LXI4zIRB8euYFvCP .node ellipse,#mermaid-svg-LXI4zIRB8euYFvCP .node polygon,#mermaid-svg-LXI4zIRB8euYFvCP .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-LXI4zIRB8euYFvCP .rough-node .label text,#mermaid-svg-LXI4zIRB8euYFvCP .node .label text,#mermaid-svg-LXI4zIRB8euYFvCP .image-shape .label,#mermaid-svg-LXI4zIRB8euYFvCP .icon-shape .label{text-anchor:middle;}#mermaid-svg-LXI4zIRB8euYFvCP .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-LXI4zIRB8euYFvCP .rough-node .label,#mermaid-svg-LXI4zIRB8euYFvCP .node .label,#mermaid-svg-LXI4zIRB8euYFvCP .image-shape .label,#mermaid-svg-LXI4zIRB8euYFvCP .icon-shape .label{text-align:center;}#mermaid-svg-LXI4zIRB8euYFvCP .node.clickable{cursor:pointer;}#mermaid-svg-LXI4zIRB8euYFvCP .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-LXI4zIRB8euYFvCP .arrowheadPath{fill:#333333;}#mermaid-svg-LXI4zIRB8euYFvCP .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-LXI4zIRB8euYFvCP .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-LXI4zIRB8euYFvCP .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LXI4zIRB8euYFvCP .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-LXI4zIRB8euYFvCP .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LXI4zIRB8euYFvCP .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-LXI4zIRB8euYFvCP .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-LXI4zIRB8euYFvCP .cluster text{fill:#333;}#mermaid-svg-LXI4zIRB8euYFvCP .cluster span{color:#333;}#mermaid-svg-LXI4zIRB8euYFvCP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-LXI4zIRB8euYFvCP .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-LXI4zIRB8euYFvCP rect.text{fill:none;stroke-width:0;}#mermaid-svg-LXI4zIRB8euYFvCP .icon-shape,#mermaid-svg-LXI4zIRB8euYFvCP .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-LXI4zIRB8euYFvCP .icon-shape p,#mermaid-svg-LXI4zIRB8euYFvCP .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-LXI4zIRB8euYFvCP .icon-shape .label rect,#mermaid-svg-LXI4zIRB8euYFvCP .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-LXI4zIRB8euYFvCP .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-LXI4zIRB8euYFvCP .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-LXI4zIRB8euYFvCP :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Lambda 2014
After: function-centric
Traffic curve
Environments created

per concurrent request
Pay per request

and per ms
Provider patches and scales;

you publish versions
Before: server-centric
Traffic curve
Fixed fleet sized

for the peak
80 percent idle

capacity, paid
You patch, scale,

deploy in place

Caption: the shift Lambda made --- from sizing a fleet to letting capacity follow concurrent requests.

2. Why the existing answers were not enough

Predecessor What it fixed What it left broken
Physical servers --- Everything above, plus weeks of procurement.
VMs (EC2) + Auto Scaling Minutes instead of weeks; pay by the hour/second Still pay for idle; still patch an OS; scale-out takes minutes; scaling unit is a whole VM.
Containers (ECS/Kubernetes) Faster start, denser packing, immutable images You still operate a cluster (nodes, control plane, autoscalers); scale-to-zero is not native; capacity planning moves to the node pool.
PaaS (Platform as a Service, e.g. Heroku/Elastic Beanstalk) No OS patching Still sized in long-running instances ("dynos"); idle instances still bill.

The common limitation: the unit of capacity is a long-running server , so somebody must decide how many to keep running before demand arrives.

3. The constraints that shaped Lambda

To make "run code only when an event happens" a reality, a design must satisfy several constraints at once --- and each constraint explains a piece of Lambda you will meet later:

Constraint Consequence in Lambda's design Where you meet it
Scale to zero, scale to thousands, per request Capacity unit = one execution environment serving one request at a time; concurrency is the scaling metric. 05.4
Strong multi-tenant isolation at high density Each environment is a Firecracker microVM (micro Virtual Machine) --- VM-grade isolation with container-like startup. 05.6
Creating environments on demand costs latency The cold start exists. Some workloads cannot tolerate it → provisioned concurrency (pre-warmed environments). 05.3
The provider runs your code, so code must be reproducible Deployments become immutable versions: an exact, frozen snapshot of code + configuration. 05.1
Callers must not change every time you deploy A stable name that can be re-pointed → aliases, which also enable canary traffic shifting and instant rollback. 05.2
A runaway function must not take down its neighbors Account-level and per-function concurrency limits, throttling with HTTP (Hypertext Transfer Protocol) 429. 05.4
Pay only for what runs Billing in GB-s (Gigabyte-seconds) at 1 ms granularity, plus per request. 02 What

4. The "someone would have to invent it" test

If Lambda did not exist and you had to build "run my code on every event, pay nothing when idle", you would be forced to invent:

  1. a router that receives an event and decides whether it is allowed to run (limits),
  2. a pool of isolated sandboxes that can be found warm or created cold,
  3. a way to freeze what code runs so the provider can create identical sandboxes at any time (versions),
  4. a stable name callers use while the code behind it changes (aliases), and
  5. a knob to pre-create sandboxes for latency-sensitive paths (provisioned concurrency).

That list is the concept map of 03 Concept map.

Conclusion

The pain was never "servers are hard" in the abstract; it was that capacity had to be decided before demand arrived and deploys mutated live servers. Lambda answers the first with per-request, concurrency-based scaling in microVMs, and the second with immutable versions behind movable aliases. Cold starts are the price of the first answer; provisioned concurrency is the escape hatch.


Next → 02 What · Back to 00 Overview


📚 Back to series index

相关推荐
无所畏俱的老尹1 天前
Agent 落地为什么需要影子对照:同输入只读双跑、写动作变提案、差异报警,比直接切全量更安全
人工智能·机器学习·云计算·aigc·devops
逐流人1 天前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops
SaaS_Product2 天前
OneDrive中的文件批量迁移到Zoho网盘
经验分享·云计算·saas·onedrive
Zhang2857323 天前
跨境业务选AWS区域避坑指南:美东、美西、新加坡、东京怎么选?
云计算·aws
DolitD4 天前
UE像素流与云渲染技术方案对比分析
3d·云原生·ue5·云计算·图形渲染
天府云创4 天前
面向 Personal Agent 增强长期记忆与个性化能力,阿里云升级Memory 服务
阿里云·云计算·memory·agent智能体·长期记忆·personal agent
yunlaodacom4 天前
AWS亚马逊云代理商:WAF登录接口请求洪泛,限速阈值怎么设置?
云计算·aws
长不大的杨瑞杰4 天前
OpenCode v2 配置工程实战:Config 优先级、JSONC、变量替换与多环境治理
人工智能·安全·云计算·软件工程·devops
longzhizhui9264 天前
Ubuntu 全版本 CVE-2026-98432 内核安全升级操作手册
ubuntu·网络安全·云计算·bash
yunlaodacom4 天前
做异地灾备,华为云国际站 OBS 跨地域复制该怎么配置?
安全·华为云·云计算