前置知识: 运维与中间件

云计算基础

6 min入门

云计算概念与演进、服务模型、部署模型、高可用架构设计、负载均衡配置、弹性伸缩策略与云成本优化。

1. 云计算概念与演进

1.1 什么是云计算

云计算是通过互联网按需提供**计算资源(服务器、存储、数据库、网络、软件)**的技术模式,核心特征是按需自助、广泛的网络接入、资源池化、快速弹性和可计量服务。

1.2 发展历程

阶段时间特点代表
大型机时代1960s集中计算、分时共享IBM System/360
PC 时代1980s-90s分布式计算、客户端服务器PC 局域网
网格计算2000s 初跨组织资源共享SETI@home
云计算兴起2006AWS 发布,按需付费AWS EC2
云原生时代2015+容器化、微服务、DevOpsKubernetes
智能云2023+AI + 云、ServerlessAI 云服务

1.3 云计算核心特征

特征说明
按需自助服务用户自行申请资源,无需人工干预
广泛网络接入通过网络标准机制访问
资源池化多租户共享物理资源,动态分配
快速弹性资源可快速扩缩容,按需自动调整
可计量服务资源使用可监控、可计量、可计费

2. 服务模型

2.1 三种服务模型

flowchart TD
    SaaS[SaaS 软件即服务<br/>完整应用:Gmail、Salesforce、钉钉] --> PaaS[PaaS 平台即服务<br/>运行环境:Heroku、Cloud Run、函数计算]
    PaaS --> IaaS[IaaS 基础设施即服务<br/>虚拟机/网络:AWS EC2、阿里云 ECS]
    IaaS --> HW[物理硬件(数据中心)]

2.2 服务模型对比

维度IaaSPaaSSaaS
你管理应用、数据、运行时应用、数据几乎不需要
云商管理OS、中间件、运行时OS、中间件全部
灵活性最高中等最低
运维负担最重中等最轻
典型产品EC2、ECSCloud Run、SAE钉钉、飞书
适用场景定制化基础设施应用快速部署即开即用

3. 部署模型

3.1 四种部署模型

模型说明优势劣势
公有云第三方云商提供,多租户共享低成本、弹性好安全合规顾虑
私有云企业自建或托管,独享资源安全可控成本高、弹性差
混合云公有云 + 私有云组合灵活平衡架构复杂
多云使用多个云服务商避免锁定管理复杂

3.2 混合云架构

flowchart LR
    P[私有云<br/>核心业务<br/>敏感数据] <--> G[混合云网关<br/>专线/VPN<br/>数据同步] <--> U[公有云<br/>弹性业务<br/>大数据分析]

3.3 主流云服务商

云商优势代表产品
AWS生态最全、全球覆盖EC2、S3、Lambda
Azure企业集成、混合云VM、Blob、Functions
GCP大数据/AI、K8s 原生GCE、GCS、Cloud Run
阿里云国内领先、生态完善ECS、OSS、函数计算
腾讯云游戏社交、音视频CVM、COS、SCF
华为云政企市场、AIECS、OBS、FunctionGraph

4. 高可用架构设计

4.1 高可用核心指标

指标计算方式年停机时间
99%1 - 0.9987.6 小时
99.9%1 - 0.9998.76 小时
99.99%1 - 0.999952.6 分钟
99.999%1 - 0.999995.26 分钟

4.2 多可用区架构

flowchart TD
    subgraph Region[Region 区域]
        subgraph AZa[AZ-a]
            A1[实例 x2]
            R1[RDS 主]
        end
        subgraph AZb[AZ-b]
            A2[实例 x2]
            R2[RDS 从]
        end
        subgraph AZc[AZ-c]
            A3[实例 x2]
            R3[RDS 从]
        end
    end

4.3 高可用设计原则

原则实践
消除单点故障多实例、多可用区部署
故障检测健康检查、心跳检测
自动恢复自动重启、自动替换故障实例
数据冗余多副本、跨区域备份
优雅降级核心功能优先,非核心可降级
限流熔断防止级联故障

5. 负载均衡配置

5.1 负载均衡类型

类型OSI 层特点适用场景
L4 负载均衡传输层基于 IP+端口转发TCP/UDP 服务
L7 负载均衡应用层基于 HTTP 头/URL/内容转发Web 应用、API

5.2 负载均衡算法

算法说明适用场景
轮询依次分配请求服务器性能一致
加权轮询按权重比例分配服务器性能不同
最少连接分配给连接数最少的服务器长连接服务
IP Hash同一 IP 分配到同一服务器会话保持
一致性 Hash减少节点变化时的请求迁移缓存服务

5.3 Nginx 负载均衡配置

# nginx.conf
upstream backend {
    # 加权轮询
    server 10.0.1.1:8080 weight=3;
    server 10.0.1.2:8080 weight=2;
    server 10.0.1.3:8080 weight=1;

    # 健康检查
    # server 10.0.1.4:8080 backup;  # 备用服务器

    keepalive 32;  # 长连接数
}

server {
    listen 80;
    server_name api.example.com;

    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 连接超时
        proxy_connect_timeout 5s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;
    }

    # 健康检查端点
    location /health {
        access_log off;
        return 200 "OK";
    }
}

5.4 云负载均衡配置(阿里云 SLB)

# 使用阿里云 CLI 创建负载均衡
aliyun slb CreateLoadBalancer \
  --RegionId cn-hangzhou \
  --LoadBalancerName web-slb \
  --AddressType internet \
  --InternetChargeType paybytraffic

# 添加后端服务器
aliyun slb AddBackendServers \
  --LoadBalancerId lb-xxx \
  --BackendServers '[{"ServerId":"i-xxx1","Weight":"100"},{"ServerId":"i-xxx2","Weight":"100"}]'

# 创建监听
aliyun slb CreateLoadBalancerHTTPListener \
  --LoadBalancerId lb-xxx \
  --ListenerPort 80 \
  --BackendServerPort 8080 \
  --HealthCheckURI /health \
  --HealthCheckInterval 5

6. 弹性伸缩策略

6.1 伸缩模式

模式触发方式适用场景
定时伸缩定时任务触发可预测的周期性流量
动态伸缩监控指标触发不可预测的突发流量
固定数量保持固定实例数稳定业务
手动伸缩人工调整临时需求

6.2 动态伸缩策略

# 伸缩策略配置示例
scaling_policies:
  # 扩容策略
  scale_out:
    trigger:
      metric: cpu_utilization
      threshold: 70%
      duration: 3m
    action:
      add_instances: 2
      cooldown: 300s

  # 缩容策略
  scale_in:
    trigger:
      metric: cpu_utilization
      threshold: 30%
      duration: 5m
    action:
      remove_instances: 1
      cooldown: 300s

  # 定时策略
  scheduled:
    - name: morning_peak
      recurrence: '0 7 * * 1-5' # 工作日7点
      min_size: 10
      max_size: 20
    - name: night_off_peak
      recurrence: '0 22 * * *' # 每晚22点
      min_size: 2
      max_size: 5

6.3 伸缩组配置要点

配置项说明建议
最小实例数伸缩组最少保持的实例数保证基础可用
最大实例数伸缩组最多扩展的实例数控制成本上限
冷却时间伸缩活动后的等待时间300-600秒
健康检查实例健康状态检测自动替换不健康实例
启动配置新实例的模板(镜像/规格/脚本)预装应用

7. 云成本优化

7.1 成本构成

成本类型占比优化空间
计算资源40-60%弹性伸缩、预留实例
存储资源15-25%分层存储、生命周期
网络流量10-20%内网通信、CDN
数据库10-15%规格优化、读写分离
其他服务5-10%按需使用

7.2 成本优化策略

策略说明预估节省
预留实例/包年包月长期使用预付费30-60%
弹性伸缩按负载自动调整资源20-40%
Spot/抢占式实例使用闲置算力60-90%
存储分层热数据标准存储、冷数据归档40-70%
资源右置选择合适的实例规格20-30%
闲置资源回收清理未使用的资源10-20%

7.3 成本监控脚本

import boto3
from datetime import datetime, timedelta

def get_daily_cost(days: int = 30) -> list:
    """获取 AWS 每日成本"""
    client = boto3.client('ce', region_name='us-east-1')

    end_date = datetime.now().strftime('%Y-%m-%d')
    start_date = (datetime.now() - timedelta(days=days)).strftime('%Y-%m-%d')

    response = client.get_cost_and_usage(
        TimePeriod={'Start': start_date, 'End': end_date},
        Granularity='DAILY',
        Metrics=['BlendedCost'],
        GroupBy=[{'Type': 'DIMENSION', 'Key': 'SERVICE'}]
    )

    costs = []
    for result in response['ResultsByTime']:
        date = result['TimePeriod']['Start']
        total = sum(
            float(group['Metrics']['BlendedCost']['Amount'])
            for group in result['Groups']
        )
        costs.append({'date': date, 'total': round(total, 2)})

    return costs

def find_idle_resources():
    """发现闲置资源"""
    ec2 = boto3.resource('ec2')

    # 未附加的 EBS 卷
    volumes = list(ec2.volumes.filter(Filters=[
        {'Name': 'status', 'Values': ['available']}
    ]))
    print(f"未附加的 EBS 卷: {len(volumes)} 个")

    # 未使用的弹性 IP
    eips = [eip for eip in ec2.vpc_addresses.all()
            if eip.instance_id is None]
    print(f"未使用的弹性 IP: {len(eips)} 个")

    # 停止的实例
    stopped = list(ec2.instances.filter(Filters=[
        {'Name': 'instance-state-name', 'Values': ['stopped']}
    ]))
    print(f"停止的实例: {len(stopped)} 个")

7.4 FinOps 实践

成本可视化 → 成本归因 → 成本优化 → 持续治理
     ↓            ↓           ↓           ↓
  预算告警     标签分摊     采购策略     治理策略
阶段关键活动工具
Inform成本可视化、预算告警CloudHealth、云原生工具
Optimize资源右置、预留实例、闲置回收Spot.io、Kubecost
Operate标签治理、成本分摊、持续优化FinOps 平台

小结

  • 初学者要点:云计算的五特征(按需自助、网络接入、资源池化、快速弹性、可计量) 是判断”是不是真云”的标尺;IaaS/PaaS/SaaS 的本质是责任分界线不断上移; 高可用的第一步是多实例 + 多可用区,负载均衡与弹性伸缩是两大支柱。
  • 进阶注意:可用性每多一个 9,成本通常不是线性增长而是跳变(多区域、多活架构); 弹性伸缩的冷却时间与缩容保护是防抖动的关键参数;成本优化的最高优先级是”关掉没人 用的资源”,其次才是预留与竞价实例(详见《云成本优化》)。