跳转至

云服务

云服务(Cloud Services)是通过互联网按需提供计算资源(服务器、存储、网络、数据库等)的服务模式。与传统的自建机房相比,云服务让用户无需购买和维护物理硬件,只需通过网络即可获取几乎无限的计算能力。本节系统性地整理云服务的核心概念、网络架构、安全机制、部署实践等内容。

1. 云计算概论

1.1 什么是云计算

云计算的本质是资源的池化与按需分配。云服务商在全球各地建设大规模数据中心,将物理服务器、存储设备、网络设备等硬件资源通过虚拟化技术抽象为可动态分配的资源池。用户通过互联网访问这些资源,按使用量付费。

云计算的五个核心特征(NIST 定义):

  • 按需自助服务(On-demand Self-service):用户可以随时自行配置计算资源,无需与服务商人工交互。
  • 广泛的网络访问(Broad Network Access):通过标准网络协议,从各种终端设备访问云资源。
  • 资源池化(Resource Pooling):服务商将资源汇聚成池,通过多租户模型动态分配给不同用户。
  • 快速弹性伸缩(Rapid Elasticity):资源可以根据需求快速扩展或缩减,对用户而言几乎是无限的。
  • 可计量的服务(Measured Service):资源使用情况被监控和计量,用户按实际使用量付费。

1.2 云计算服务模型

云计算按照提供的抽象层次,分为三种主要的服务模型:

IaaS(Infrastructure as a Service,基础设施即服务)

提供最底层的计算资源:虚拟机、网络、存储。用户拥有最大的控制权,需要自行管理操作系统、中间件和应用程序。

  • 典型服务:AWS EC2、Google Compute Engine、Oracle Cloud Compute、Azure Virtual Machines
  • 适用场景:需要完全控制运行环境的应用,如自建数据库、自定义网络架构
  • 用户管理范围:操作系统、运行时环境、应用程序、数据

PaaS(Platform as a Service,平台即服务)

提供应用运行平台,用户只需关注代码和数据,无需管理底层基础设施。

  • 典型服务:Google App Engine、Azure App Service、Heroku、Cloud Foundry
  • 适用场景:Web 应用开发、API 服务、微服务架构
  • 用户管理范围:应用程序代码、数据

SaaS(Software as a Service,软件即服务)

直接提供可用的软件应用,用户通过浏览器或客户端使用,无需关心任何技术细节。

  • 典型服务:Gmail、Google Docs、Salesforce、Slack、Dropbox
  • 适用场景:日常办公、协作、邮件等
  • 用户管理范围:仅限数据和用户配置

三者的关系可以用一个比喻来理解:

  • IaaS:租一块地和建筑材料,自己盖房子、装修、搬家具
  • PaaS:租一间精装修的空房子,自己搬家具进去就能住
  • SaaS:住酒店,一切都准备好了,拎包入住
用户管理范围递减,服务商管理范围递增:

┌─────────────────────────────────────────────────┐
│                    SaaS                         │
│         用户只管使用,其他全托管                    │
├─────────────────────────────────────────────────┤
│                    PaaS                         │
│         用户管理应用和数据                        │
├─────────────────────────────────────────────────┤
│                    IaaS                         │
│         用户管理 OS、运行时、应用、数据             │
├─────────────────────────────────────────────────┤
│              物理基础设施(服务商管理)              │
│       服务器、存储、网络、数据中心、电力             │
└─────────────────────────────────────────────────┘

1.3 其他服务模型

除了经典的三层模型外,近年来还衍生出了更多细分模型:

  • FaaS(Function as a Service):无服务器计算(Serverless),用户只需编写函数代码,由平台自动管理执行环境。典型服务:AWS Lambda、Google Cloud Functions、Azure Functions。
  • CaaS(Container as a Service):提供容器编排和管理服务。典型服务:Google Kubernetes Engine (GKE)、Amazon EKS、Azure AKS。
  • DBaaS(Database as a Service):提供托管数据库服务。典型服务:Amazon RDS、Google Cloud SQL、Azure SQL Database。
  • BaaS(Backend as a Service):为移动和 Web 应用提供后端服务。典型服务:Firebase、AWS Amplify。

1.4 云部署模型

根据云资源的所有权和使用范围,云计算分为以下几种部署模型:

  • 公有云(Public Cloud):由云服务商拥有和运营,资源通过互联网对外提供。如 AWS、Google Cloud、Azure。
  • 私有云(Private Cloud):由单一组织独占使用,可以部署在自有数据中心或由第三方托管。如 OpenStack、VMware vSphere。
  • 混合云(Hybrid Cloud):公有云和私有云的组合,数据和应用可以在两者之间迁移。
  • 多云(Multi-Cloud):同时使用多个公有云服务商的服务,避免供应商锁定。

2. 主要云服务商

2.1 AWS(Amazon Web Services)

全球市场份额最大的云服务商,服务最为全面。

  • 核心计算服务:EC2(虚拟机)、Lambda(无服务器)、ECS/EKS(容器)
  • 存储服务:S3(对象存储)、EBS(块存储)、Glacier(归档存储)
  • 数据库服务:RDS(关系型)、DynamoDB(NoSQL)、ElastiCache(缓存)
  • AI/ML 服务:SageMaker(机器学习平台)、Bedrock(大模型服务)
  • 全球基础设施:30+ 个区域(Region),100+ 个可用区(Availability Zone)
  • 免费层:12 个月免费试用 + 永久免费层(部分服务有限额)

2.2 Google Cloud Platform (GCP)

以数据分析和 AI/ML 能力见长,与 Google 生态深度集成。

  • 核心计算服务:Compute Engine(虚拟机)、Cloud Functions(无服务器)、GKE(Kubernetes)
  • 存储服务:Cloud Storage(对象存储)、Persistent Disk(块存储)
  • 数据分析:BigQuery(数据仓库)、Dataflow(流处理)、Pub/Sub(消息队列)
  • AI/ML 服务:Vertex AI(机器学习平台)、TPU(专用 AI 芯片)
  • 免费层:$300 免费试用额度(90 天)+ 永久免费层
  • 特色:全球最快的网络基础设施、原生 Kubernetes 支持

2.3 Microsoft Azure

与微软生态(Windows、Office 365、Active Directory)深度集成。

  • 核心计算服务:Virtual Machines、Azure Functions、AKS(Kubernetes)
  • 企业服务:Azure Active Directory(身份管理)、Microsoft 365 集成
  • AI/ML 服务:Azure OpenAI Service(GPT 系列模型)、Azure Machine Learning
  • 混合云:Azure Arc(混合云管理)、Azure Stack(本地部署)
  • 免费层:$200 免费额度(30 天)+ 永久免费服务

2.4 Oracle Cloud Infrastructure (OCI)

以数据库服务和企业级应用见长,提供慷慨的免费层。

  • 核心计算服务:Compute(虚拟机)、Container Engine for Kubernetes
  • 数据库服务:Autonomous Database(自治数据库,Oracle 的核心优势)
  • Always Free 层(永久免费,非常适合学习):
    • 2 个 AMD Compute 实例(1/8 OCPU,1 GB 内存)
    • 最多 4 个 Arm Compute 实例(合计 4 OCPU,24 GB 内存,非常慷慨)
    • 2 个 Autonomous Database
    • 200 GB 块存储、10 GB 对象存储
  • 特色:免费层资源在主流云服务商中最为慷慨

2.5 其他云服务商

  • 阿里云:国内市场份额最大,适合面向中国用户的业务
  • 腾讯云:与微信生态集成,游戏和社交场景有优势
  • 华为云:政企市场有强大影响力
  • DigitalOcean:面向开发者,界面简洁,定价透明
  • Vultr / Linode:高性价比的 VPS 服务商

3. 云网络架构

云网络是云计算的基础,理解云网络架构对于正确配置和使用云服务至关重要。

3.1 虚拟云网络(VCN / VPC)

不同云服务商对虚拟网络的命名不同:

  • Oracle Cloud:VCN(Virtual Cloud Network)
  • AWS / Google Cloud:VPC(Virtual Private Cloud)
  • Azure:VNet(Virtual Network)

它们本质上是同一个概念:在云上创建的一个逻辑隔离的私有网络空间

用通俗类比来理解 VCN/VPC 中的核心概念:

概念 全称 类比 说明
VCN/VPC Virtual Cloud Network 公司办公大楼 云上专属的私有网络空间
Subnet 子网 大楼里的部门区域 VCN 内的逻辑分区,如研发部、市场部
Instance 实例 一台电脑 放在某个子网中的虚拟机
Internet Gateway 互联网网关 大楼的总入口 VCN 与公共互联网之间的通道
NAT Gateway NAT 网关 大楼的后门(只能出不能进) 允许私有子网访问互联网,但不允许外部主动访问
Route Table 路由表 大楼的指路牌 定义网络流量的转发规则

3.2 子网(Subnet)

子网是 VCN 内的逻辑分区,用于隔离不同类型的资源。子网分为两种类型:

公共子网(Public Subnet)

  • 子网内的实例可以分配公共 IP 地址
  • 通过 Internet Gateway 直接与互联网通信
  • 适合放置 Web 服务器、负载均衡器等需要对外提供服务的资源

私有子网(Private Subnet)

  • 子网内的实例没有公共 IP,不能被互联网直接访问
  • 通过 NAT Gateway 可以主动访问互联网(如下载更新)
  • 适合放置数据库、应用服务器等不需要对外暴露的资源
                    ┌─ Internet ─┐
                         │
                  ┌──────┴──────┐
                  │Internet GW  │
                  └──────┬──────┘
                         │
         ┌───────────────┼───────────────┐
         │          VCN / VPC            │
         │                               │
         │  ┌─────────────────────────┐  │
         │  │   Public Subnet         │  │
         │  │  ┌─────┐  ┌─────┐      │  │
         │  │  │Web  │  │LB   │      │  │
         │  │  └─────┘  └─────┘      │  │
         │  └─────────────────────────┘  │
         │                               │
         │  ┌─────────────────────────┐  │
         │  │   Private Subnet        │  │
         │  │  ┌─────┐  ┌─────┐      │  │
         │  │  │DB   │  │App  │      │  │
         │  │  └─────┘  └─────┘      │  │
         │  └─────────────────────────┘  │
         │                               │
         └───────────────────────────────┘

3.3 IP 地址

Private IP(私有 IP)

  • VCN 内部通信使用的地址
  • 类比:公司内部的工号或办公室号
  • 遵循 RFC 1918 标准的私有地址范围:
    • 10.0.0.0/8(10.0.0.0 ~ 10.255.255.255)
    • 172.16.0.0/12(172.16.0.0 ~ 172.31.255.255)
    • 192.168.0.0/16(192.168.0.0 ~ 192.168.255.255)

Public IP(公共 IP)

  • 外部访问实例的地址
  • 类比:公司的门牌号(如长安街1号)
  • 分为两种类型:
    • 临时公共 IP(Ephemeral):实例停止后会释放,重启后可能改变
    • 保留公共 IP(Reserved):即使实例停止也不会释放,可以重新分配给其他实例

Elastic IP / Floating IP

  • AWS 称为 Elastic IP,OpenStack 称为 Floating IP
  • 与 Oracle Cloud 的 Reserved Public IP 概念相同
  • 可以在实例之间灵活迁移,适合需要固定 IP 的场景

通过公共 IP 访问实例的完整路径:

用户请求 → Public IP → Internet Gateway → Route Table → Subnet
→ Security Rules → Private IP → VNIC (虚拟网卡) → Instance (实例)

设置 Public IP 的步骤(以 Oracle Cloud 为例):

  1. 搜索 Attached VNICs,找到对应的 VNIC
  2. 进入 IP Administration
  3. 在 IP 设置中选择 Reserved Public IP Address

3.4 CIDR 与子网划分

CIDR(Classless Inter-Domain Routing) 是一种 IP 地址分配方法,用 IP/前缀长度 表示一个网段:

CIDR 表示 子网掩码 可用 IP 数 说明
10.0.0.0/8 255.0.0.0 16,777,214 超大型网络
10.0.0.0/16 255.255.0.0 65,534 大型网络,常用于 VCN
10.0.0.0/24 255.255.255.0 254 中型网络,常用于子网
10.0.0.0/28 255.255.255.240 14 小型网络

创建 VCN 时需要指定一个 CIDR 块(如 10.0.0.0/16),然后在其内部划分子网(如 10.0.1.0/2410.0.2.0/24)。

3.5 路由表(Route Table)

路由表定义了网络流量的转发规则。每条路由规则包含:

  • 目的地 CIDR:流量要去往的目标网段
  • 目标(Target):流量应该被转发到的下一跳

常见路由规则:

目的地 CIDR 目标 说明
0.0.0.0/0 Internet Gateway 所有外部流量通过互联网网关
10.0.0.0/16 Local VCN 内部流量本地路由
0.0.0.0/0 NAT Gateway 私有子网通过 NAT 访问互联网

3.6 DNS 与域名

云服务通常提供内置的 DNS 服务:

  • 内部 DNS:VCN 内的实例可以通过主机名相互访问
  • 公共 DNS:将域名解析到实例的公共 IP

要让用户通过域名(如 www.example.com)访问云上的网站,需要:

  1. 购买域名(通过域名注册商如 GoDaddy、Cloudflare、阿里云万网等)
  2. 在 DNS 设置中添加 A 记录,将域名指向实例的公共 IP
  3. (可选)使用 CNAME 记录将 www.example.com 指向 example.com

4. 安全机制

云安全是一个非常重要的主题。云服务商提供多层安全机制来保护资源。

4.1 安全组 / 安全列表

不同云服务商的叫法不同:

  • AWS / Google Cloud / Azure:Security Group(安全组)
  • Oracle Cloud:Security List(安全列表) + Network Security Group (NSG)

安全组/安全列表本质上是一个虚拟防火墙,控制进出实例的网络流量。

Ingress Rules(入站规则):控制哪些外部流量可以进入实例。

端口 协议 用途 安全建议
22 TCP SSH 远程登录 限制为自己的 IP,不要开放 0.0.0.0/0
80 TCP HTTP 网页访问 可开放给所有人
443 TCP HTTPS 加密网页访问 可开放给所有人
3306 TCP MySQL 数据库 仅限内网访问,不要暴露到公网
5432 TCP PostgreSQL 数据库 仅限内网访问
6379 TCP Redis 缓存 仅限内网访问
8080 TCP 常用应用端口 根据需要决定
3389 TCP Windows 远程桌面 (RDP) 限制为自己的 IP

Egress Rules(出站规则):控制实例向外发送的流量。通常保持默认(允许所有出站)即可。

设置路径(Oracle Cloud):VCN 设置 → Security → 打开对应的 VCN → Rules

安全最佳实践

  • 最小权限原则:只开放必要的端口
  • 限制来源 IP:SSH 等管理端口应限制为特定 IP,而非 0.0.0.0/0(全网开放)
  • 使用 NSG 而非 Security List:NSG 可以绑定到特定实例,粒度更细
  • 定期审查规则:删除不再需要的规则

4.2 SSH 密钥认证

云实例通常使用 SSH 密钥对进行认证,比密码登录更安全。

密钥对的工作原理

  1. 生成一对密钥:公钥(Public Key)和私钥(Private Key)
  2. 公钥放在服务器上(~/.ssh/authorized_keys
  3. 私钥保存在本地,连接时用于身份验证
  4. 服务器用公钥验证客户端的私钥签名,匹配则允许登录
本地电脑                           云实例
┌──────────┐                    ┌──────────┐
│ 私钥     │  ── SSH 连接 ──→  │ 公钥     │
│ (钥匙)   │  ← 验证通过 ──   │ (锁)     │
└──────────┘                    └──────────┘

生成 SSH 密钥对

# 生成 ED25519 密钥对(推荐,更安全更快)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 或者生成 RSA 密钥对(兼容性更好)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

生成后会得到两个文件:

  • ~/.ssh/id_ed25519:私钥(绝对不能泄露)
  • ~/.ssh/id_ed25519.pub:公钥(可以放心分发)

私钥安全

  • 私钥文件权限必须设为 600(仅所有者可读写):chmod 600 ~/.ssh/id_ed25519
  • 不要通过不安全的渠道传输私钥
  • 建议为私钥设置密码短语(passphrase)

4.3 IAM(Identity and Access Management)

IAM 是云平台的身份与访问管理系统,控制"谁"可以对"什么资源"做"什么操作"。

核心概念:

  • 用户(User):一个人或一个应用程序的身份
  • 组(Group):用户的集合,方便批量管理权限
  • 角色(Role):一组权限的集合,可以被分配给用户、组或服务
  • 策略(Policy):定义权限的规则,描述允许或拒绝的操作

最佳实践

  • 不要使用 root 账户进行日常操作
  • 为每个用户创建独立的 IAM 账户
  • 使用组来管理权限,而非直接给用户分配
  • 启用多因素认证(MFA)
  • 定期轮换访问密钥

4.4 其他安全机制

  • WAF(Web Application Firewall):保护 Web 应用免受 SQL 注入、XSS 等攻击
  • DDoS 防护:如 AWS Shield、Google Cloud Armor,抵御分布式拒绝服务攻击
  • 加密
    • 传输中加密(TLS/SSL):保护数据在网络传输中的安全
    • 静态加密(At-rest Encryption):保护存储在磁盘上的数据
  • VPN(Virtual Private Network):通过加密隧道安全地连接本地网络与云网络
  • 审计日志:记录所有 API 调用和资源变更,如 AWS CloudTrail、Google Cloud Audit Logs

5. 计算服务

5.1 虚拟机实例

虚拟机是最基础的云计算服务。创建实例时需要选择以下配置:

实例规格(Shape / Instance Type)

资源 说明 示例
vCPU 虚拟 CPU 核心数 1, 2, 4, 8, 16...
内存 RAM 大小 1 GB, 4 GB, 16 GB...
架构 CPU 架构 x86 (AMD/Intel) 或 ARM (Ampere)

ARM 架构(如 Oracle Cloud 的 Ampere A1)通常更具性价比,且在 Always Free 层中提供更多资源。

操作系统镜像(Image)

  • Linux 发行版:Ubuntu、CentOS、Oracle Linux、Debian、Amazon Linux
  • Windows Server:需要额外的许可费用
  • 自定义镜像:可以基于现有实例创建自定义镜像,用于批量部署

存储

  • 引导卷(Boot Volume):安装操作系统的磁盘,通常 50 GB 起
  • 块存储(Block Volume):可附加的额外磁盘,类似 USB 外接硬盘
  • 对象存储(Object Storage):存储文件和非结构化数据,通过 API 访问

5.2 实例生命周期

创建(Provisioning) → 运行(Running) → 停止(Stopped) → 终止(Terminated)
                         ↑                  │
                         └──── 启动(Start) ──┘
  • Running:实例正在运行,按运行时间计费
  • Stopped:实例已停止,不再收取计算费用(存储费用仍然存在)
  • Terminated:实例被永久删除,所有数据丢失(除非已备份)

5.3 容器与 Kubernetes

容器是比虚拟机更轻量的计算单元:

  • 容器(Container):将应用及其依赖打包在一起,确保在任何环境中一致运行
  • Docker:最流行的容器运行时
  • Kubernetes (K8s):容器编排平台,自动管理容器的部署、扩缩容和故障恢复

各云服务商的 Kubernetes 托管服务:

云服务商 托管 K8s 服务
AWS EKS (Elastic Kubernetes Service)
Google Cloud GKE (Google Kubernetes Engine)
Azure AKS (Azure Kubernetes Service)
Oracle Cloud OKE (Oracle Container Engine)

5.4 无服务器计算(Serverless)

无服务器并非没有服务器,而是用户无需管理服务器。用户只需编写函数代码,由平台自动分配资源和执行。

特点:

  • 按调用次数计费:不使用时不收费
  • 自动扩缩容:根据请求量自动增减实例
  • 无需运维:不需要管理操作系统或运行时
  • 冷启动问题:长时间未调用时,首次请求可能有延迟

6. 存储服务

6.1 存储类型对比

类型 特点 使用场景 云服务示例
块存储 低延迟、高性能,挂载到实例 数据库、操作系统盘 EBS, Persistent Disk
对象存储 无限扩展、HTTP 访问 文件、图片、备份、静态网站 S3, Cloud Storage
文件存储 共享文件系统、NFS 协议 多实例共享文件 EFS, Cloud Filestore
归档存储 极低成本、检索较慢 合规数据、长期备份 Glacier, Archive Storage

6.2 对象存储

对象存储是云上最常用的存储方式。每个对象包含:

  • 数据(Data):文件内容本身
  • 元数据(Metadata):文件的描述信息(大小、类型、创建时间等)
  • 唯一标识(Key):对象的访问路径

对象存储以 Bucket(桶) 为单位组织数据,类似于文件系统中的顶级目录。

# AWS S3 常用操作
aws s3 ls                           # 列出所有 Bucket
aws s3 cp file.txt s3://my-bucket/  # 上传文件
aws s3 sync ./local s3://my-bucket/ # 同步目录

7. 远程连接与管理

7.1 SSH 连接

基本 SSH 连接命令

# 通用 SSH 连接
ssh -i /path/to/private_key username@public_ip

# Oracle Cloud (Ubuntu 实例)
ssh -i ~/.ssh/oracle_key.key ubuntu@129.xxx.xxx.xxx

# Oracle Cloud (Oracle Linux 实例)
ssh -i ~/.ssh/oracle_key.key opc@129.xxx.xxx.xxx

Google Cloud SSH 连接

# 使用 gcloud CLI(推荐,自动管理密钥)
gcloud compute ssh --zone "us-east1-c" "instance-name" --project "project-id"

SSH 配置文件~/.ssh/config):

通过配置文件简化连接命令:

Host my-oracle-server
    HostName 129.xxx.xxx.xxx
    User ubuntu
    IdentityFile ~/.ssh/oracle_key.key
    Port 22

Host my-gcp-server
    HostName 35.xxx.xxx.xxx
    User username
    IdentityFile ~/.ssh/google_compute_engine
    Port 22

配置后,只需执行 ssh my-oracle-server 即可连接。

7.2 VS Code 远程连接

VS Code 提供了优秀的远程开发体验:

  1. 安装 Remote - SSH 扩展
  2. 点击左下角绿色图标 ><(Open a Remote Window)
  3. 选择 "Connect to Host..."
  4. 从列表中选择对应的主机(读取自 ~/.ssh/config
  5. 连接成功后,VS Code 就像在本地开发一样操作远程服务器

7.3 SCP 文件传输

使用 SCP(Secure Copy Protocol)在本地和云实例之间传输文件:

# 上传文件到云实例
scp -i ~/.ssh/key.pem local_file.txt ubuntu@public_ip:/home/ubuntu/

# 从云实例下载文件
scp -i ~/.ssh/key.pem ubuntu@public_ip:/home/ubuntu/remote_file.txt ./

# 上传整个目录
scp -r -i ~/.ssh/key.pem ./local_dir ubuntu@public_ip:/home/ubuntu/

7.4 云平台 CLI 工具

各云服务商都提供命令行工具:

云服务商 CLI 工具 安装方式
AWS aws pip install awscli
Google Cloud gcloud Google Cloud SDK
Azure az pip install azure-cli
Oracle Cloud oci pip install oci-cli

8. Web 服务器部署

在云实例上部署网站是最常见的入门实践。

8.1 Web 服务器软件

Web 服务器负责接收 HTTP 请求并返回网页内容。常见的 Web 服务器软件:

软件 特点 适用场景
Nginx 高性能、低内存、反向代理 静态网站、反向代理、负载均衡
Apache 功能丰富、模块化 传统 Web 应用、.htaccess 支持
Caddy 自动 HTTPS、配置简单 小型网站、自动证书管理

8.2 Nginx 部署实战

安装 Nginx

# Ubuntu / Debian
sudo apt update
sudo apt install nginx

# CentOS / Oracle Linux
sudo yum install nginx

启动与管理

sudo systemctl start nginx    # 启动
sudo systemctl stop nginx     # 停止
sudo systemctl restart nginx  # 重启
sudo systemctl enable nginx   # 设置开机启动
sudo systemctl status nginx   # 查看状态

配置文件结构

/etc/nginx/
├── nginx.conf              # 主配置文件
├── sites-available/        # 可用的站点配置
│   └── default             # 默认站点
├── sites-enabled/          # 已启用的站点(符号链接)
│   └── default → ../sites-available/default
└── conf.d/                 # 额外配置文件

默认网站目录/var/www/html/

创建网页文件

sudo nano /var/www/html/index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>My Cloud Website</title>
</head>
<body>
    <h1>Hello from Cloud!</h1>
    <p>这是部署在云服务器上的网站。</p>
</body>
</html>

8.3 配置反向代理

如果云实例上运行了一个应用(如 Node.js 在 3000 端口),可以用 Nginx 作为反向代理:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

8.4 HTTPS 配置(Let's Encrypt)

使用 Certbot 免费获取 SSL 证书:

# 安装 Certbot
sudo apt install certbot python3-certbot-nginx

# 自动获取证书并配置 Nginx
sudo certbot --nginx -d example.com -d www.example.com

# 证书自动续期(Certbot 会自动设置定时任务)
sudo certbot renew --dry-run

8.5 部署检查清单

部署完成后,确认以下事项:

  • [ ] 安全组/安全列表已开放 80(HTTP)和 443(HTTPS)端口
  • [ ] Web 服务器已启动并设置开机自启
  • [ ] 防火墙(如 iptablesfirewalld)已放行对应端口
  • [ ] 通过公共 IP 可以在浏览器中访问网站
  • [ ] (可选)域名已配置 DNS 解析
  • [ ] (可选)已配置 HTTPS 证书

9. 区域与可用区

9.1 区域(Region)

区域是云服务商在全球不同地理位置部署的数据中心集群。选择区域时需要考虑:

  • 延迟:选择离用户最近的区域,降低网络延迟
  • 合规:某些数据必须存储在特定国家或地区(如 GDPR 要求欧盟数据留在欧盟)
  • 服务可用性:并非所有服务在所有区域都可用
  • 价格:不同区域的价格可能不同

9.2 可用区(Availability Zone, AZ)

每个区域内有多个可用区,每个可用区是一个独立的数据中心(或数据中心集群),拥有独立的电力、网络和冷却系统。

  • 同一区域内的可用区之间通过高速低延迟网络连接
  • 将资源分布在多个可用区可以实现高可用性(一个 AZ 故障不影响其他 AZ)
Region: us-east-1 (美国东部)
├── AZ: us-east-1a  ← 数据中心 A
├── AZ: us-east-1b  ← 数据中心 B
└── AZ: us-east-1c  ← 数据中心 C

10. 高可用与弹性伸缩

10.1 负载均衡(Load Balancer)

负载均衡器将流量分发到多个后端实例,实现高可用和水平扩展:

  • Layer 4 负载均衡(TCP/UDP):基于 IP 和端口转发,性能高
  • Layer 7 负载均衡(HTTP/HTTPS):基于 URL、Header 等内容转发,功能丰富
                 用户请求
                    │
             ┌──────┴──────┐
             │ Load Balancer│
             └──────┬──────┘
            ┌───────┼───────┐
            ↓       ↓       ↓
        Instance  Instance  Instance
         (AZ-a)   (AZ-b)    (AZ-c)

10.2 自动伸缩(Auto Scaling)

根据负载自动增加或减少实例数量:

  • 扩展策略:CPU 使用率 > 70% 时增加实例
  • 缩减策略:CPU 使用率 < 30% 时减少实例
  • 最小/最大实例数:设置伸缩的上下限

10.3 高可用架构设计

一个典型的高可用 Web 应用架构:

                        用户
                         │
                    ┌────┴────┐
                    │  CDN    │  ← 静态资源缓存
                    └────┬────┘
                         │
                    ┌────┴────┐
                    │   WAF   │  ← Web 应用防火墙
                    └────┬────┘
                         │
                    ┌────┴────┐
                    │   LB    │  ← 负载均衡器
                    └────┬────┘
                   ┌─────┼─────┐
                   ↓     ↓     ↓
                 Web   Web   Web    ← 无状态 Web 服务器(多 AZ)
                   │     │     │
                   └─────┼─────┘
                         ↓
                    ┌────┴────┐
                    │  Cache  │  ← Redis / Memcached
                    └────┬────┘
                         ↓
                    ┌────┴────┐
                    │   DB    │  ← 主从数据库(多 AZ)
                    │ Primary │
                    │    ↓    │
                    │ Replica │
                    └─────────┘

11. 计费与成本优化

11.1 计费模式

模式 说明 折扣 适用场景
按需付费 按小时/秒计费,随时启停 短期任务、测试环境
预留实例 预付 1-3 年费用 30%-60% 长期稳定运行的服务
竞价实例 使用闲置资源,可能被随时回收 60%-90% 可中断的批处理任务
免费层 特定资源免费使用 100% 学习、小型项目

11.2 成本优化建议

  • 善用免费层:Oracle Cloud 的 Always Free 层最为慷慨
  • 选择合适的实例规格:不要过度配置,按实际需求选择
  • 使用竞价实例:适合可中断的训练任务或批处理
  • 设置预算告警:避免意外的高额账单
  • 及时清理资源:删除不再使用的实例、存储和快照
  • 利用自动伸缩:根据负载动态调整实例数量
  • 选择合适的存储层:不常访问的数据使用归档存储

12. 云服务实践:Oracle Cloud 快速上手

以下是在 Oracle Cloud 上从零搭建一个 Web 服务器的完整流程:

Step 1:创建 VCN

  1. 登录 Oracle Cloud Console
  2. 搜索 "Virtual Cloud Networks",点击创建
  3. 选择 "Start VCN Wizard" → "Create VCN with Internet Connectivity"
  4. 设置 VCN 名称和 CIDR 块(默认 10.0.0.0/16 即可)
  5. 向导会自动创建公共子网、私有子网、Internet Gateway、NAT Gateway、路由表和安全列表

Step 2:配置安全列表

  1. 进入 VCN → Security Lists → Default Security List
  2. 添加 Ingress Rules:
    • 端口 22(SSH):Source CIDR 设为你的 IP(如 123.45.67.89/32
    • 端口 80(HTTP):Source CIDR 设为 0.0.0.0/0
    • 端口 443(HTTPS):Source CIDR 设为 0.0.0.0/0

Step 3:创建实例

  1. 搜索 "Instances",点击创建
  2. 选择 Shape(推荐 Always Free 的 Ampere A1,最多 4 OCPU + 24 GB 内存)
  3. 选择操作系统镜像(推荐 Ubuntu)
  4. 选择 VCN 和公共子网
  5. 上传或生成 SSH 公钥
  6. 下载私钥文件(.key),妥善保管

Step 4:分配公共 IP

  1. 进入实例详情 → Attached VNICs → 点击 VNIC
  2. 进入 IPv4 Addresses
  3. 编辑,选择 "Reserved Public IP"

Step 5:SSH 连接

# 设置私钥权限
chmod 600 ~/oracle_key.key

# 连接实例
ssh -i ~/oracle_key.key ubuntu@<public_ip>

Step 6:部署 Web 服务器

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装 Nginx
sudo apt install nginx -y

# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx

# 开放防火墙端口(Ubuntu 的 iptables)
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
sudo netfilter-persistent save

Step 7:验证

在浏览器中访问 http://<public_ip>,看到 Nginx 欢迎页面即表示部署成功。


与其他主题的关系

  • 参见 系统设计,理解云资源如何支撑高可用、扩展性与多层架构
  • 参见 分布式系统,理解云环境中的复制、消息队列、弹性与容错
  • 参见 版本控制与CI/CD,理解镜像构建、发布流水线与基础设施自动化
  • 参见 物联网系统,理解设备、边缘节点与云平台之间的协同

参考文献


评论 #