首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《云计算:不是"远端电脑",是"可编程的基础设施"》

《云计算:不是"远端电脑",是"可编程的基础设施"》

原创
作者头像
资源shanxueit.com
发布2026-08-19 11:54:08
发布2026-08-19 11:54:08
920
举报

你以为你在用云?不,你是在用API调用来代替运维人员凌晨3点爬起来加机器。


一、虚拟化的真相:一台物理机如何变成100台"云主机"

云计算的起点不是Kubernetes,是Hypervisor(虚拟机监视器)。它把物理机的CPU、内存、硬盘切分成时间片,让每个租户以为自己独占了一台电脑。

但作为工程师,你不需要实现Hypervisor,你需要理解的是云API背后的资源模型

创建一台云主机的本质(伪代码展示逻辑)

代码语言:javascript
复制
# 这不是真实的云厂商SDK,是虚拟化逻辑的抽象
class CloudHypervisor:
    def allocate_vm(self, cpu_cores=2, memory_gb=4, disk_gb=40):
        # 物理资源池(假设一台物理机有64核、256GB内存)
        if self.free_cpu < cpu_cores or self.free_memory < memory_gb:
            raise Exception("资源不足,需要调度到其他物理机")
        
        vm_id = generate_uuid()
        self.vm_table[vm_id] = {
            'cpu': cpu_cores,
            'memory': memory_gb,
            'disk': disk_gb,
            'status': 'running'
        }
        # 实际底层是cgroups + namespace(Linux容器)或KVM(虚拟机)
        return vm_id

工程要点拆解

  • 超卖(Overcommitment):云厂商实际分配的vCPU总数可能超过物理核数,因为用户不会同时跑满
  • 隔离性:虚拟机用KVM(硬件虚拟化)隔离更强,容器用cgroups(资源限制)更轻量
  • 你的代码调API时,云平台在背后做的是"资源调度",而不是"变魔术"

二、自动伸缩:不是"玄学",是"阈值+冷却时间"的闭环

云计算最被神话的功能是Auto Scaling。它的核心逻辑简单到令人发指:监控指标 → 触发阈值 → 调整实例数 → 冷却防震荡

实现一个极简自动伸缩控制器(15行核心逻辑)

代码语言:javascript
复制
class AutoScaler:
    def __init__(self, min_size=2, max_size=10, target_cpu=70):
        self.min_size = min_size
        self.max_size = max_size
        self.target_cpu = target_cpu
        self.last_scale_time = 0
        self.cooldown_seconds = 300  # 5分钟冷却
    
    def decide_scale(self, current_instances, avg_cpu_usage):
        # 冷却期内不操作,防止频繁震荡
        if time.now() - self.last_scale_time < self.cooldown_seconds:
            return current_instances
        
        # 扩容逻辑:CPU超70%,且未达上限
        if avg_cpu_usage > self.target_cpu and current_instances < self.max_size:
            new_count = min(current_instances + 1, self.max_size)
            self.last_scale_time = time.now()
            return new_count
        
        # 缩容逻辑:CPU低于30%,且高于下限
        if avg_cpu_usage < 30 and current_instances > self.min_size:
            new_count = max(current_instances - 1, self.min_size)
            self.last_scale_time = time.now()
            return new_count
        
        return current_instances

工程真相

  • 云厂商的Auto Scaling本质就是这段逻辑的工业化版本(加了预测算法、多指标组合)
  • 冷却时间(Cooldown)是防止"扩容→负载下降→缩容→负载上升→扩容"的震荡循环
  • 真正的坑不是算法,是监控数据的延迟(CloudWatch采集有1-2分钟延迟,可能导致滞后扩容)

三、基础设施即代码(IaC):用"声明式"代替"点击运维"

云计算最革命性的不是虚拟机,是用代码管理基础设施。Terraform、CloudFormation的核心思想是:你描述"最终状态",云平台自己去算"怎么变"

用Terraform风格创建一个云资源组(HCL配置,不是代码但胜似代码)

代码语言:javascript
复制
# 声明式:我想要什么,而不是怎么做
resource "aws_instance" "web_server" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  count         = var.environment == "prod" ? 3 : 1
  
  tags = {
    Name        = "WebServer-${var.environment}"
    Environment = var.environment
  }
}

resource "aws_security_group" "web_sg" {
  name = "allow_web_traffic"
  
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

为什么这是"艺术"?

  • 声明式 vs 命令式:你只说"要3台机器",不关心"先创建网络还是先装系统"
  • 幂等性:重复执行100次,结果都一样(不会创建100台机器)
  • 版本控制:基础设施变更走Git,可以Code Review、回滚

工程师的CloudFormation等效代码(AWS的IaC工具)

代码语言:javascript
复制
// 用CDK(Cloud Development Kit)用编程语言写基础设施
import * as ec2 from '@aws-cdk/aws-ec2';
import * as cdk from '@aws-cdk/core';

export class MyStack extends cdk.Stack {
  constructor(scope, id, props) {
    super(scope, id, props);
    
    new ec2.Instance(this, 'WebServer', {
      instanceType: ec2.InstanceType.of(
        ec2.InstanceClass.T2, 
        ec2.InstanceSize.MICRO
      ),
      machineImage: ec2.MachineImage.latestAmazonLinux()
    });
  }
}

核心价值:运维不再是"手动操作控制台",而是写代码,可以用循环、条件、函数来管理资源。


四、云计算的"隐藏成本":不是按量付费,是"设计费"

很多人以为用云就是"用多少付多少",但真正的成本黑洞是架构设计失误

常见错误

真实代价

跨可用区频繁传输数据

流量费比计算费还贵

RDS数据库规格选太大

每月多付几万,但CPU使用率才5%

S3存储没设生命周期

日志文件存了3年,费用翻10倍

预留实例没买

按量付费比包年贵40%

优化代码示例(设置S3自动过期,防止存储费爆炸)

代码语言:javascript
复制
# Boto3(AWS Python SDK)设置生命周期规则
import boto3

s3 = boto3.client('s3')
s3.put_bucket_lifecycle_configuration(
    Bucket='my-log-bucket',
    LifecycleConfiguration={
        'Rules': [{
            'Id': 'DeleteOldLogs',
            'Status': 'Enabled',
            'Expiration': {
                'Days': 30  # 30天后自动删除,省存储费
            },
            'Filter': {
                'Prefix': 'logs/'  # 只作用于logs/目录
            }
        }]
    }
)

工程师的云成本观

  • 计算资源(EC2/Lambda)只占总成本的40%
  • 网络流量(出站带宽)占30%,并且完全不可控
  • 存储(S3/EBS)占20%,可以通过生命周期策略控制
  • 真正的省钱方法是架构优化(比如用Spot实例代替按需实例,省70%)

五、云计算的"道":别迷信"原生",先搞懂"基础"

很多公司直接上Kubernetes,但连VPC(虚拟私有网络)的子网划分都不懂。结果就是:

  • Pod IP和Node IP冲突
  • Service暴露到公网,被黑客挖矿
  • 集群升级时,所有Pod同时重启,服务中断

正确的云原生路径

  1. 先理解虚拟化(虚拟机怎么工作的)
  2. 再理解网络(VPC、子网、安全组)
  3. 然后理解存储(块存储、对象存储的区别)
  4. 最后才是容器编排(Kubernetes是工具,不是目的)

最后一句话送给所有云计算开发者

云计算把机房变成了API,但你依然需要懂网络、存储、操作系统。API只是降低了操作门槛,但没有降低认知门槛。你调用的每一个CreateInstance,背后都是物理机房的硬盘在旋转、风扇在轰鸣。


后记:如果你真想成为云计算高手,别只学AWS/GCP/Azure的SDK,去读读Linux内核的cgroups和namespace源码,那才是云计算的"根"。云厂商只是在这些内核功能上包了一层HTTP API而已。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、虚拟化的真相:一台物理机如何变成100台"云主机"
  • 二、自动伸缩:不是"玄学",是"阈值+冷却时间"的闭环
  • 三、基础设施即代码(IaC):用"声明式"代替"点击运维"
  • 四、云计算的"隐藏成本":不是按量付费,是"设计费"
  • 五、云计算的"道":别迷信"原生",先搞懂"基础"
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档