云服务
云服务(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 为例):
- 搜索 Attached VNICs,找到对应的 VNIC
- 进入 IP Administration
- 在 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/24、10.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)访问云上的网站,需要:
- 购买域名(通过域名注册商如 GoDaddy、Cloudflare、阿里云万网等)
- 在 DNS 设置中添加 A 记录,将域名指向实例的公共 IP
- (可选)使用 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 密钥对进行认证,比密码登录更安全。
密钥对的工作原理:
- 生成一对密钥:公钥(Public Key)和私钥(Private Key)
- 公钥放在服务器上(
~/.ssh/authorized_keys) - 私钥保存在本地,连接时用于身份验证
- 服务器用公钥验证客户端的私钥签名,匹配则允许登录
本地电脑 云实例
┌──────────┐ ┌──────────┐
│ 私钥 │ ── 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 提供了优秀的远程开发体验:
- 安装 Remote - SSH 扩展
- 点击左下角绿色图标
><(Open a Remote Window) - 选择 "Connect to Host..."
- 从列表中选择对应的主机(读取自
~/.ssh/config) - 连接成功后,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 服务器已启动并设置开机自启
- [ ] 防火墙(如
iptables、firewalld)已放行对应端口 - [ ] 通过公共 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
- 登录 Oracle Cloud Console
- 搜索 "Virtual Cloud Networks",点击创建
- 选择 "Start VCN Wizard" → "Create VCN with Internet Connectivity"
- 设置 VCN 名称和 CIDR 块(默认
10.0.0.0/16即可) - 向导会自动创建公共子网、私有子网、Internet Gateway、NAT Gateway、路由表和安全列表
Step 2:配置安全列表
- 进入 VCN → Security Lists → Default Security List
- 添加 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
- 端口 22(SSH):Source CIDR 设为你的 IP(如
Step 3:创建实例
- 搜索 "Instances",点击创建
- 选择 Shape(推荐 Always Free 的 Ampere A1,最多 4 OCPU + 24 GB 内存)
- 选择操作系统镜像(推荐 Ubuntu)
- 选择 VCN 和公共子网
- 上传或生成 SSH 公钥
- 下载私钥文件(
.key),妥善保管
Step 4:分配公共 IP
- 进入实例详情 → Attached VNICs → 点击 VNIC
- 进入 IPv4 Addresses
- 编辑,选择 "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,理解镜像构建、发布流水线与基础设施自动化
- 参见 物联网系统,理解设备、边缘节点与云平台之间的协同
参考文献
- Thomas Erl et al., Cloud Computing: Concepts, Technology & Architecture.
- AWS Well-Architected Framework
- Google Cloud Architecture Framework
- Oracle Cloud Infrastructure Documentation