Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第六十三 云计算

云计算(Cloud Computing)是通过网络按需提供可配置计算资源(服务器、存储、数据库、网络、软件、AI 算力等)的模式。用户无需自建机房,即可像用水用电一样按量付费使用计算资源。


一、云计算概述

1.1 云计算的五个基本特征

特征说明
按需自助服务用户自助开通资源,无需人工干预
广泛网络接入通过互联网随时随地访问
资源池化多租户共享物理资源,按需分配
快速弹性资源可秒级伸缩,应对流量波动
可计量服务按使用量计费,透明可审计

1.2 云计算发展简史

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 普及

二、云服务模式

2.1 IaaS / PaaS / SaaS

模式全称提供内容用户管理示例
IaaS基础设施即服务计算、存储、网络系统及以上AWS EC2、阿里云 ECS
PaaS平台即服务运行时、数据库、中间件应用及以上AWS Lambda、Heroku
SaaS软件即服务完整应用仅使用Office 365、钉钉
┌─────────────────────────────────┐
│  SaaS  应用(用户只管用)         │
├─────────────────────────────────┤
│  PaaS  平台(用户只管开发)       │
├─────────────────────────────────┤
│  IaaS  基础设施(用户只管部署)   │
├─────────────────────────────────┤
│  物理机房(用户什么都不管 = 传统)│
└─────────────────────────────────┘

2.2 新的服务模式

模式说明示例
FaaS(函数即服务)上传函数,平台自动弹性运行AWS Lambda、Cloudflare Workers
CaaS(容器即服务)托管容器编排平台AWS EKS、谷歌 GKE
MaaS(模型即服务)直接调用大模型 APIOpenAI API、通义千问 API

三、部署模式

模式说明适用场景
公有云第三方提供,多租户共享创业公司、弹性业务
私有云企业自建或专享金融、政务、涉密场景
混合云公有云 + 私有云协同弹性扩容 + 数据合规
多云同时使用多家云厂商避免厂商锁定、容灾
边缘云资源部署在靠近用户一侧IoT、自动驾驶、低延迟场景

四、虚拟化与容器

4.1 虚拟化技术

虚拟化是云计算的基石,把一台物理机划分成多台“虚拟机“。

┌─────────────────────────────┐
│  虚拟机 1   虚拟机 2  虚拟机 3 │
├─────────────────────────────┤
│  Hypervisor(KVM/VMware)    │
├─────────────────────────────┤
│  CPU / 内存 / 磁盘 / 网卡    │
└─────────────────────────────┘
技术说明
Hypervisor虚拟机监视器,如 KVM、VMware、Hyper-V
容器共享宿主机内核的隔离进程,如 Docker
gVisor谷歌的容器安全沙箱

4.2 虚拟机 vs 容器

维度虚拟机容器
隔离级别硬件级隔离(独立内核)进程级隔离(共享内核)
启动时间秒级到分钟级毫秒级
资源开销大(每个 VM 一个完整系统)小(共享内核)
密度一台物理机数十台 VM一台物理机数百个容器
安全边界强相对弱(依赖内核安全)

4.3 Docker 基础命令

docker build -t myapp .      # 构建镜像
docker run -d -p 8080:80 myapp   # 运行容器
docker ps                    # 查看运行中的容器
docker compose up -d         # 多容器编排

五、容器编排与 Kubernetes

5.1 为什么需要 Kubernetes

容器数量少时手动管理即可;当有成百上千个容器需要自动部署、伸缩、故障恢复时,就需要容器编排平台。

5.2 Kubernetes 核心概念

概念说明
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  │
└─────────┘  └─────────┘ └─────────┘  └─────────┘

5.3 声明式部署示例

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

六、存储与数据库服务

6.1 云存储类型

类型说明示例
对象存储海量非结构化数据,HTTP 访问AWS S3、阿里云 OSS
块存储挂载到云服务器的硬盘AWS EBS、云盘
文件存储多台服务器共享的文件系统AWS EFS、NAS

6.2 云数据库

类型说明示例
关系型MySQL / PostgreSQL 托管RDS、云数据库 RDS
NoSQL键值、文档、宽表DynamoDB、MongoDB Atlas
数据仓库海量数据分析Redshift、ClickHouse
缓存高速读写Redis、Memcached

6.3 对象存储生命周期

上传 → 标准存储(热数据,访问频繁)
        ↓ 30 天未访问
      低频访问(成本降低)
        ↓ 90 天未访问
      归档存储(成本最低,需解冻)
        ↓
      过期删除

七、无服务器计算(Serverless)

7.1 什么是 Serverless

用户只写业务代码,无需关心服务器、扩容、高可用——平台按调用次数计费,空闲时不产生费用。

7.2 FaaS 示例(AWS Lambda 风格)

/*
[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(())
}

7.3 Serverless 的优缺点

优点缺点
零运维,专注业务代码冷启动延迟
按调用计费,闲置免费不适合长时间运行的任务
自动弹性伸缩厂商锁定
内置高可用调试与监控困难

八、云原生

8.1 云原生(Cloud Native)特征

特征说明
微服务应用拆分为可独立部署的小服务
容器化用容器打包与运行服务
声明式 API描述期望状态,平台自动对齐
DevOps开发与运维一体化,CI/CD 流水线
可观测性日志、指标、链路追踪三件套

8.2 十二要素应用(12-Factor)要点

要素要点
配置配置存入环境变量,不进代码仓库
进程无状态进程,可随时启停复制
后端服务数据库、消息队列等作为附加资源,可替换
日志日志输出到标准输出,由平台收集
一次性进程可快速启动、优雅退出

8.3 可观测性三支柱

日志(Logs)—— 发生了什么(离散事件)
指标(Metrics)—— 系统状态如何(数值聚合)
链路追踪(Traces)—— 请求经历了什么(调用链)

九、云安全

9.1 责任共担模型

┌─────────────────────────────┐
│  用户负责:数据、应用、账号权限 │
├─────────────────────────────┤
│  云厂商负责:物理机房、硬件、网络 │
└─────────────────────────────┘

9.2 云安全最佳实践

实践说明
IAM 最小权限只用最小必要权限,定期轮换密钥
加密传输加密(TLS)+ 存储加密(KMS)
网络隔离VPC 私有网络、安全组、防火墙
审计日志开启 CloudTrail / ActionTrail
备份与容灾跨可用区、跨地域备份
合规等保 2.0、SOC 2、GDPR

十、主流云厂商与 Rust 生态

10.1 主流云厂商

厂商地区代表服务
AWS全球EC2、S3、Lambda、SageMaker
Azure全球虚拟机、AI、GitHub
Google Cloud全球GKE、BigQuery、Vertex AI
阿里云中国ECS、OSS、PolarDB、通义千问
腾讯云中国CVM、COS、TDSQL
华为云中国昇腾 AI、ModelArts

10.2 Rust 云生态

Crate / SDK用途
aws-sdk-rustAWS 官方 Rust SDK
rusotoAWS 服务封装(社区)
reqwestHTTP 客户端,调用云 API
azure_coreAzure SDK 基础库
tokio异步运行时,云服务基石
tonicgRPC 框架(微服务通信)
/*
[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

练习建议

  1. Docker 实践:把一个简单的 Rust Web 服务容器化,用 docker build 和 docker run 本地运行,并用 docker ps 观察。
  2. Kubernetes 部署:在本地用 minikube 或 kind 部署上面的服务,编写 Deployment 和 Service YAML,实现滚动更新。
  3. 对象存储上传:用 aws-sdk-rust 的 S3 API 实现文件上传和下载,并设置生命周期规则。
  4. Serverless 体验:在任一云平台创建一个 FaaS 函数,用 Rust 实现一个“图片压缩“函数,观察按调用计费模型。
  5. 十二要素审计:对照 12-Factor 审计一个现有项目,找出配置硬编码、有状态进程等问题并改进。
  6. 云成本分析:设计一个电商网站的云架构(计算、存储、数据库、CDN),估算日活 10 万用户时的月成本,并给出降本方案。