3. OCI计算服务架构与部署

OCI计算服务(Compute)是整条云上业务链路的算力底座。理解它的关键,不是记住有多少种实例规格,而是建立一条清晰的判断链:业务负载特征 → 实例族(Shape Family)→ 具体规格(Shape)→ 弹性策略 → 生命周期与启动脚本。本节按这条链路展开,重点讲清选型依据、弹性伸缩的触发逻辑,以及实例从创建到终止的完整生命周期控制。

一、实例形态:VM、BM 与 GPU 的定位差异

OCI 计算实例按虚拟化形态分为三类,它们的差异不只是性能高低,而是资源隔离方式与适用场景的根本不同。

  • 虚拟机实例(VM):基于 KVM 虚拟化,共享物理主机资源,支持在线变更规格(纵向伸缩)与快速克隆。适合 Web 前端、应用服务器、中间件、开发测试环境等大多数通用负载。OCI 的 VM 实例又细分为标准型(Standard)、密集 I/O 型(DenseIO)、优化型(Optimized)等族。
  • 裸金属实例(BM):整台物理服务器直接交付,无 Hypervisor 开销,提供确定性性能与硬件级隔离。适合数据库(如 Oracle RAC、Exadata 之外的独立 DB)、高性能计算、对延迟极度敏感的交易系统,以及需要自定义虚拟化或自带 License 的场景。
  • GPU 实例:在 VM 或 BM 形态上挂载 NVIDIA GPU(如 A100、H100、V100、T4 等),面向 AI 训练/推理、科学计算、图形渲染。选型时除了 GPU 型号与数量,还要关注 GPU 互联(NVLink)、网络带宽(RDMA/RoCE)与本地 NVMe 容量。

选型时建议先回答三个问题:负载是计算密集、内存密集还是 I/O 密集?是否需要硬件级隔离或自带 License?是否需要GPU 加速?答案基本就能锁定实例族。例如一个日活百万的电商订单服务,用 VM 标准型 3 节点加负载均衡即可;而一个需要跑 Oracle 数据库且要求稳定 IOPS 的系统,则应优先考虑 BM DenseIO 或 VM DenseIO。

OCI 计算实例选型与生命周期总览 ① 负载特征判断 计算密集 / 通用 内存 / I/O 密集 GPU 加速需求 硬件隔离 / 自带 License VM 标准型 / 优化型 VM/BM DenseIO GPU VM / GPU BM BM 标准型 / DenseIO ② 弹性伸缩(Autoscaling) 指标触发 计划触发 阈值策略 实例池扩缩容 → 负载均衡后端自动更新 ③ 实例生命周期 PROVISIONING RUNNING STOPPED TERMINATED 启动脚本(cloud-init)在 PROVISIONING → RUNNING 阶段执行 STOPPED 保留引导卷,TERMINATED 可保留或删除引导卷 ④ 启动脚本(cloud-init)执行顺序 系统初始化 安装软件包 配置应用 注册到 LB 健康检查

二、弹性伸缩:从指标到实例池的闭环

OCI 的弹性伸缩由 Autoscaling Configuration 驱动,它绑定一个实例池(Instance Pool),实例池再绑定实例配置(Instance Configuration)与放置策略。伸缩策略分两类:

  • 指标型(Metric-based):基于 OCI Monitoring 的指标,如 CPU 利用率、内存利用率(需安装监控代理)、自定义指标。典型配置:CPU 平均利用率 > 70% 持续 5 分钟 → 扩容 1 台;< 30% 持续 10 分钟 → 缩容 1 台。冷却时间(Cooldown)建议设为 300 秒,避免抖动。
  • 计划型(Schedule-based):按时间表执行,适合可预测的业务波峰,如每天 08:00 扩容到 6 台、22:00 缩容到 2 台。

伸缩的边界由 最小实例数 / 最大实例数 控制。扩容时新实例自动加入负载均衡后端;缩容时先摘除后端、等待连接排空,再终止实例。这里有一个容易被忽略的点:缩容不是立即删除,而是先进入 STOPPED 或直接 TERMINATED,取决于实例池的终止策略。若业务有长连接,应配置连接排空时间,否则会出现请求中断。

三、实例生命周期与启动脚本

OCI 实例的生命周期状态包括:PROVISIONING → RUNNING → STOPPING → STOPPED → STARTING → RUNNING,以及 TERMINATED。几个关键行为:

  • STOPPED:计算资源释放,但引导卷(Boot Volume)保留并继续计费。适合临时停机维护。
  • TERMINATED:实例销毁,可选择保留或删除引导卷。若保留,后续可用该引导卷重建实例。
  • 重启(Reboot):分软重启(OS 层)与硬重启(相当于断电重启),硬重启用于系统无响应时。

启动脚本(Cloud-init / User Data)是实例自动化的核心。它在实例首次启动时以 root 身份执行,常用于安装软件、拉取配置、注册到服务发现或负载均衡。OCI 支持两种形式:Cloud-init 脚本(YAML 格式,功能完整)和 自定义脚本(直接传 Shell 脚本)。下面是一个典型的 Web 节点启动脚本示例:

#!/bin/bash
# 示例:安装 Nginx 并注册到负载均衡后端
set -e
yum install -y nginx
systemctl enable nginx
systemctl start nginx

# 写入实例元数据中的环境标识
echo "role=web" >> /etc/environment

# 调用 OCI CLI 将本实例加入后端集(需实例具备动态组权限)
INSTANCE_ID=$(curl -s -H "Authorization: Bearer Oracle" \
  http://169.254.169.254/opc/v2/instance/id)
oci lb backend-set update \
  --load-balancer-id ocid1.loadbalancer.oc1..example \
  --backend-set-name web-backend \
  --backends "[{\"ipAddress\":\"$(hostname -I | awk '{print $1}')\",\"port\":80}]"

需要注意:启动脚本只在首次启动执行,实例重启不会重复执行。若脚本执行失败,实例仍会进入 RUNNING,但应用可能未就绪,因此建议在脚本末尾写入一个标记文件(如 /var/log/cloud-init-done),并在负载均衡健康检查中校验该标记或应用端口。

实践建议:将启动脚本拆分为“基础镜像预装”与“启动时注入”两层。基础镜像里预装好运行时和依赖,启动脚本只做配置注入与注册,这样实例启动更快、失败面更小。
常见排障点:启动脚本中使用了交互式命令(如 yum 未加 -y)会导致脚本挂起;脚本中引用了尚未就绪的网络或元数据服务,应加重试逻辑;实例没有动态组权限时,OCI CLI 调用会返回 401,需在 IAM 中为实例所属动态组授予相应策略。

四、选型与部署的落地检查

把上述内容串成一次可执行的部署判断:先根据负载特征选定实例族与规格,再确定是单实例还是实例池;若需要弹性,配置 Autoscaling 的指标阈值、冷却时间与实例数边界;最后编写启动脚本,确保实例启动后能自动完成应用配置与服务注册。部署完成后,通过 OCI 控制台的实例指标、负载均衡后端健康状态、以及应用日志三处交叉验证,确认实例真正可用,而不是仅仅处于 RUNNING 状态。

场景推荐实例形态弹性策略启动脚本重点
Web 前端 / API 网关VM 标准型CPU > 70% 扩容安装运行时、注册 LB 后端
关系型数据库BM DenseIO / VM DenseIO通常不自动伸缩挂载数据卷、配置备份
AI 推理服务GPU VM按队列深度或 GPU 利用率加载模型、启动推理服务
批处理任务VM 计算优化型计划型伸缩拉取任务、执行后自动终止

掌握这条链路后,OCI 计算服务的部署就不再是“选一台机器开起来”,而是围绕业务特征、弹性边界与自动化启动脚本形成的一套可复现、可验证的工程方法。