云计算(Cloud Computing)是通过网络按需提供可配置计算资源(服务器、存储、数据库、网络、软件、AI 算力等)的模式。用户无需自建机房,即可像用水用电一样按量付费使用计算资源。
| 特征 | 说明 |
| 按需自助服务 | 用户自助开通资源,无需人工干预 |
| 广泛网络接入 | 通过互联网随时随地访问 |
| 资源池化 | 多租户共享物理资源,按需分配 |
| 快速弹性 | 资源可秒级伸缩,应对流量波动 |
| 可计量服务 | 按使用量计费,透明可审计 |
1960s John McCarthy:计算未来将像公共事业一样提供
1999 Salesforce 推出 SaaS 模式
2006 AWS 发布 S3 和 EC2,云计算元年
2008 微软 Azure、谷歌 App Engine 相继推出
2010 阿里云、腾讯云起步,中国云计算兴起
2013 Docker 发布,容器化时代开启
2015 Kubernetes 1.0 发布,容器编排成为标准
2020s AI 云服务爆发:GPU 云、大模型 API、Serverless 普及
| 模式 | 全称 | 提供内容 | 用户管理 | 示例 |
| IaaS | 基础设施即服务 | 计算、存储、网络 | 系统及以上 | AWS EC2、阿里云 ECS |
| PaaS | 平台即服务 | 运行时、数据库、中间件 | 应用及以上 | AWS Lambda、Heroku |
| SaaS | 软件即服务 | 完整应用 | 仅使用 | Office 365、钉钉 |
┌─────────────────────────────────┐
│ SaaS 应用(用户只管用) │
├─────────────────────────────────┤
│ PaaS 平台(用户只管开发) │
├─────────────────────────────────┤
│ IaaS 基础设施(用户只管部署) │
├─────────────────────────────────┤
│ 物理机房(用户什么都不管 = 传统)│
└─────────────────────────────────┘
| 模式 | 说明 | 示例 |
| FaaS(函数即服务) | 上传函数,平台自动弹性运行 | AWS Lambda、Cloudflare Workers |
| CaaS(容器即服务) | 托管容器编排平台 | AWS EKS、谷歌 GKE |
| MaaS(模型即服务) | 直接调用大模型 API | OpenAI API、通义千问 API |
| 模式 | 说明 | 适用场景 |
| 公有云 | 第三方提供,多租户共享 | 创业公司、弹性业务 |
| 私有云 | 企业自建或专享 | 金融、政务、涉密场景 |
| 混合云 | 公有云 + 私有云协同 | 弹性扩容 + 数据合规 |
| 多云 | 同时使用多家云厂商 | 避免厂商锁定、容灾 |
| 边缘云 | 资源部署在靠近用户一侧 | IoT、自动驾驶、低延迟场景 |
虚拟化是云计算的基石,把一台物理机划分成多台“虚拟机“。
┌─────────────────────────────┐
│ 虚拟机 1 虚拟机 2 虚拟机 3 │
├─────────────────────────────┤
│ Hypervisor(KVM/VMware) │
├─────────────────────────────┤
│ CPU / 内存 / 磁盘 / 网卡 │
└─────────────────────────────┘
| 技术 | 说明 |
| Hypervisor | 虚拟机监视器,如 KVM、VMware、Hyper-V |
| 容器 | 共享宿主机内核的隔离进程,如 Docker |
| gVisor | 谷歌的容器安全沙箱 |
| 维度 | 虚拟机 | 容器 |
| 隔离级别 | 硬件级隔离(独立内核) | 进程级隔离(共享内核) |
| 启动时间 | 秒级到分钟级 | 毫秒级 |
| 资源开销 | 大(每个 VM 一个完整系统) | 小(共享内核) |
| 密度 | 一台物理机数十台 VM | 一台物理机数百个容器 |
| 安全边界 | 强 | 相对弱(依赖内核安全) |
docker build -t myapp . # 构建镜像
docker run -d -p 8080:80 myapp # 运行容器
docker ps # 查看运行中的容器
docker compose up -d # 多容器编排
容器数量少时手动管理即可;当有成百上千个容器需要自动部署、伸缩、故障恢复时,就需要容器编排平台。
| 概念 | 说明 |
| Pod | 最小调度单元,一个或多个容器 |
| Deployment | 声明式管理副本数和滚动更新 |
| Service | 稳定的访问入口(负载均衡) |
| Ingress | 七层 HTTP 路由 |
| ConfigMap / Secret | 配置与密钥管理 |
| Namespace | 资源隔离与分组 |
| Node | 工作节点(物理机或虚拟机) |
┌──────────────┐
│ Control Plane │
│ (kube-apiserver)│
└──────┬───────┘
┌────────────┬────┴────┬────────────┐
▼ ▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ Node 1 │ │ Node 2 │ │ Node 3 │ │ Node N │
│ Pod Pod │ │ Pod Pod │ │ Pod Pod │ │ Pod Pod │
└─────────┘ └─────────┘ └─────────┘ └─────────┘
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3 # 期望 3 个副本,自动维持
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: nginx:latest
ports:
- containerPort: 80
| 类型 | 说明 | 示例 |
| 对象存储 | 海量非结构化数据,HTTP 访问 | AWS S3、阿里云 OSS |
| 块存储 | 挂载到云服务器的硬盘 | AWS EBS、云盘 |
| 文件存储 | 多台服务器共享的文件系统 | AWS EFS、NAS |
| 类型 | 说明 | 示例 |
| 关系型 | MySQL / PostgreSQL 托管 | RDS、云数据库 RDS |
| NoSQL | 键值、文档、宽表 | DynamoDB、MongoDB Atlas |
| 数据仓库 | 海量数据分析 | Redshift、ClickHouse |
| 缓存 | 高速读写 | Redis、Memcached |
上传 → 标准存储(热数据,访问频繁)
↓ 30 天未访问
低频访问(成本降低)
↓ 90 天未访问
归档存储(成本最低,需解冻)
↓
过期删除
用户只写业务代码,无需关心服务器、扩容、高可用——平台按调用次数计费,空闲时不产生费用。
/*
[dependencies]
serde_json = "1"
tokio = { version = "1", features = ["full"] }
*/
use lambda_runtime::{service_fn, LambdaEvent};
use serde_json::{json, Value};
async fn handler(event: LambdaEvent<Value>) -> Result<Value, lambda_runtime::Error> {
let body = event.payload;
Ok(json!({
"statusCode": 200,
"body": format!("收到请求: {}", body)
}))
}
#[tokio::main]
async fn main() -> Result<(), lambda_runtime::Error> {
let func = service_fn(handler);
lambda_runtime::run(func).await?;
Ok(())
}
| 优点 | 缺点 |
| 零运维,专注业务代码 | 冷启动延迟 |
| 按调用计费,闲置免费 | 不适合长时间运行的任务 |
| 自动弹性伸缩 | 厂商锁定 |
| 内置高可用 | 调试与监控困难 |
| 特征 | 说明 |
| 微服务 | 应用拆分为可独立部署的小服务 |
| 容器化 | 用容器打包与运行服务 |
| 声明式 API | 描述期望状态,平台自动对齐 |
| DevOps | 开发与运维一体化,CI/CD 流水线 |
| 可观测性 | 日志、指标、链路追踪三件套 |
| 要素 | 要点 |
| 配置 | 配置存入环境变量,不进代码仓库 |
| 进程 | 无状态进程,可随时启停复制 |
| 后端服务 | 数据库、消息队列等作为附加资源,可替换 |
| 日志 | 日志输出到标准输出,由平台收集 |
| 一次性 | 进程可快速启动、优雅退出 |
日志(Logs)—— 发生了什么(离散事件)
指标(Metrics)—— 系统状态如何(数值聚合)
链路追踪(Traces)—— 请求经历了什么(调用链)
┌─────────────────────────────┐
│ 用户负责:数据、应用、账号权限 │
├─────────────────────────────┤
│ 云厂商负责:物理机房、硬件、网络 │
└─────────────────────────────┘
| 实践 | 说明 |
| IAM 最小权限 | 只用最小必要权限,定期轮换密钥 |
| 加密 | 传输加密(TLS)+ 存储加密(KMS) |
| 网络隔离 | VPC 私有网络、安全组、防火墙 |
| 审计日志 | 开启 CloudTrail / ActionTrail |
| 备份与容灾 | 跨可用区、跨地域备份 |
| 合规 | 等保 2.0、SOC 2、GDPR |
| 厂商 | 地区 | 代表服务 |
| AWS | 全球 | EC2、S3、Lambda、SageMaker |
| Azure | 全球 | 虚拟机、AI、GitHub |
| Google Cloud | 全球 | GKE、BigQuery、Vertex AI |
| 阿里云 | 中国 | ECS、OSS、PolarDB、通义千问 |
| 腾讯云 | 中国 | CVM、COS、TDSQL |
| 华为云 | 中国 | 昇腾 AI、ModelArts |
/*
[dependencies]
serde_json = "1"
tokio = { version = "1", features = ["full"] }
*/
use reqwest::Client;
use serde_json::json;
// 调用云端 API 的示例
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let resp = client
.post("https://api.example.com/chat")
.json(&json!({ "model": "qwen-max", "prompt": "你好" }))
.send()
.await?;
println!("状态码: {}", resp.status());
Ok(())
}
| 知识点 | 要点 |
| 云计算特征 | 按需自助、网络接入、资源池化、弹性、可计量 |
| 服务模式 | IaaS、PaaS、SaaS、FaaS、MaaS |
| 部署模式 | 公有云、私有云、混合云、多云、边缘云 |
| 虚拟化与容器 | Hypervisor、Docker、VM vs 容器 |
| 容器编排 | Kubernetes:Pod、Deployment、Service |
| 云存储 | 对象存储、块存储、文件存储 |
| Serverless | 按调用计费、自动弹性、冷启动 |
| 云原生 | 微服务、容器化、DevOps、可观测性 |
| 云安全 | 责任共担、IAM、加密、VPC、审计 |
| Rust 生态 | aws-sdk-rust、reqwest、tonic |
- Docker 实践:把一个简单的 Rust Web 服务容器化,用
docker build 和 docker run 本地运行,并用 docker ps 观察。
- Kubernetes 部署:在本地用 minikube 或 kind 部署上面的服务,编写 Deployment 和 Service YAML,实现滚动更新。
- 对象存储上传:用 aws-sdk-rust 的 S3 API 实现文件上传和下载,并设置生命周期规则。
- Serverless 体验:在任一云平台创建一个 FaaS 函数,用 Rust 实现一个“图片压缩“函数,观察按调用计费模型。
- 十二要素审计:对照 12-Factor 审计一个现有项目,找出配置硬编码、有状态进程等问题并改进。
- 云成本分析:设计一个电商网站的云架构(计算、存储、数据库、CDN),估算日活 10 万用户时的月成本,并给出降本方案。